Browse Source

- ADD: ubicazione nell'importazione da MAV -> AS400
- CHG: TRUNCATE con DELETE per un errore, può essere che abbiano inserito i trigger e TRUNCATE non funzioni
- ADD: In fase di ventilazione viene utilizzato il barcode
- CHG: Refactor del testo di conferma di reset della lista da ventilare
- DEL: rimosse vecchie cartelle di Lamborghini
- UPD: database schema

Giancarlo Voci 8 years ago
parent
commit
2d0e833086

+ 0 - 1
cfg/config - lamborghini.bin

@@ -1 +0,0 @@
-eJx1UV1r2zAUfRfoP4g8bYz6I068dkEwx3ETF9sa/qCFUorsqrapbLmS3a6U/PfJ6UafJhDoinPOPffc25qLknJ1B4FX5CQi3g4vlKzMBQS+5x8ChFGeFgEERYin1oRgF2yLPXYgCBKf7MJkjxdFfnl2rgmHcH+I9M3xo5ZkEFx5qcF+D61k+P19bDv25es3x147rmVZx6PWyhK86N7UM//RCDViLirK59dmEHLEjmO5m4eypx3DouNt/6SbPJSTYhJLIca5GKhSuG5pX1HJBQQQbNAvOjYQbL0sKNIImx9UCLIwDxIvDjCJzyL9g7ZUMeQLqZ1GZE/u/SLLSRyk2uzPv+zj0dRTtx2tmTIj2pVC1k3bt5GohTH0NQShT5L7mV7k/+NxDZ7GD/jsL2OcVSN6bdqqQdWkRtExiSquR0GspyXXhv55ORnmn41nhVufpIHxWOqlnWKzL5aG7Z4blmGvLAhO2a2t1Uov6Ym9Yd/6PLZOf+m4ru24Gjhnl77E6+uEiOUN3UWup4aCku8kjKeb5/oivMwg+APrl6Wd

+ 0 - 28
cfg/config - lamborghini.ini

