|
@@ -0,0 +1,235 @@
|
|
|
|
|
+<?php
|
|
|
|
|
+/**
|
|
|
|
|
+ * @author Open Mind
|
|
|
|
|
+ * @date 10/04/2018
|
|
|
|
|
+ * @time 09:43
|
|
|
|
|
+ */
|
|
|
|
|
+
|
|
|
|
|
+namespace Customers\Lamborghini;
|
|
|
|
|
+
|
|
|
|
|
+use OpenMind\Labeling\FindBoxCoreSystem;
|
|
|
|
|
+
|
|
|
|
|
+class Pages extends \OpenMind\Web\BaseController
|
|
|
|
|
+{
|
|
|
|
|
+ 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 Login($f3)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (!is_null($this->userId)) {
|
|
|
|
|
+ $f3->reroute('/homemenu');
|
|
|
|
|
+ return;
|
|
|
|
|
+ } else
|
|
|
|
|
+ $f3->set('CONTENT', 'login.tpl');
|
|
|
|
|
+
|
|
|
|
|
+ echo \Template::instance()->render('masterpage.tpl');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public function HomeMenu($f3)
|
|
|
|
|
+ {
|
|
|
|
|
+ $f3->set('CONTENT', 'homemenu.tpl');
|
|
|
|
|
+ echo \Template::instance()->render('masterpage.tpl');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ 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($f3);
|
|
|
|
|
+ $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($f3);
|
|
|
|
|
+ $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($f3);
|
|
|
|
|
+ $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($f3);
|
|
|
|
|
+ $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);
|
|
|
|
|
+ $f3->set('PRODUCTS', $distinta->getDistinte());
|
|
|
|
|
+ $f3->set('CONTENT', 'distinta.tpl');
|
|
|
|
|
+ echo \Template::instance()->render('masterpage.tpl');
|
|
|
|
|
+ }
|
|
|
|
|
+}
|