using MagData; 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; } } /// /// 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 della packing list selezionata /// protected int SelPackList { get { return cmp_SelPackList.PackListID; } set { cmp_SelPackList.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; } } #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() { #if false // reset grafico icnCart.Attributes.Remove("class"); icnCart.Attributes.Add("class", "btn btn-sm btn-block btn-outline-secondary"); icnBin.Attributes.Remove("class"); icnBin.Attributes.Add("class", "btn btn-sm btn-block btn-outline-secondary"); icnSecOp.Attributes.Remove("class"); icnSecOp.Attributes.Add("class", "btn btn-sm btn-block btn-outline-secondary"); // in base al secondo mostro uno o altro... if (showCart) { icnCart.Attributes.Remove("class"); icnCart.Attributes.Add("class", "btn btn-sm btn-block btn-success"); lblMessage.Text = "Item recognized"; // controllo SE HO cart if (currCartTab.Count == 1) { var cartRow = currCartTab[0]; // imposto OUT lblDestination.Text = $"SEND TO CART C{cartRow.CartIndex} ({cartRow.CartDtmx})"; } else { lblDestination.Text = $"ERROR SEARCHING CART: {currCartTab.Count} found!"; } lblDestination.CssClass = "text-success"; } else if (showBin) { icnBin.Attributes.Remove("class"); icnBin.Attributes.Add("class", "btn btn-sm btn-block btn-primary"); lblMessage.Text = "Item recognized"; if (currBinTab.Count == 1) { var binRow = currBinTab[0]; lblDestination.Text = $"SEND TO BIN B{binRow.BinIndex} ({binRow.BinDtmx})"; } else { lblDestination.Text = $"ERROR SEARCHING BIN: {currBinTab.Count} found!"; } lblDestination.CssClass = "text-primary"; } if (showSecOp) { icnSecOp.Attributes.Remove("class"); icnSecOp.Attributes.Add("class", "btn btn-sm btn-block btn-info"); lblMessage.Text = "Item recognized"; lblLastBCode.Text = $"DO SEC OP: {secOp}"; lblLastBCode.CssClass = "text-info"; } // fix btn reset! lbtResetSel.Visible = (itemIdSelected != 0); #endif } 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.codeInt); doRaiseEv = true; break; default: cmp_barcode.showOutput("text-danger", $"Codice sconosciuto: {decoData.rawData} --> ignoro"); resetSelection(false); doRaiseEv = true; break; } return doRaiseEv; } /// /// Processo il codice letto /// /// /// /// private void processSuggestion(codeType tipoCod, string rawData, 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: displError("Errore: PackList in bozza", "form-control text-center border border-danger text-danger"); break; case 1: case 2: allOk = true; break; case 3: displError("Errore: PackList completata", "form-control text-center border border-warning text-warning"); break; case 4: displError("Errore: PackList già trasferita", "form-control text-center border border-danger text-danger"); break; default: displError("Errore: PackList in stato UNK", "form-control text-center border border-danger text-danger"); break; } } if (allOk) { // seleziono PackList SelPackList = codeInt; tryLinkAlUdc(); } break; case codeType.Pedana: // verifico di avere pack list allOk = false; if (SelPackList == 0) { displError("Errore: manca PackList!", "form-control text-center border border-danger text-danger"); } else { // verifico esista var tabAL = MagDataLayer.man.taEAL.getByKey(rawData); if (tabAL.Rows.Count > 0) { // ...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) { displError($"Errore: Pedana già associata ad altra PackList: {tabAL[0].PackListID}", "form-control text-center border border-danger text-danger"); } else { // tutto ok allOk = true; } } //...e seleziono pedana if (allOk) { SelPedana = rawData; } } break; case codeType.Udc: // verifico e seleziono udc if (true) { SelUDC = rawData; } tryLinkAlUdc(); break; default: break; } } private void tryLinkAlUdc() { // verifica UDC ed al, se entrambi validi e LIBERI // se c'è già un associazione UDC con altro AL --> chiede rilettura // se non c'era effettua associazione } #endregion Private Methods #region Protected Methods protected void displError(string message, string cssClass) { lblOutMessage.Visible = !string.IsNullOrEmpty(message); if (lblOutMessage.Visible) { lblOutMessage.CssClass = cssClass; lblOutMessage.Text = message; } } protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { SelPackList = 0; } // 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) { #if false if (resetStatus) { try { // SE item esiste... var tabItem = DataLayer.man.taIL.getBySearch(itemIdSelected, itemIdSelected.ToString(), 0, 999); if (tabItem.Count == 1) { // riposto item a status 1... DataLayer.man.taIL.updateStatus(itemIdSelected, 1, PlaceId); } } catch { } } // elimino item sel... itemIdSelected = 0; resetShowData(); ComLib.resetItemPickup(SheetID, DeviceId); #endif } #endregion Protected Methods } }