@@ -1,28 +0,0 @@
-[globals]
-AUTOLOAD="src/"
-CACHE = TRUE
-UI=ui/
-DEBUG=1
-ENCODING="UTF-8"
-HIGHLIGHT=false
-JAR.expire={{time()+31536000}}
-DSN="mysql:host=localhost;port=3306;dbname=omlink"
-dbuser=root
-dbpass=giancarlo
-PHP_PATH=C:/nginx/php7/php.exe
-MAX_BLINK_TIME_SEC=60
-
-; Path
-BASEURL=/omlink
-SITENAME=OM-Link Base Core
-LOGO_CUSTOMER={{@BASEURL}}/ui/images/LamborghiniLogo.png
-ICON_LOGOUT={{@BASEURL}}/ui/images/logout.png
-
-; Select which customer class enable
-CUSTOMERNAME=lamborghini
-
-[CORE.fb]
-host=192.168.0.140
-port=50443
-key=C0000000000011474023057
-pass=ZrgzkvJrOKnNSCnPnGz3u{A6eHSNXVvs

+ 0 - 0
cfg/config - dimatec.ini → cfg/config.ini


+ 4 - 28
omlink.sql

@@ -7,37 +7,17 @@ SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
 
 SET NAMES utf8mb4;
 
+DROP DATABASE IF EXISTS `omlink`;
 CREATE DATABASE `omlink` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
 USE `omlink`;
 
-DROP TABLE IF EXISTS `articles`;
-CREATE TABLE `articles` (
-  `stazione` varchar(255) NOT NULL,
-  `divisione` varchar(10) NOT NULL,
-  `magazzino` varchar(10) NOT NULL,
-  `tipo_magazzino` varchar(10) NOT NULL,
-  `area_magazzino` varchar(10) NOT NULL,
-  `ubicazione` varchar(255) NOT NULL,
-  `materiale` varchar(255) NOT NULL,
-  `descrizione` varchar(255) NOT NULL,
-  `incc_intr` varchar(10) NOT NULL,
-  `cont_std` varchar(10) NOT NULL,
-  `tipo_contenitore` varchar(10) NOT NULL,
-  `qta_contenitore` varchar(10) NOT NULL,
-  `qta_riordino` varchar(10) NOT NULL,
-  `sequenza` varchar(10) NOT NULL,
-  `dummy01` varchar(10) DEFAULT NULL,
-  PRIMARY KEY (`materiale`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-
-
-DROP TABLE IF EXISTS `distinte`;
 CREATE TABLE `distinte` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `idUtente` int(11) NOT NULL DEFAULT -1,
   `commessa` varchar(255) NOT NULL DEFAULT '',
-  `codcliente` varchar(255) NOT NULL DEFAULT '',
+  `desccliente` varchar(255) NOT NULL DEFAULT '',
   `barcode` varchar(255) NOT NULL DEFAULT '',
+  `codcliente` varchar(255) NOT NULL,
   `descrizione` varchar(255) NOT NULL DEFAULT '',
   `data_creazione` date NOT NULL DEFAULT current_timestamp(),
   `time_creazione` time NOT NULL DEFAULT current_timestamp(),
@@ -50,7 +30,6 @@ CREATE TABLE `distinte` (
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 
-DROP TABLE IF EXISTS `label_bindings`;
 CREATE TABLE `label_bindings` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `label_id` varchar(255) NOT NULL,
@@ -64,7 +43,6 @@ CREATE TABLE `label_bindings` (
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 
-DROP TABLE IF EXISTS `notifications`;
 CREATE TABLE `notifications` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `code` int(11) NOT NULL DEFAULT 0,
@@ -75,7 +53,6 @@ CREATE TABLE `notifications` (
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 
-DROP TABLE IF EXISTS `queuesystem`;
 CREATE TABLE `queuesystem` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `servicename` varchar(255) NOT NULL,
@@ -85,7 +62,6 @@ CREATE TABLE `queuesystem` (
 ) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4;
 
 
-DROP TABLE IF EXISTS `users`;
 CREATE TABLE `users` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `username` varchar(255) NOT NULL,
@@ -98,4 +74,4 @@ INSERT INTO `users` (`id`, `username`, `saltedpassword`, `roles`) VALUES
 (1,	'admin',	'$2y$10$Vd0Uv.h848Xj8HtuqMBO.OvSLp8ycQpSgveHb.bH4tl72iTCgpvay',	'a:1:{i:0;s:10:\"importdata\";}'),
 (2,	'operatore1',	'$2y$10$Vd0Uv.h848Xj8HtuqMBO.OvSLp8ycQpSgveHb.bH4tl72iTCgpvay',	'a:1:{i:0;s:10:\"importdata\";}');
 
--- 2018-10-03 13:11:20
+-- 2018-10-08 16:03:54

+ 34 - 16
src/Modules/Dimatec/Distinta.php

@@ -26,11 +26,12 @@ class Distinta
   }
 
   /**
-   * Delete from table all commesse present
+   * Delete from table all commesse present and unbind all Prebolle to ESL
    */
   public function TrashCommesse()
   {
-    $this->dbHandle->exec("DELETE FROM `distinte` WHERE deleted=0");
+    $this->dbHandle->exec("DELETE FROM `label_bindings` WHERE barcode IN (SELECT commessa FROM distinte WHERE idUtente={$this->userId} AND deleted=0)");
+    $this->dbHandle->exec("DELETE FROM `distinte` WHERE idUtente={$this->userId} AND deleted=0");
   }
 
   /**
@@ -54,6 +55,20 @@ class Distinta
     return (count($this->dbHandle->exec("SELECT * FROM `distinte` WHERE `commessa` = '{$barcode}' AND `idUtente` = '{$this->userId}' AND `deleted` = '0'")) > 0);
   }
 
+  /**
+   * Ottiene il codice articolo da ogni tipo di campo 'utile'
+   *
+   * @param string $id
+   * @return null|string Codice Articolo
+   */
+  public function GetBarcode(string $id): ?string
+  {
+    $binding = $this->dbHandle->exec("SELECT barcode FROM `distinte` WHERE `barcode` = '{$id}' OR `codcliente` = '{$id}' OR `commessa` = '{$id}'");
+    if (count($binding) > 0)
+      return $binding[0]['barcode'];
+    return null;
+  }
+
   /**
    * Retrieve all commesse associated to a Product
    *
@@ -69,7 +84,7 @@ class Distinta
   {
     global $f3;
 
-    $labels = $this->dbHandle->exec('SELECT label_id FROM label_bindings');
+    $labels = $this->getListeBinded();
     foreach($labels as $label) {
       $msgDisplay = new QueueCommand($label['label_id']);
       $msgDisplay->setDisplay($f3->get("LABELS.TEMPLATES.DEFAULT"), $label['label_id']);
@@ -84,9 +99,24 @@ class Distinta
       $qm->send($msgReset);
       $qm->send($msgDisplay);
     }
-    $this->dbHandle->exec('TRUNCATE TABLE label_bindings');
   }
 
+  /**
+   * Restituisce le commesse ancora da bindare
+   *
+   * @return array|FALSE|int
+   */
+  public function getListeBinded()
+  {
+    return $this->dbHandle->exec("SELECT label_id FROM label_bindings WHERE barcode IN (SELECT commessa FROM `distinte` WHERE deleted=0 AND idutente={$this->userId})");
+  }
+
+
+  /**
+   * Restituisce le commesse ancora da bindare
+   *
+   * @return array|FALSE|int
+   */
   public function getListeToBind()
   {
     return $this->dbHandle->exec("SELECT DISTINCT commessa FROM `distinte` WHERE deleted=0 and idutente={$this->userId} AND commessa NOT IN (SELECT barcode FROM label_bindings) ORDER BY commessa");
@@ -129,18 +159,6 @@ class Distinta
     return 0;
   }
 
-  /**
-   * @param string $labelId
-   * @return null|string
-   */
-  public function GetBarcodeFromLabelId(string $labelId): ?string
-  {
-    $binding = $this->dbHandle->exec("SELECT barcode FROM `label_bindings` WHERE label_id='{$labelId}'");
-    if (count($binding) > 0)
-      return $binding[0]['barcode'];
-    return null;
-  }
-
   /**
    * @param string $barcode
    * @return null|string

+ 8 - 7
src/Modules/Dimatec/MigrationData.php

@@ -243,10 +243,10 @@ EOF;
 
     $status = MigrationData::STATUS_NEW;
     return <<<EOF
-SELECT MXCORD, MXARTI, MXDESC, MXRIFC, SUM(MXQTMI) AS QTY
+SELECT MXCORD, MXARTI, MXDESC, MXRIFC, MXBCOD, SUM(MXQTMI) AS QTY
 FROM SMEDAT_DIM.INTMAV0F
 WHERE $filter AND MXSTAT=$status
-GROUP BY MXARTI, MXCORD, MXDESC, MXRIFC
+GROUP BY MXARTI, MXCORD, MXDESC, MXRIFC, MXBCOD
 ORDER BY MXCORD, MXARTI
 EOF;
   }
@@ -303,7 +303,7 @@ EOF;
 
       // List Head
       $this->soapAddHead($idList, $operationType, "Lista di $operationType da as400 del $dateTime", '');
-      $descArti = trim($row['descrizione']); // trim($row['commessa']) . ' ' . trim(substr($row['codcliente'], 7)) . ' ' . trim($row['descrizione']);
+      $descArti = trim($row['descrizione']); // trim($row['commessa']) . ' ' . trim(substr($row['desccliente'], 7)) . ' ' . trim($row['descrizione']);
 
       // List Article
       $this->soapAddArticle($row['barcode'], $row['qta_prelevare'], $descArti, $row['color']);
@@ -377,8 +377,9 @@ EOF;
         'origine' => $data['MXUBIC'],
         'consegna' => $data['MXIDDM'],
         'commessa' => trim($data['MXCORD']),  // Codice prebolla
-        'codcliente' => trim(substr($data['MXRIFC'], 7)),
+        'desccliente' => trim(substr($data['MXRIFC'], 7)),
         'barcode' => trim($data['MXARTI']),
+        'codcliente' => trim($data['MXBCOD']),
         'descrizione' => trim($data['MXDESC']),
         'qta_prelevare' => $data['QTY'],
         'qta_mancante' => 0,
@@ -426,12 +427,12 @@ EOF;
    */
   public function transferFromMAV_as400(): int
   {
-    $this->dbHandle->query("TRUNCATE TABLE SMEDAT_DIM.INTMUB0F");
-    $mavArticles = $this->dbMAVHandle->query('SELECT item_id AS UXCOAP, max_load_unit AS UXQTMA, position_quantity AS UXQTGC FROM vw_item_positions');
+    $this->dbHandle->query("DELETE FROM SMEDAT_DIM.INTMUB0F");
+    $mavArticles = $this->dbMAVHandle->query('SELECT item_id AS UXCOAP, max_load_unit AS UXQTMA, position_quantity AS UXQTGC, container_id AS UXLOCN FROM vw_item_positions');
     $count = 0;
     foreach($mavArticles as $key => $value) {
       $success = $this->dbHandle->query(
-        "INSERT INTO SMEDAT_DIM.INTMUB0F (UXSTAT, UXCOAP, UXQTGC, UXQTMA) VALUES (10, '${value['UXCOAP']}', ${value['UXQTGC']}, ${value['UXQTMA']})"
+        "INSERT INTO SMEDAT_DIM.INTMUB0F (UXSTAT, UXCOAP, UXQTGC, UXQTMA, UXLOCN) VALUES (10, '${value['UXCOAP']}', ${value['UXQTGC']}, ${value['UXQTMA']}, '${value['UXLOCN']}')"
       );
       if ($success === FALSE) {
         return -1;

+ 14 - 6
src/Modules/Dimatec/Pages.php

@@ -71,6 +71,13 @@ class Pages extends Controller
 
     switch ($args['step']) {
       case 1:
+        if (count($distinta->getListeToBind()) > 0) {
+          $f3->set('INFOTEXT', "ATTENZIONE: ci sono Prebolle non ancora Bindate con le Etichette Elettroniche!");
+          $f3->set('NEXTSTEP', 1);
+          $f3->set('NO_BIND', true);
+          break;
+        }
+
         if (count($stepValues) == 0) {
           $f3->clear('INFOTEXT');
           $f3->clear('SESSION.barcode_mv');
@@ -78,7 +85,8 @@ class Pages extends Controller
           break;
         }
 
-        $commesse = $distinta->getCommesseFromProduct($stepValues['barcode_mv']);
+        $barcode = $distinta->GetBarcode($stepValues['barcode_mv']);
+        $commesse = $distinta->getCommesseFromProduct($barcode);
         if (count($commesse) == 0) {
           $f3->set('INFOTEXT', "Nessuna commessa associata al prodotto selezionato");
           $f3->set('NEXTSTEP', 1);
@@ -88,7 +96,7 @@ class Pages extends Controller
         // Send blink to all labels associated to barcode
         $this->sendLabelMsg($distinta, $commesse);
 
-        $f3->set('SESSION.barcode_mv', $stepValues['barcode_mv']);
+        $f3->set('SESSION.barcode_mv', $barcode);
         $f3->reroute("/pick2light/2");
         return;
         break;
@@ -133,8 +141,8 @@ class Pages extends Controller
         $f3->set('COMMESSE', $commesse);
         break;
       case 3: // empty list
-        $distinteDaCancellare = new Distinta();
-        $distinteDaCancellare->TrashCommesse();
+        $distinta->UnbindAll();
+        $distinta->TrashCommesse();
         $md = new MigrationData();
         $md->DB2Connector();
         $md->RollbackPendingMissionsToNew();
@@ -186,7 +194,7 @@ class Pages extends Controller
       $label->barcode = $bindData['commessa'];
       $label->template_id = $labelTemplateId;
       $label->esl_datafields = json_encode($j_eslData);
-      $label->descrizione = $bindData['codcliente'];
+      $label->descrizione = $bindData['desccliente'];
       $label->save();
 
       $md = new MigrationData();
@@ -196,7 +204,7 @@ class Pages extends Controller
       /*      $this->dbHandle->exec("DELETE FROM label_bindings WHERE label_id='{$bindData['labelid']}'");
             $this->dbHandle->exec(
               "INSERT INTO label_bindings (label_id, barcode, template_id, esl_datafields, descrizione) VALUES " .
-              "('{$bindData['labelid']}', '{$bindData['commessa']}', '{$labelTemplateId}', '{$j_eslData}', '{$bindData['codcliente']}')"
+              "('{$bindData['labelid']}', '{$bindData['commessa']}', '{$labelTemplateId}', '{$j_eslData}', '{$bindData['desccliente']}')"
             );*/
     }
 

+ 0 - 257
src/Modules/KittingDynamic/Distinta.php

@@ -1,257 +0,0 @@
-<?php
-/**
- * @author Open Mind
- * @date 13/04/2018
- * @time 11:43
- */
-
-namespace Modules\KittingDynamic;
-
-use OpenMind\FindBox\FindBoxCoreSystem;
-use OpenMind\FindBox\SmartESL;
-
-class Distinta
-{
-  private $dbHandle;
-  private $userId;
-
-  public function __construct()
-  {
-    global $f3;
-    $this->dbHandle = $f3->get('DB');
-    $this->userId = $f3->get('USER')->id;
-  }
-
-  public function CleanDistintaTable()
-  {
-    $this->dbHandle->exec('DELETE FROM distinta_esplosa WHERE idutente=' . $this->userId);
-  }
-
-  /**
-   * Esplode la disinta in modo che tutti abbiano quantità 1
-   *
-   * @param string $commessa
-   * @throws \Exception
-   */
-  public function CopyDistinta(string $commessa)
-  {
-    $sql = <<<EOF
-SELECT DISTINCT consegna, barcode, articles.descrizione, origine, ubicazione, sequenza, qta_prelevare
-FROM distinte join articles on distinte.barcode = articles.materiale
-WHERE consegna='$commessa'
-ORDER BY sequenza
-EOF;
-    $dataset = $this->dbHandle->exec($sql);
-    $idutente = $this->userId;
-
-    foreach($dataset as $row) {
-      $sqlInsert = "INSERT INTO distinta_esplosa (idutente, commessa, barcode, descrizione, origine, ubicazione, sequenza, qta_prelevare, anomalie)" .
-        "VALUES ({$idutente}, '{$row['consegna']}', '{$row['barcode']}', '{$row['descrizione']}', '{$row['origine']}', '{$row['ubicazione']}', '{$row['sequenza']}', '{$row['qta_prelevare']}', 0)";
-      $err = $this->dbHandle->exec($sqlInsert);
-      if (!$err)
-        throw new \Exception(__FUNCTION__ . ' error insert in table distinta_esplosa');
-    }
-  }
-
-  /**
-   * @param string $maxArticles the LIMIT mysql query parameter
-   * @param bool $blink true if need to blink
-   * @param int $iterations
-   * @throws \Exception
-   */
-  public function SaveProductsToFindBox(string $maxArticles, bool $blink, int $iterations = 20)
-  {
-    $CORE_SETTINGS = \F3::get('CORE.fb');
-    $findBoxCore = new FindBoxCoreSystem(...array_values($CORE_SETTINGS));
-
-    $datiDistinta = $this->getDistinta($maxArticles);
-    foreach($datiDistinta as $row) {
-
-      $labelId = $this->GetLabelIdFromBarcode($row['barcode']);
-      if ($labelId != null) {
-
-        $datiBind = new \DB\SQL\Mapper($this->dbHandle, 'label_bindings');
-        $datiBind->load("label_id='{$labelId}'");
-
-        if (!$datiBind->dry()) {
-          $oldHash = md5(join('', [$datiBind->barcode, $datiBind->descrizione, $datiBind->barcode, $datiBind->qta_prelevare]));
-          $newHash = md5(join('', [$row['barcode'], $row['descrizione'], $row['barcode'], $row['qta_prelevare']]));
-          if ($oldHash <> $newHash) {
-            $dataFields = array(
-              'qr_code' => $row['barcode'],
-              'qta_prelevare' => $row['qta_prelevare']
-            );
-            $findBoxCore->SaveProducts($row['barcode'], $row['descrizione'], $dataFields);
-            $datiBind->copyfrom([
-              'barcode' => $row['barcode'],
-              'descrizione' => $row['descrizione'],
-              'qr_code' => $row['barcode'],
-              'qta_prelevare' => $row['qta_prelevare']
-            ]);
-            $datiBind->update();
-
-          }
-        }
-
-        if ($blink) {
-          $label = new SmartESL($findBoxCore, [$labelId]);
-          $label->BlinkSpecial(2, 1, 1000, $iterations, 0);
-        }
-      }
-    }
-  }
-
-  public function getDistinta(string $maxRows = '3')
-  {
-    return $this->dbHandle->exec("SELECT * FROM distinta_esplosa WHERE idutente={$this->userId} AND qta_prelevare>0 and anomalie=0 ORDER BY sequenza LIMIT {$maxRows}");
-  }
-
-  public function GetLabelIdFromBarcode(string $barcode): ?string
-  {
-    $label = $this->dbHandle->exec("SELECT label_id FROM `label_bindings` WHERE barcode='{$barcode}'");
-    if (count($label) > 0)
-      return $label[0]['label_id'];
-    return null;
-  }
-
-  public function getDistinte()
-  {
-    return $this->dbHandle->exec('SELECT distinct consegna, commessa, ordine_produzione, data_creazione, time_creazione, destinazione_merci FROM `distinte` ORDER BY data_creazione');
-  }
-
-  public function MarkBarcodeAsAnomalia(string $barcode)
-  {
-    $CORE_SETTINGS = \F3::get('CORE.fb');
-    $findBoxCore = new FindBoxCoreSystem(...array_values($CORE_SETTINGS));
-    $lblId = $this->GetLabelIdFromBarcode($barcode);
-    $label = new SmartESL($findBoxCore, [$lblId]);
-    $label->BlinkSpecial(3, 1, 1000, 10);
-
-    $sql = "UPDATE distinta_esplosa d JOIN label_bindings b ON d.barcode = b.barcode SET anomalie=1 WHERE idutente={$this->userId} AND b.barcode='{$barcode}'";
-    return $this->dbHandle->exec($sql);
-  }
-
-  public function RemoveQuantity(string $labelId)
-  {
-    $sql = "UPDATE distinta_esplosa d JOIN label_bindings b ON d.barcode = b.barcode SET d.qta_prelevare=d.qta_prelevare-1 WHERE idutente={$this->userId} AND b.barcode='{$labelId}' AND d.qta_prelevare>0";
-    $ret = $this->dbHandle->exec($sql);
-    return $ret;
-  }
-
-  public function GetArticleCount(string $barcode): int
-  {
-    $sql = "SELECT d.qta_prelevare from distinta_esplosa d JOIN label_bindings b ON d.barcode = b.barcode WHERE idutente={$this->userId} AND b.barcode='{$barcode}'";
-    $record = $this->dbHandle->exec($sql);
-    return $record[0]['qta_prelevare'];
-  }
-
-  public function GetBarcodeFromLabelId(string $labelId): ?string
-  {
-    $binding = $this->dbHandle->exec("SELECT barcode FROM `label_bindings` WHERE label_id='{$labelId}'");
-    if (count($binding) > 0)
-      return $binding[0]['barcode'];
-    return null;
-  }
-
-  /**
-   * Clean label Cart display
-   *
-   * @param string $labelId Label ID
-   * @throws \Exception
-   */
-  public function ResetLabelCarrello(string $labelId)
-  {
-    $CORE_SETTINGS = \F3::get('CORE.fb');
-    $findBoxCore = new FindBoxCoreSystem(...array_values($CORE_SETTINGS));
-
-    $label = new SmartESL($findBoxCore, [$labelId]);
-    $label->BlinkSpecial(0, 1, 1000, 8, 0);
-
-    $dataFields = array(
-      'end_operations' => '',
-      'origine' => '',
-      'commessa' => '',
-      'ordine_produzione' => '',
-      'data_creazione' => '',
-      'time_creazione' => '',
-      'destinazione_merci' => '',
-      'xml' => '',
-      'xslt' => '');
-
-    $findBoxCore->SaveProducts($labelId, '', $dataFields);
-  }
-
-  /**
-   * Salva i dati per l'etichetta del carrello
-   *
-   * @param string $labelId
-   * @param string $barcode
-   * @param string $consegna
-   * @throws \Exception
-   */
-  public function SaveLabelCarrello(string $labelId, string $barcode, string $consegna)
-  {
-    $CORE_SETTINGS = \F3::get('CORE.fb');
-    $findBoxCore = new FindBoxCoreSystem(...array_values($CORE_SETTINGS));
-
-    $sqlCommesse = "SELECT DISTINCT origine, commessa, ordine_produzione, data_creazione, time_creazione, destinazione_merci FROM `distinte` WHERE consegna = '{$consegna}'";
-    $dataFields = $this->dbHandle->exec($sqlCommesse);
-
-    $dataFields = array_shift($dataFields);
-
-    $articles = $this->getArticoliByConsegna($consegna);
-
-    $xmlField = '<?xml version="1.0" encoding="UTF-8"?><distinta>';
-
-    foreach($articles as $i => $articolo) {
-      $xmlField .= "<materiale anomalia=\"{$articolo['anomalie']}\"><barcode>{$articolo['barcode']}</barcode><description>{$articolo['descrizione']}</description><qta_nominale>{$articolo['qta_nominale']}</qta_nominale><qta_prelevare>{$articolo['qta_prelevare']}</qta_prelevare></materiale>";
-    }
-
-    $xmlField .= '</distinta>';
-
-    $dataFields['xml'] = $xmlField;
-    $dataFields['xslt'] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\"><xsl:template match=\"/\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"640\" height=\"384\" viewBox=\"0 0 640 384\"><line x1=\"0\" y1=\"18\" x2=\"640\" y2=\"18\" style=\"stroke: black; stroke-width: 2px\"/><xsl:for-each select=\"distinta/materiale\"><xsl:if test=\"@anomalia='1'\"><xsl:variable name=\"posDeltaY\" select=\"(position()*15)+4\" /><rect width=\"640\" height=\"15px\" y=\"{\$posDeltaY}px\" style=\"fill:rgb(0,0,0)\" /></xsl:if></xsl:for-each><text style=\"font-family: Tahoma; font-size: 8pt; font-weight: bold\"><tspan fill=\"black\" dy=\"15px\" x=\"0\">MATERIALE</tspan><tspan fill=\"black\" x=\"90\">DESCRIZIONE</tspan><tspan fill=\"black\" x=\"300\">PR</tspan><tspan fill=\"black\" x=\"340\">MANC</tspan><xsl:for-each select=\"distinta/materiale\"><xsl:variable name=\"textcolor\"><xsl:choose><xsl:when test=\"@anomalia='1'\"><xsl:value-of select=\"'white'\" /></xsl:when><xsl:otherwise><xsl:value-of select=\"'black'\" /></xsl:otherwise></xsl:choose></xsl:variable><tspan fill=\"{\$textcolor}\" dy=\"15px\" x=\"0\"><xsl:value-of select=\"barcode\" /></tspan><tspan fill=\"{\$textcolor}\" x=\"90\"><xsl:value-of select=\"substring(description, 1, 28)\" /></tspan><tspan fill=\"{\$textcolor}\" x=\"300\"><xsl:value-of select=\"qta_nominale\" /></tspan><tspan fill=\"{\$textcolor}\" x=\"340\"><xsl:if test=\"qta_prelevare&gt;0\"><xsl:value-of select=\"qta_prelevare\" /></xsl:if></tspan></xsl:for-each></text></svg></xsl:template></xsl:stylesheet>";
-
-    $dataFields['end_operations'] = $consegna;
-
-    $label = new SmartESL($findBoxCore, [$labelId]);
-    $findBoxCore->SaveProducts($barcode, $consegna, $dataFields);
-    $label->BlinkSpecial(0, 1, 1000, 8, 0);
-  }
-
-  private function getArticoliByConsegna(string $consegna): array
-  {
-    $sqlCommesse = "SELECT DISTINCT de.barcode, de.descrizione, d.qta_prelevare as qta_nominale, de.qta_prelevare, de.anomalie FROM `distinta_esplosa` AS de JOIN `distinte` AS d ON de.commessa=d.consegna WHERE idutente={$this->userId} AND de.commessa = '{$consegna}' AND de.barcode=d.barcode";
-    return $this->dbHandle->exec($sqlCommesse);
-  }
-
-  /**
-   * Esegue il reset delle etichette associate alla distinta
-   * @param string $commessa
-   * @param string $label7Id
-   * @throws \Exception
-   */
-  public function ResetDistintaLabels(string $commessa, string $label7Id)
-  {
-    $sql = "SELECT label_id, anomalie, b.barcode, d.descrizione FROM distinta_esplosa d JOIN label_bindings b ON d.barcode=b.barcode WHERE idutente={$this->userId} AND commessa='{$commessa}'";
-    $dataset = $this->dbHandle->exec($sql);
-
-    $CORE_SETTINGS = \F3::get('CORE.fb');
-    $findBoxCore = new FindBoxCoreSystem(...array_values($CORE_SETTINGS));
-
-    foreach($dataset as $row) {
-      $dataFields = array(
-        'qr_code' => $row['barcode'],
-        'qta_prelevare' => ''
-      );
-
-      $findBoxCore->SaveProducts($row['barcode'], $row['descrizione'], $dataFields);
-    }
-  }
-
-  public function getAnomalieFromConsegne(string $consegna): array
-  {
-    return $this->dbHandle->exec("SELECT `barcode`, `descrizione`, `qta_prelevare`, `anomalie` FROM distinta_esplosa WHERE commessa='{$consegna}' AND idutente={$this->userId} AND anomalie>0 ORDER BY sequenza");
-  }
-
-}

+ 0 - 18
src/Modules/KittingDynamic/LabelingSystem.php

@@ -1,18 +0,0 @@
-<?php
-/**
- * @author Open Mind
- * @date 18/06/2018
- * @time 09:13
- */
-
-namespace Modules\KittingDynamic;
-
-use OpenMind\FindBox\FindBoxCoreSystem as FBCS;
-
-class LabelingSystem extends FBCS
-{
-  public function __construct(string $host, int $port, string $APIKey, string $Password)
-  {
-    parent::__construct(...array_values(\F3::get('CORE.fb')));
-  }
-}

+ 0 - 219
src/Modules/KittingDynamic/Pages.php

@@ -1,219 +0,0 @@
-<?php
-/**
- * @author Open Mind
- * @date 10/04/2018
- * @time 09:43
- */
-
-namespace Modules\KittingDynamic;
-
-use OpenMind\FindBox\FindBoxCoreSystem;
-use OpenMind\FindBox\SmartESL;
-
-class Pages extends \OpenMind\Web\Controller
-{
-  private $CORE_SETTINGS;
-  private $findBoxCore;
-
-  public function __construct($f3)
-  {
-    parent::__construct($f3);
-    $this->CORE_SETTINGS = $f3->get('CORE.fb');
-    $this->findBoxCore = new FindBoxCoreSystem(...array_values($this->CORE_SETTINGS));
-  }
-
-  public function Pick2Light(object $f3, array $args)
-  {
-    $stepValues = [];
-    if ($args['step'] == 1) {
-      $f3->clear('COOKIE.p2l');
-      $f3->clear('COOKIE.consegna');
-      $f3->clear('COOKIE.labelid');
-    } else {
-      $stepValues = array_map('strtoupper', $this->getSanitizedPostRequest());
-      if (count($stepValues) == 0)
-        $stepValues = json_decode($f3->get('COOKIE.p2l'), true);
-    }
-
-    switch ($args['step']) {
-      case 3:
-        $distinta = new Distinta();
-        $distinta->CleanDistintaTable();
-        $distinta->CopyDistinta($stepValues['consegna']);
-
-        $label = new SmartESL($this->findBoxCore, [$stepValues['labelid']]);
-        $label->BlinkSpecial(0, 1, 1000, 8, 0);
-
-        $distinta->SaveProductsToFindBox('3', true, 50); // prende soltanto i primi 3 dalla tabella copia delle distinte
-
-        $f3->set('COOKIE.p2l', json_encode($stepValues));
-        $f3->set('COOKIE.consegna', $stepValues['consegna']);
-        $f3->set('COOKIE.labelid', $stepValues['labelid']);
-        $f3->reroute("/pick2light/4");
-        return;
-        break;
-      case 4:
-        $distinta = new Distinta();
-        $distinta->SaveProductsToFindBox('3, 2000', false); // LIMIT 3,1000 perchè i primi 3 sono stati fatti nel case 3
-        break;
-      case 5:
-        $datiCommessa['consegna'] = $f3->get('COOKIE.consegna');
-        $datiCommessa['labelid'] = $f3->get('COOKIE.labelid');
-        $distinta = new Distinta();
-        $pickedBarcode = $f3->get('POST.pickedlabelid');
-        // Decrease quantity and blink label
-        if ($pickedBarcode != null) {
-          // ANOMALIA
-          if ($pickedBarcode == $f3->get('BARCODE_COMMANDS.ANOMALIACODE')) {
-            // <Se è stato ancora passato un codice anomalia, cancella l'operazione di anomalia in corso
-            if (isset($stepValues['anomalia']))
-              unset($stepValues['anomalia']);
-            else
-              $f3->set('ANOMALIA', 'In attesa del codice anomalia');
-            //>
-          } else if ($stepValues['anomalia']) {
-            if ($distinta->MarkBarcodeAsAnomalia($pickedBarcode))
-              unset($stepValues['anomalia']);
-            else
-              $f3->set('ANOMALIA', 'Codice non trovato!');
-          } else { // E' stato passato un codice
-            $codeFromLabelId = $distinta->GetBarcodeFromLabelId($pickedBarcode);
-            $pickedBarcode = $codeFromLabelId ?? $pickedBarcode;
-            if ($distinta->RemoveQuantity($pickedBarcode)) {
-              // SPEGNE LED ETICHETTA DOPO PICKING
-              $label = new SmartESL($this->findBoxCore, [$distinta->GetLabelIdFromBarcode($pickedBarcode)]);
-              $label->BlinkOff();
-            } else {
-              $f3->set('INFOTEXT', 'Barcode non riconosciuto o non associato ad alcuna etichetta elettronica');
-              file_put_contents('not_found.log', $pickedBarcode . "\r\n", FILE_APPEND);
-            }
-          }
-        }
-
-        $rowsDistinta = $distinta->getDistinta();
-        $f3->set('PRODUCTS', $rowsDistinta);
-        // End Picking List
-        if (count($rowsDistinta) == 0) {
-          //$distinta->ResetDistintaLabels($datiCommessa['consegna'], $datiCommessa['labelid']);
-          $anomalie = $distinta->getAnomalieFromConsegne($datiCommessa['consegna']);
-          $f3->set('LISTANOMALIE', $anomalie);
-
-          //$label = new SmartESL($this->findBoxCore, [$datiCommessa['labelid']]);
-          $distinta->SaveLabelCarrello($datiCommessa['labelid'], $datiCommessa['labelid'], $datiCommessa['consegna']);
-
-          // Se non ci sono anomalie torna alla homepage
-          if (count($anomalie) == 0) {
-            $f3->reroute('/');
-            return;
-          }
-        } else {
-          // Seleziona le prossime tre etichette
-          foreach ($rowsDistinta as $rowDist) {
-            $labelId = $distinta->GetLabelIdFromBarcode($rowDist['barcode']);
-            if ($labelId != null) {
-              $label = new SmartESL($this->findBoxCore, [$labelId]);
-              // Se è lo stesso barcode di quello appena pickato dall'operatore, non lo blinka di nuovo
-              if ($distinta->GetArticleCount($rowDist['barcode']) > 0) {
-                $label->BlinkSpecial(2, 1, 1000, 20);
-              }
-            }
-          }
-        }
-        break;
-    }
-
-    $f3->set('COOKIE.p2l', json_encode($stepValues));
-
-    $f3->set('DISTINTE', $f3->Get('DB')->exec('SELECT DISTINCT consegna, DATE_FORMAT(data_creazione,"%d/%m/%Y") as data_creazione, time_creazione, destinazione_merci FROM `distinte` d JOIN articles a ON a.materiale=d.barcode ORDER BY data_creazione, time_creazione, destinazione_merci'));
-    $f3->set('STEP', $args['step']);
-    $f3->set('PAGEVALUES', $stepValues);
-
-    $f3->set('CONTENT', 'pick2light.tpl');
-    echo \Template::instance()->render('masterpage.tpl');
-  }
-
-  public function Bind($f3, array $args)
-  {
-    $stepValues = [];
-    if ($args['step'] == 1)
-      $f3->clear('COOKIE.bind');
-    else {
-      $stepValues = array_map('strtoupper', $this->getSanitizedPostRequest());
-      if (count($stepValues) == 0)
-        $stepValues = json_decode($f3->get('COOKIE.p2l'), true);
-    }
-
-    $f3->set('COOKIE.bind', json_encode($stepValues));
-
-    if ($args['step'] == 3) {
-      $this->findBoxCore->Bind($stepValues['labelid'], $stepValues['barcode']);
-      $label = new SmartESL($this->findBoxCore, [$stepValues['labelid']]);
-
-      if ($stepValues['labelid'] == $stepValues['barcode'])
-        $devType = 79;
-      else
-        $devType = 31;
-      $labelTemplateId = \F3::get("LABELS.TEMPLATES.DT{$devType}");
-
-      $label->Display($labelTemplateId[0], $stepValues['barcode']);
-
-
-      // Reset label carrello if barcode = label id
-      if ($stepValues['labelid'] == $stepValues['barcode']) {
-        $d = new Distinta();
-        $d->ResetLabelCarrello($stepValues['labelid']);
-      } else {
-        $articles = new \DB\SQL\Mapper($this->dbHandle, 'articles');
-        $articles->load("materiale='{$stepValues['barcode']}'");
-
-        if (!$articles->dry()) {
-          $dataFields = array(
-            'tipo_magazzino' => $articles['tipo_magazzino'],
-            'ubicazione' => $articles['ubicazione'],
-            'incc_intr' => $articles['incc_intr']
-          );
-          $dataFields = array_merge($dataFields, array(
-            'quantita_contenitore' => $articles['qta_contenitore'],
-            'quantita_magazzino' => $articles['qta_riordino']
-          ));
-          $this->findBoxCore->SaveProducts($stepValues['barcode'], $articles['descrizione'], $dataFields);
-          if ($devType == 31 && ($articles['qta_contenitore'] == 'NO' || $articles['qta_riordino'] == 'NO'))
-            $pickTemplateId = $labelTemplateId[1];
-          else
-            $pickTemplateId = $labelTemplateId[2];
-
-          $eslData = json_encode($dataFields);
-          $this->dbHandle->exec("DELETE FROM label_bindings WHERE label_id='{$stepValues['labelid']}'");
-          $this->dbHandle->exec("INSERT INTO label_bindings (label_id, barcode, template_id, esl_datafields, descrizione) VALUES ('{$stepValues['labelid']}', '{$stepValues['barcode']}', '{$pickTemplateId}', '{$eslData}', '{$articles['descrizione']}')");
-        }
-      }
-    }
-
-    $f3->set('STEP', $args['step']);
-    $f3->set('CONTENT', 'bind.tpl');
-    $f3->set('AUTOFOCUS' . $args['step'], 'autofocus');
-    echo \Template::instance()->render('masterpage.tpl');
-  }
-
-  public function UnBind($f3, array $args)
-  {
-    $stepValues = array_map('strtoupper', $this->getSanitizedPostRequest());
-    if ($args['step'] == 2) {
-      $success = $this->findBoxCore->UnBind($stepValues['labelid']);
-      if ($success['err'] <> 0) {
-        $f3->set('INFOTEXT', $success['value']);
-      }
-    }
-    $f3->set('STEP', $args['step']);
-    $f3->set('CONTENT', 'unbind.tpl');
-    echo \Template::instance()->render('masterpage.tpl');
-  }
-
-  public function ElencoDistinta($f3)
-  {
-    $distinta = new Distinta();
-    $f3->set('PRODUCTS', $distinta->getDistinte());
-    $f3->set('CONTENT', 'distinta.tpl');
-    echo \Template::instance()->render('masterpage.tpl');
-  }
-}

+ 0 - 43
src/Modules/Lamborghini/Lamborghini.php

@@ -1,43 +0,0 @@
-<?php
-/**
- * @author Open Mind
- * @date 17/07/2018
- * @time 16:46
- */
-
-namespace Modules\Lamborghini;
-
-use OpenMind\System\OMUtils;
-use OpenMind\System\PluginStrategy;
-
-class Lamborghini extends PluginStrategy
-{
-  public function __construct()
-  {
-    if (\F3::get('CUSTOMERNAME') != 'lamborghini')
-      return;
-
-    // Definisco il namespace del gestore delle pagine
-    define('KITTING_SYSTEM', 'Modules\KittingDynamic');
-
-    \F3::config('cfg/labels.ini', true);
-
-    $this->AddRoute('GET|POST /pick2light/@step', KITTING_SYSTEM . '\Pages->Pick2Light');
-    $this->AddRoute("GET|POST /bind/@step", KITTING_SYSTEM . '\Pages->Bind');
-    $this->AddRoute("GET|POST /unbind/@step", KITTING_SYSTEM . '\Pages->UnBind');
-    $this->AddRoute('GET /elencodistinta', KITTING_SYSTEM . '\Pages->ElencoDistinta');
-
-    $this->AddMenuItem('bind', ['url' => 'bind/1', 'image' => 'ui/images/lamborghini/bind.png']);
-    $this->AddMenuItem('unbind', ['url' => 'unbind/1', 'image' => 'ui/images/lamborghini/unbind.png']);
-    $this->AddMenuItem('pick2light', ['url' => 'pick2light/1', 'image' => 'ui/images/lamborghini/pick2light.png']);
-    $this->AddMenuItem('elencodistinta', ['url' => 'elencodistinta', 'image' => 'ui/images/lamborghini/elenco_distinta.png']);
-
-    // Override default logo
-    $iconPath = OMUtils::getInstance()->getStringFromTemplate('{{@BASEURL}}/ui/images/lamborghini/logout.png');
-
-    \F3::set('ICON_LOGOUT', $iconPath);
-  }
-}
-
-/** @var \Modules\Lamborghini\Lamborghini $Lamborghini */
-Global $Lamborghini;

+ 6 - 3
src/OpenMind/FindBox/FindBoxService.php

@@ -8,10 +8,12 @@
 
 namespace OpenMind\FindBox;
 
+use DB\SQL;
 use OpenMind\System\QueueSystem;
 
 class FindBoxService
 {
+  /** @var SQL $dbHandle */
   private $dbHandle;
   private $findBoxCore;
   private $labelToBlink;
@@ -37,8 +39,9 @@ class FindBoxService
       $qs->command = time();
       $qs->servicename = 'FindBoxService_isAlive';
       $qs->save();
-    } else
+    } else {
       $qs->command = time();
+    }
     $qs->update();
   }
 
@@ -64,7 +67,7 @@ class FindBoxService
           unset($this->labelToBlink[$qCommand->id]);
           break;
         case Q_DISPLAY:
-          echo $this->getStrTime() ."Change display for label {$qCommand->id} requested\n";
+          echo $this->getStrTime() . "Change display for label {$qCommand->id} requested\n";
           $esl = new SmartESL($this->findBoxCore, [$qCommand->id]);
           $esl->Display($qCommand->params['templateId'], $qCommand->params['barcode']);
           unset($this->labelToBlink[$qCommand->id]);
@@ -148,4 +151,4 @@ class FindBoxService
     return;
   }
 
-}
+}

+ 1 - 1
src/OpenMind/System/Notifications.php

@@ -48,7 +48,7 @@ class Notifications extends Mapper
 
   public function notify(int $code, string $caption, $link = '#')
   {
-    if (true/*$this->check($code)*/) {
+    if ($this->check($code)) {
       $this->reset();
       $this->code = $code;
       $this->caption = $caption;

+ 32 - 22
ui/bind.tpl

@@ -1,27 +1,37 @@
 <div class="row h-100 justify-content-center w-100">
 	<div class="col-xs-12 col-md-9 col-lg-5 align-self-center">
-		<div class="rounded table-responsive mt-3 mb-2" style="background-color: #a0b1cc">
-			{*Tabella elenco prebolle*}
-			<table class="table rounded table-striped table-secondary mb-0" style="font-size: 11pt">
-				<thead style="background-color: #a0b1cc">
-				<tr style="font-size: 12pt">
-					<th class="text-center text-uppercase text-white" scope="col">Binding Elenco Ordini</th>
-				</tr>
-				</thead>
-				<tbody>
-				<repeat group="{{ @LISTE }}" key="{{@key}}" value="{{ @LISTA }}">
-					<tr>
-						<td {{(@key==0)? 'class="blink bg-success text-black font-weight-bold"': ''}}>{{@LISTA.commessa}}</td>
-					</tr>
-				</repeat>
-				</tbody>
-			</table>
+		<check if="{{ count(@LISTE)>0 }}">
+			<false>
+				<div class="alert alert-danger" role="alert">
+					Non ci sono prebolle da abbinare a nessuna Etichetta Elettronica
+				</div>
+			</false>
+			<true>
+				<div class="rounded table-responsive mt-3 mb-2" style="background-color: #a0b1cc">
+					{*Tabella elenco prebolle*}
+					<table class="table rounded table-striped table-secondary mb-0" style="font-size: 11pt">
+						<thead style="background-color: #a0b1cc">
+						<tr style="font-size: 12pt">
+							<th class="text-center text-uppercase text-white" scope="col">Binding Elenco Ordini</th>
+						</tr>
+						</thead>
+						<tbody>
+						<repeat group="{{ @LISTE }}" key="{{@key}}" value="{{ @LISTA }}">
+							<tr>
+								<td {{(@key==0)? 'class="blink bg-success text-black font-weight-bold"': ''}}>{{@LISTA.commessa}}</td>
+							</tr>
+						</repeat>
+						</tbody>
+					</table>
+
+				</div>
+				<form class="form" method="post" action="{{@BASEURL}}/bind">
+					<input type="hidden" value="{{@ORDINE}}" hidden name="commessa"/>
+					<input type="submit" hidden id="submitform"/>
+					<input type="text" name="labelid" class="form-control form-control" placeholder="Etichetta Cesta" required autofocus autocomplete="false" value=""/>
+				</form>
+			</true>
+		</check>
 
-		</div>
-		<form class="form" method="post" action="{{@BASEURL}}/bind">
-			<input type="hidden" value="{{@ORDINE}}" hidden name="commessa"/>
-			<input type="submit" hidden id="submitform"/>
-			<input type="text" name="labelid" class="form-control form-control" placeholder="Etichetta Cesta" required autofocus autocomplete="false" value=""/>
-		</form>
 	</div>
 </div>

+ 45 - 37
ui/pick2light.tpl

@@ -1,46 +1,52 @@
 <div class="row h-100 justify-content-center w-100">
 	<div class="col-md-4 align-self-center">
-		<form class="form" method="post" action="{{@BASEURL}}/pick2light/{{@NEXTSTEP}}">
-			<check if="{{ isset(@INFOTEXT) }}">
-				<div class="alert alert-danger" role="alert">
-					{{@INFOTEXT}}
-				</div>
-			</check>
-			<div class="alert alert-info" role="alert">
-				Inizio ventilazione
+
+		<check if="{{ isset(@INFOTEXT) }}">
+			<div class="alert alert-danger" role="alert">
+				{{@INFOTEXT}}
 			</div>
-			<input type="submit" hidden id="submitform"/>
+		</check>
 
-			{*Elenco commesse/ceste*}
-			<check if="{{@PARAMS['step'] == 2 }}">
+		<check if="{{ !@NO_BIND }}">
 
-				<table class="table table-sm table-striped table-light">
-					<thead class="bg-secondary">
-					<tr>
-						<th colspan="2" class="text-center text-uppercase text-white" scope="col">In attesa del completamento delle seguenti ceste</th>
-					</tr>
-					</thead>
-					<tbody>
-					<repeat group="{{ @COMMESSE }}" key="{{@key}}" value="{{ @COMMESSA }}">
+			<form class="form" method="post" action="{{@BASEURL}}/pick2light/{{@NEXTSTEP}}">
+				<div class="alert alert-info" role="alert">
+					Inizio ventilazione
+				</div>
+				<input type="submit" hidden id="submitform"/>
+
+				{*Elenco commesse/ceste*}
+				<check if="{{@PARAMS['step'] == 2 }}">
+
+					<table class="table table-sm table-striped table-light">
+						<thead class="bg-secondary">
 						<tr>
-							<td>{{@COMMESSA.commessa}}</td>
-							<td align="right">Q.ta <b>{{@COMMESSA.qta_prelevare}}</b></td>
+							<th colspan="2" class="text-center text-uppercase text-white" scope="col">In attesa del completamento delle seguenti ceste</th>
 						</tr>
-					</repeat>
-					</tbody>
-				</table>
+						</thead>
+						<tbody>
+						<repeat group="{{ @COMMESSE }}" key="{{@key}}" value="{{ @COMMESSA }}">
+							<tr>
+								<td>{{@COMMESSA.commessa}}</td>
+								<td align="right">Q.ta <b>{{@COMMESSA.qta_prelevare}}</b></td>
+							</tr>
+						</repeat>
+						</tbody>
+					</table>
+
+				</check>
 
-			</check>
+				{*Barcode prodotto*}
+				<input type="text" name="barcode_mv" {{@PARAMS['step']==2 ? 'disabled' : ''}} {{@PARAMS['step']==1 ? 'autofocus' : ''}} value="{{@SESSION.barcode_mv}}" class="form-control form-control-lg mb-3" placeholder="Cod.Art.MAV" required autocomplete="false"/>
 
-			{*Barcode prodotto*}
-			<input type="text" name="barcode_mv" {{@PARAMS['step']==2 ? 'disabled' : ''}} {{@PARAMS['step']==1 ? 'autofocus' : ''}} value="{{@SESSION.barcode_mv}}" class="form-control form-control-lg mb-3" placeholder="Cod.Art.MAV" required autocomplete="false"/>
+				{*Codice cesta per la quale mi aspetto che avvenga la ventilazione*}
+				<check if="{{ @PARAMS['step'] == 2 }}">
+					<input type="text" name="commessa" {{@PARAMS['step']==2 ? 'autofocus' : ''}} value="" class="form-control form-control-lg mb-3" placeholder="Codice Cesta" required autocomplete="false"/>
+				</check>
 
-			{*Codice cesta per la quale mi aspetto che avvenga la ventilazione*}
-			<check if="{{ @PARAMS['step'] == 2 }}">
-				<input type="text" name="commessa" {{@PARAMS['step']==2 ? 'autofocus' : ''}} value="" class="form-control form-control-lg mb-3" placeholder="Codice Cesta" required autocomplete="false"/>
-			</check>
+			</form>
 
-		</form>
+		</check>
 	</div>
 	<div class="col-md-8" style="overflow-y: auto">
 		<div class="rounded table-responsive mt-3" style="background-color: #a0b1cc">
@@ -48,7 +54,7 @@
 				<thead style="background-color: #a0b1cc">
 				<tr style="font-size: 12pt">
 					<th class="text-center text-uppercase" colspan="6" scope="col">Articoli da ventilare
-						<a class="requestconfirm" data-confirmtext="Sicuro di voler cancellare la lista?" href="{{@BASEURL}}/pick2light/3"><img class="float-right" src="{{@BASEURL}}/ui/images/delete.png"/></a>
+						<a class="requestconfirm" data-confirmtext="Resettare la lista? Sarà comunque possibile reimportarla nuovamente dal menu principale." href="{{@BASEURL}}/pick2light/3"><img class="float-right" src="{{@BASEURL}}/ui/images/delete.png"/></a>
 					</th>
 				</tr>
 				<tr style="font-size: 12pt">
@@ -59,10 +65,12 @@
 				</thead>
 				<tbody>
 				<repeat group="{{ @PRODUCTS }}" value="{{ @PRODUCT }}">
-					<tr <check if="{{trim(@SESSION.barcode_mv)==trim(@PRODUCT.barcode)}}">class="blink bg-primary"</check>>
-						<th scope="row">{{@PRODUCT.uds}}</th>
-						<td>{{@PRODUCT.barcode}}</td>
-						<td>{{@PRODUCT.qta}}</td>
+					<tr
+					<check if="{{trim(@SESSION.barcode_mv)==trim(@PRODUCT.barcode)}}">class="blink bg-primary"</check>
+					>
+					<th scope="row">{{@PRODUCT.uds}}</th>
+					<td>{{@PRODUCT.barcode}}</td>
+					<td>{{@PRODUCT.qta}}</td>
 					</tr>
 				</repeat>
 				</tbody>