using MagData; using SteamWare; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace MP_MAG.WebUserControls { public partial class cmp_PLScanner : BaseUserControl { #region Protected Properties /// /// Comando ULTIMO barcode letto /// protected string lastCmd { get { return hfLastBCode.Value; } set { hfLastBCode.Value = value; lastValidCmd = value; } } /// /// UDC selezionato /// protected string LastUDC { get { return hfLastUDC.Value; } set { hfLastUDC.Value = value; } } /// /// ULTIMO Comando barcode VALIDO (!="") letto /// protected string lastValidCmd { get { return hfLastValidBCode.Value; } set { // solo se è non nullo/vuoto if (!string.IsNullOrEmpty(value)) { hfLastValidBCode.Value = value; } } } /// /// ID dell'ordine selezionato (per UDC) /// protected int SelOrdID { get { return cmp_SelUdc.SelOrdID; } } /// /// ID della packing list selezionata /// protected int SelPackList { get { return cmp_SelPackList.PackListID; } set { cmp_SelPackList.PackListID = value; cmp_SelUdc.PackListID = value; } } /// /// Pedana selezionata /// protected string SelPedana { get { return cmp_SelPedana.Pedana; } set { cmp_SelPedana.Pedana = value; } } /// /// UDC selezionato /// protected string SelUDC { get { return cmp_SelUdc.UDC; } set { cmp_SelUdc.UDC = value; cmp_SelUdc.cssCol = string.IsNullOrEmpty(value) ? "info" : "dark"; } } /// /// UDC appena processato (in redis x 1 sec) /// protected string ProcUDC { get { return memLayer.ML.getRSV("LastProcUdc"); } set { memLayer.ML.setRSV("LastProcUdc", value, 1); } } #endregion Protected Properties #region Private Methods private void Cmp_barcode_eh_doRefresh(object sender, EventArgs e) { bool doRaiseEv = false; // processo evento.. lastCmd = cmp_barcode.inputAcquired.ToUpper(); doRaiseEv = processLastCmd(doRaiseEv); // reset comando cmp_barcode.inputAcquired = ""; // aggiorno... doUpdate(); } private void Cmp_barcode_eh_doReset(object sender, EventArgs e) { } private void doUpdate() { } private bool processLastCmd(bool doRaiseEv) { if (string.IsNullOrEmpty(lastCmd)) doRaiseEv = true; // processiamo barcode letto decodedData decoData = MagDataLayer.man.decodeBcode(lastValidCmd); switch (decoData.codeType) { case codeType.Command: case codeType.PackList: case codeType.Pedana: case codeType.Udc: cmp_barcode.showOutput("badge badge-success", $"{decoData.description}"); processSuggestion(decoData.codeType, decoData.rawData, decoData.code, decoData.codeInt); doRaiseEv = true; break; default: cmp_barcode.showOutput("badge badge-danger", $"Codice sconosciuto: {decoData.rawData} --> ignoro"); resetSelection(false); doRaiseEv = true; break; } return doRaiseEv; } /// /// Processo il codice letto /// /// /// /// /// private void processSuggestion(codeType tipoCod, string rawData, string code, int codeInt) { bool allOk = false; // processo suggerimenti switch (tipoCod) { case codeType.Command: // verifico tipo comando switch (rawData) { case "CMDRESET": SelPackList = 0; SelPedana = "ND"; SelUDC = "NA"; resetSelection(true); break; default: break; } break; case codeType.PackList: // verifica packlist... allOk = false; // step 1 : esiste var tabPList = MagDataLayer.man.taPList.getByKey(codeInt); if (tabPList.Rows.Count > 0) { // step 2: stato (1 richiesta, 2 iniziata, 3 completata) var rowPList = tabPList[0]; switch (rowPList.PackStatus) { case 0: cmp_barcode.showOutput("badge badge-danger", "Errore: PackList in bozza"); break; case 1: case 2: allOk = true; break; case 3: cmp_barcode.showOutput("badge badge-warning", "Errore: PackList completata"); break; case 4: cmp_barcode.showOutput("badge badge-danger", "Errore: PackList già trasferita"); break; default: cmp_barcode.showOutput("badge badge-danger", "Errore: PackList in stato UNK"); break; } } if (allOk) { // seleziono PackList SelPackList = codeInt; // resetto PEDANA ed UDC SelPedana = ""; SelUDC = ""; } break; case codeType.Pedana: // verifico di avere pack list allOk = false; if (SelPackList == 0) { cmp_barcode.showOutput("badge badge-danger", "Errore: manca PackList!"); } else { // verifico esista var tabAL = MagDataLayer.man.taEAL.getByKey(rawData); if (tabAL.Rows.Count == 0) { cmp_barcode.showOutput("badge badge-warning", $"Errore: Pedana non trovata: {rawData}"); } else { // ...e NON sia associata ad altre PList if (tabAL[0].PackListID == 0) { // se non associata associo... MagDataLayer.man.taEAL.updatePList(rawData, SelPackList); allOk = true; } else if (tabAL[0].PackListID != SelPackList) { cmp_barcode.showOutput("badge badge-danger", $"Errore: AL {rawData} già associata a PackList {tabAL[0].PackListID}"); } else if (tabAL[0].Status > 0) { cmp_barcode.showOutput("badge badge-danger", $"Errore: AL {rawData} non modificabile"); } else { // tutto ok allOk = true; } } //...e seleziono pedana if (allOk) { SelPedana = rawData; // resetto UDC SelUDC = ""; } } break; case codeType.Udc: // verifico di avere pack list allOk = false; if (SelPackList == 0) { cmp_barcode.showOutput("badge badge-danger", "Errore: manca PackList!"); } else { // verifico di avere Pedana if (string.IsNullOrEmpty(SelPedana)) { cmp_barcode.showOutput("badge badge-danger", "Errore: manca Pedana!"); } else { // verifico esista var tabUDC = MagDataLayer.man.taEUdc.getByKey(code); if (tabUDC.Rows.Count == 0) { cmp_barcode.showOutput("badge badge-warning", $"Errore: UDC non trovato: {code}"); } else { // ...e NON sia stato TRASFERITO if (tabUDC[0].IdxPosizione > 0) { cmp_barcode.showOutput("badge badge-warning", $"Errore: UDC già trasferito: {code}"); } else { // cerco AL se sia quello selezionato... var tabAL = MagDataLayer.man.taEAL.getByUdc(code); // se non trovo --> associo if (tabAL.Rows.Count == 0) { // tutto ok allOk = true; } // se uguale OK else if (tabAL[0].AL == SelPedana) { // 2022.03.31 se siamo in seconda lettura IMMEDIATA tutto ok if (ProcUDC == code) { allOk = true; } // 2022.03.25 modifica: se è già associato --> giallo! else { cmp_barcode.showOutput("badge badge-warning", $"Attenzione: UDC già caricato su Pedana/AL ({tabAL[0].AL})"); } } else { // se siamo in seconda lettura --> OK x spostamento if (LastUDC == code) { allOk = true; LastUDC = ""; } else { // verifico pedana (vecchia/attuale) libera... if (tabAL[0].Status > 0) { cmp_barcode.showOutput("badge badge-danger", $"Attenzione: AL di origine ({tabAL[0].AL}) non modificabile, impossibile spostare"); } // chiedo seconda lettura SE AL "libero" else { cmp_barcode.showOutput("badge badge-info", $"Attenzione: UDC {code} già associato ad AL ({tabAL[0].AL}), rileggere per confermare ({SelPedana})"); LastUDC = code; } } } } } // ...e seleziono udc if (allOk) { SelUDC = code; ProcUDC = code; tryLinkAlUdc(); } } } break; default: break; } } private void tryLinkAlUdc() { bool doRecordUdc = false; int OrderListID = 0; // cerco se UDC sia tra quelli RICHIESTI facendo Ordine <--> Lotto <--> UDC var tabOrdini = MagDataLayer.man.taOList.getByPL_UDC(SelPackList, SelUDC); // se sono 0 --> NON COMPATIBILE if (tabOrdini.Rows.Count == 0) { cmp_barcode.showOutput("badge badge-danger", "Errore: articolo non presente nella PackList, impossibile acquisire"); } // se 1 --> associa else if (tabOrdini.Rows.Count == 1) { OrderListID = tabOrdini[0].OrderListID; doRecordUdc = true; } // se è già selezionato un singolo ordine else if (SelOrdID > 0) { OrderListID = SelOrdID; doRecordUdc = true; } // se > 1 ma NON HO selezione --> chiede a quale associare else { cmp_barcode.showOutput("badge badge-warning", "Attenzione: più di un ordine presente, prego selezionare (UDC)"); } // se va salvato... if (doRecordUdc) { MagDataLayer.man.taEA2U.upsertQuery(SelUDC, SelPedana, OrderListID); cmp_SelUdc.cssCol = "success"; // fa refresh delle tab calcolate... cmp_SelPackList.doUpdate(); cmp_SelPedana.doUpdate(); cmp_SelUdc.doUpdate(); } else { cmp_SelUdc.cssCol = "warning"; } } #endregion Private Methods #region Protected Methods protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { SelPackList = 0; SelPedana = ""; SelUDC = ""; LastUDC = ""; } // eventi barcode cmp_barcode.eh_doRefresh += Cmp_barcode_eh_doRefresh; // eventi reset lotti IN cmp_barcode.eh_doReset += Cmp_barcode_eh_doReset; ; } /// /// Reset selezione item + blocchi suggerimento + sel REDIS x pagina unload /// /// protected void resetSelection(bool resetStatus) { } #endregion Protected Methods } }