diff --git a/GMW/PostFin_DT.aspx b/GMW/PostFin_DT.aspx index 5bc94515..6fd5e98c 100644 --- a/GMW/PostFin_DT.aspx +++ b/GMW/PostFin_DT.aspx @@ -4,7 +4,6 @@ <%@ Register Src="WebUserControls/mod_storicoAzioniOperatore.ascx" TagName="mod_storicoAzioniOperatore" TagPrefix="uc2" %> <%@ Register Src="WebUserControls/mod_PostFin_DT.ascx" TagPrefix="uc1" TagName="mod_PostFin_DT" %> - diff --git a/GMW/WebUserControls/mod_PostFin_DT.ascx b/GMW/WebUserControls/mod_PostFin_DT.ascx index cca5f643..79c012ad 100644 --- a/GMW/WebUserControls/mod_PostFin_DT.ascx +++ b/GMW/WebUserControls/mod_PostFin_DT.ascx @@ -5,87 +5,72 @@ <%} %> -

ricopiare da PostLiquidi_DT!!!

-
-
-
- devo mostrare UDC + trattamento caricati (1 x particolare... uno nuovo consuma il vecchio) + modalità rimozione DTX come PostLiquidi_DT - vedi PostLiquidi_DT + comportamento TK x POST_Finiti -
-
- <%: traduci("ParticolariCaricati") %> -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+
+ <%: traduci("ContenutoAL") %>
-
-
- <%: traduci("DataFusione") %> -
-
- -
- +
+
+
+ + + + + + + + + + + + + + + + + +
+ +
+
+ + + + + + / + + + + +
+
+ + + + + + <%: traduci("lbtPrendeCaricoAL") %> + <%: traduci("lbtChiudeAL") %> +
+
+
+
+ <%: traduci("ModoRimDtx") %> +
+
+
-
+
- +
@@ -106,35 +91,94 @@ <%: traduci("Note") %>
- +
-
- <%: traduci("lbtGeneraAl") %> - <%: traduci("lbtGeneraUDC") %> +
+ <%: traduci("lbtGeneraUDC") %>
-
-
- destinazione UDC (da datamatrix caricati, con controllo che ci siano trattamenti compatibili a sx... - vedi PostLiquidi_DT -
-
- <%: traduci("lblQtaPart") %> -
-
- <%--disabilitati in maschera dtx--%> - - <%: traduci("addUDC") %> -
+
+
+
+ <%: traduci("Destinazione") %> (UDC)
-
-
- <%: traduci("lblCesta") %> -
-
- +
+
+
+ + + + + + + + + + + + + + + + <%: traduci("Reset") %> + + + + + + + + + +
+ +
+
+ + + + + + / + + + + +
+
+ + + + + +
+
+
+
+ <%: traduci("lblQtaPart") %> +
+
+ + <%: traduci("updateQty") %> +
+
+
+
+ <%: traduci("CodImballo") %> +
+
+ + + + + + +
diff --git a/GMW/WebUserControls/mod_PostFin_DT.ascx.cs b/GMW/WebUserControls/mod_PostFin_DT.ascx.cs index 8d66282d..972c7196 100644 --- a/GMW/WebUserControls/mod_PostFin_DT.ascx.cs +++ b/GMW/WebUserControls/mod_PostFin_DT.ascx.cs @@ -1,27 +1,12 @@ using GMW_data; using SteamWare; using System; -using System.Globalization; using System.Web.UI; -using System.Web.UI.WebControls; namespace GMW.WebUserControls { public partial class mod_PostFin_DT : System.Web.UI.UserControl { - /// - /// flusso associato (hard coded) a RX - /// - protected string flusso = "RX"; - /// - /// stato associato (hard coded) a Controllato RX - /// - protected string statoUDC = "ContrRx"; - /// - /// codice evento dell'UDC che si crea - /// - protected string codEventoUdc = "UDC_RX_DT"; - public event EventHandler eh_reqUpdate; /// /// stringa UID univoca /// @@ -33,23 +18,190 @@ namespace GMW.WebUserControls } } /// - /// caricamento pagina + /// flusso associato (hard coded) a LI (finiti) /// - /// - /// - protected void Page_Load(object sender, EventArgs e) + protected string flusso = "FI"; + /// + /// flusso associato (hard coded) ad ancestor TT (Trattati) + /// + protected string flussoAnc = "TT"; + /// + /// flusso associato (hard coded) a temporaneo TL (Trattati/Liquidi) + /// + protected string flussoTemp = "TL"; + /// + /// stato associato (hard coded) a UDC in OUT: Finito + /// + protected string statoUdcOut = "Fin"; + /// + /// stato associato (hard coded) a UDC in IN: Trattato da travaso AL + /// + protected string statoUdcIn = "Tratt"; + /// + /// codice evento dell'UDC definitivo (OUT) che si crea + /// + protected string codEventoUdcOut = "UDC_TL_DT"; + /// + /// codice evento dell'UDC temporaneo (IN) che si crea + /// + protected string codEventoUdcIn = "UDC_TRATT"; + protected string cssOk = "stileComandoOk"; + protected string cssErr = "stileComandoKo"; + protected string cssWait = "stileComandoND"; + protected string cssAtt = "stileAttesa"; + protected string cssWarn = "stileComandoWarn"; + protected string cssAdd = "stileComandoAdd"; + public event EventHandler eh_reqUpdate; + /// + /// Codice AL sulla linea... + /// + protected string currAL { - if (!Page.IsPostBack) + get { - currParticolare = ""; - lblDTFus.Text = string.Format("{0:ddd dd/MM/yyyy, HH:mm}", dataFus); - lblLinFus.Text = lineaFus; - Postazione.messaggiText = ""; - Postazione.warningText = ""; - fixCella(); - traduciObj(); + string answ = ""; + try + { + answ = MagClass.magazzino.taAL.getByKey(Postazione.currCodLinea)[0].CurrVal; + } + catch + { } + return answ; + } + set + { + MagClass.magazzino.taAL.updateCurrVal(Postazione.currCodLinea, value); + } + } + /// + /// Codice AL in carico + /// + protected string sourceAL + { + get + { + return lblAL.Text.Trim(); + } + set + { + lblAL.Text = value; + } + } + /// + /// ultimo valore barcode letto (x confronto conferme doppio input...) + /// + protected string lastBarcodeIn + { + get + { + return memLayer.ML.StringSessionObj(string.Format("lastBCode_{0}", uid)); + } + set + { + memLayer.ML.setSessionVal(string.Format("lastBCode_{0}", uid), value, false); + } + } + /// + /// Codice AL della cella corrente + /// + protected string destAL + { + get + { + return lblDestAL.Text.Trim(); + } + set + { + lblDestAL.Text = value; + } + } + /// + /// Codice AL associato alla cella corrente... + /// + protected string AlByCella + { + get + { + string answ = ""; + try + { + answ = string.Format("ALF00{0}", Postazione.currCodCella); + // controllo se esista AL sennò lo creo... + if (MagClass.magazzino.taEA.getByAL(answ).Rows.Count == 0) + { + MagClass.magazzino.taEA.Insert(answ, true, DateTime.Now, MagClass.magazzino.CodSoggCurrUser, "", ""); + } + } + catch + { } + return answ; + } + } + /// + /// indica il codice articolo correntemente selezionato + /// + protected string currParticolare + { + get + { + return memLayer.ML.StringSessionObj(string.Format("currParticolare_{0}", uid)); + } + set + { + memLayer.ML.setSessionVal(string.Format("currParticolare_{0}", uid), value, memLayer.ML.confReadBool("keepParticolareSel")); + } + } + /// + /// indica UDC correntemente selezionato + /// + protected string currUDC + { + get + { + return memLayer.ML.StringSessionObj(string.Format("UDC_{0}", uid)); + } + set + { + memLayer.ML.setSessionVal(string.Format("UDC_{0}", uid), value, memLayer.ML.confReadBool("keepParticolareSel")); + } + } + /// + /// num pezzi dell'ultimo UDC di uguale particolare e stato fatto... + /// + public int pezziUdc + { + get + { + int answ = 0; + try + { + answ = (int)MagClass.magazzino.taCartellini.getLastByParticolareStatoConImb(memLayer.ML.StringSessionObj("CodCS"), currParticolare, statoUdcOut)[0].Qta; + } + catch + { + answ = memLayer.ML.cdvi("QtaImballoFiniti"); + } + return answ; + } + } + /// + /// cod imballo dell'ultimo UDC del particolare generato + /// + public string lastCodImb + { + get + { + string answ = ""; + try + { + answ = MagClass.magazzino.taCartellini.getLastByParticolareStatoConImb(memLayer.ML.StringSessionObj("CodCS"), currParticolare, statoUdcOut)[0].CodImballo; + } + catch + { + answ = memLayer.ML.cdv("CodImballoFiniti"); + } + return answ; } - doChecks(); } /// /// qta pezzi x UDC @@ -71,128 +223,6 @@ namespace GMW.WebUserControls { txtQta.Text = value.ToString(); } - } - /// - /// data fusione impostata SALVATA SU DB... - /// - public DateTime dataFus - { - get - { - DateTime answ = Convert.ToDateTime("1900-01-01"); - try - { - - answ = Convert.ToDateTime(utils.obj.RTVal(user_std.pagCorrente, "dataFus" + Postazione.currCodLinea)); - } - catch - { } - return answ; - } - set - { - utils.obj.taRTPV.upsert(user_std.pagCorrente, "dataFus" + Postazione.currCodLinea, string.Format("{0:yyyy/MM/dd HH:mm}", value)); - lblDTFus.Text = string.Format("{0:ddd dd/MM/yyyy, HH:mm}", value); - } - } - /// - /// LINEA fusione impostata SALVATA SU DB... - /// - public string lineaFus - { - get - { - string answ = ""; - try - { - - answ = utils.obj.RTVal(user_std.pagCorrente, "lineaFus" + Postazione.currCodLinea); - } - catch - { } - //2016.01.25 se vuoto metto ND!!! - if (answ == "") - { - answ = "ND"; - } - return answ; - } - set - { - utils.obj.taRTPV.upsert(user_std.pagCorrente, "lineaFus" + Postazione.currCodLinea, value); - lblLinFus.Text = value; - } - } - /// - /// aggiorna visualizzazioen dati particolare - /// - private void updatePart() - { - if (currParticolare != "") - { - lblParticolareAttivo.Text = string.Format("{0} {1}", traduci("particSel"), currParticolare); - // aggiungo descrizione del particolare - string descr = ""; - string disegno = ""; - try - { - DS_magazzino.AnagParticolariRow riga = MagClass.magazzino.taAnagPart.likeSearch(currParticolare, memLayer.ML.StringSessionObj("CodCS"))[0]; - descr = riga.DescParticolare; - disegno = string.Format("( {0} )", riga.DisegnoGrezzo); - } - catch - { } - lblDescrAttivo.Text = descr; - lblDisegno.Text = disegno; - } - else - { - lblParticolareAttivo.Text = "..."; - lblDescrAttivo.Text = ""; - lblDisegno.Text = ""; - } - } - /// - /// verifica se si debab mostrare un campo ricerca UDC attivo... - /// - private void fixCella() - { - lblIdxCella.Text = Postazione.currIdxCella.ToString(); - } - /// - /// richiesta (ri)stampa UDC - /// - /// - /// - public void ristampa() - { - MagClass.magazzino.stampaAL(udcReq, Postazione.printer, Request.UserHostName); - // registro ri-stampa UDC - MagClass.magazzino.taSAO.insertQuery(DateTime.Now, MagClass.magazzino.CodSoggCurrUser, Postazione.name, Postazione.IP, udcReq, "", "creaAL", "Ri-Stampato AL Rx NT"); - } - /// - /// udc da stampare - /// - protected string udcReq - { - get - { - return memLayer.ML.StringSessionObj("udcSelSAO"); - } - } - /// - /// effettua controlli visibilità - /// - private void doChecks() - { - checkBarcode(); - } - /// - /// sistemo labels oggetti - /// - private void traduciObj() - { - } /// /// wrapper traduzione @@ -231,23 +261,6 @@ namespace GMW.WebUserControls } } /// - /// Formato Datamatrix dell'ultimo barcode letto - /// - protected string FormatoDtmxBarcode - { - get - { - string answ = ""; - try - { - answ = DataMatrix.mgr.taVerifica.GetData(barcodeIn)[0].FormatoDtmx; - } - catch - { } - return answ; - } - } - /// /// codice particolare da datamatrix /// /// bollean: @@ -259,14 +272,7 @@ namespace GMW.WebUserControls string answ = ""; if (byTable) { - try - { - answ = DataMatrix.mgr.taDtxAcquisiti.getByKey(barcodeIn)[0].Particolare; // Decode.GetData(barcodeIn, FormatoDtmxLinea)[0].Particolare; - } - catch - { - answ = DataMatrix.mgr.taDecode.GetData(barcodeIn, FormatoDtmxLinea)[0].Particolare; - } + answ = DataMatrix.mgr.taDtxAcquisiti.getByKey(barcodeIn)[0].Particolare; // Decode.GetData(barcodeIn, FormatoDtmxLinea)[0].Particolare; } else { @@ -289,352 +295,749 @@ namespace GMW.WebUserControls } } /// - /// controlla se ci sia un barcode + /// caricamento pagina + /// + /// + /// + protected void Page_Load(object sender, EventArgs e) + { + if (!Page.IsPostBack) + { + Postazione.messaggiText = ""; + Postazione.warningText = ""; + qta = 0; + currUDC = ""; + forceDelete = false; + sourceAL = ""; + setDefaultVal(); + odsAL.DataBind(); + grViewSource.DataBind(); + // NON RESETTO... 2014.04.10 + //sendUpdateTablet("ND", "-", traduci("attesaInput"), "-", "-", "-", "", cssWait, cssWait); + } + setVisibility(); + checkBarcode(); + } + /// + /// imposta i valori di default ad avvio + /// + private void setDefaultVal() + { + if (currAL != "") + { + sourceAL = currAL; + } + destAL = AlByCella; + } + /// + /// Sistema css del panel AL + /// + /// + private void fixCssAL(string tipoPanel) + { + divAL.Attributes.Remove("class"); + divAL.Attributes.Add("class", string.Format("panel panel-{0} panel-sm", tipoPanel)); + } + /// + /// sistema modalità input + /// + private void setVisibility() + { + bool showBtn = false; + if (sourceAL != "" && currAL == "") + { + showBtn = true; + fixCssAL("warning"); + } + else + { + fixCssAL("success"); + } + lbtPrendeCaricoAL.Visible = showBtn; + // X btn chiusura: solo chiudo SOLO se c'è AL in carico.. + lbtChiudiAL.Visible = (currAL != ""); + // ora controllo btn quantità + showBtn = false; + if (grViewDest.SelectedIndex >= 0) + { + showBtn = true; + } + divQta.Visible = showBtn; + divImballi.Visible = showBtn; + if (showBtn) + { + selezionaImballo(); + } + } + /// + /// reset maschera... + /// + protected void doReset() + { + // resetta + fixCssAL("warning"); + lastBarcodeIn = ""; + Postazione.messaggiText = ""; + Postazione.warningText = ""; + Postazione.CssClass = cssAtt; + doUpdate(); + // NON RESETTO... 2014.04.10 + //sendUpdateTablet("ND", "-", traduci("attesaInput"), "-", "-", "-", "", cssWait, cssWait); + } + /// + /// Verifica l'AL se sia ok x procedere: + /// - Attivo + /// + /// + /// T/L + /// + protected bool checkAL(string AL, string tipo) + { + bool answ = false; + try + { + answ = MagClass.magazzino.taEA.getByAL_TipoAttivo(AL, tipo).Rows.Count > 0; + } + catch + { } + if (answ) + { + Postazione.warningText = ""; + Postazione.CssClass = "stileComandoOk"; + } + else + { + Postazione.warningText = traduci("ErroreAlNonTtAttivo"); + Postazione.CssClass = "stileComandoKo"; + } + + return answ; + } + /// + /// Verifica l'AL se abbia datamatrix + /// + /// + /// + protected bool checkDtxAL(string AL) + { + bool answ = false; + try + { + answ = DataMatrix.mgr.taDtx2UDC.getByAL(AL).Rows.Count > 0; + } + catch + { } + if (!answ) + { + Postazione.warningText = traduci("ErroreAlNonDtx"); + Postazione.CssClass = "stileComandoKo"; + } + else + { + Postazione.warningText = ""; + Postazione.CssClass = "stileComandoOk"; + } + return answ; + } + /// + /// controlla se ci sia un barcode e cosa farne... /// private void checkBarcode() { - bool okDTL = false; if (barcodeIn != "") { Postazione.messaggiText = string.Format("{0}: {1}", traduci("BCodeIns"), barcodeIn); - switch (MagClass.tipoBCode_L5(barcodeIn)) + tipoCodiceBarcode tipoBC = MagClass.tipoBCode_L5(barcodeIn); + // per prima cosa: SE NON HO AL SELEZIONATO e non ho sparato un AL o un imballo sollevo errore... + if (!(tipoBC == tipoCodiceBarcode.AL || tipoBC == tipoCodiceBarcode.Imballo) && currAL == "") { - case tipoCodiceBarcode.DateTime: - okDTL = getDateTimeLine(barcodeIn, false); - if (okDTL) - { - Postazione.messaggiText = traduci("SetDataFus"); - Postazione.warningText = ""; - Postazione.CssClass = "stileComandoOk"; - } - else - { - Postazione.messaggiText = traduci("ERR-BCD-004"); - Postazione.warningText = ""; - Postazione.CssClass = "stileComandoKo"; - } - break; - case tipoCodiceBarcode.DateTimeLine: - okDTL = getDateTimeLine(barcodeIn, true); - if (okDTL) - { - Postazione.messaggiText = traduci("SetDataFus"); - Postazione.warningText = ""; - Postazione.CssClass = "stileComandoOk"; - } - else - { - Postazione.messaggiText = traduci("ERR-BCD-004"); - Postazione.warningText = ""; - Postazione.CssClass = "stileComandoKo"; - } - break; - case tipoCodiceBarcode.Particolare: - // imposto il particolare corrente - currParticolare = barcodeIn; - // controllo esista il particolare scansionato - if (DataProxy.obj.taAnagParticolari.getByParticolare(currParticolare).Rows.Count == 0) - { - currParticolare = ""; - Postazione.messaggiText = traduci("partNotFound"); - Postazione.CssClass = "stileComandoKo"; - } - else - { - Postazione.messaggiText = traduci("partSelected"); - Postazione.warningText = ""; - Postazione.CssClass = "stileComandoOk"; - } - // leggo la qta dell'ultimo UDC del particolare, SE C'E', e la imposto... - if (pezziUdc > 0) - { - qta = pezziUdc; - } - else // rimette default - { - qta = memLayer.ML.cdvi("QtaImballoRX"); - } - break; - case tipoCodiceBarcode.DataMatrixTrovato: - // controllo che il DTX non sia già assegnato... - if (DataMatrix.mgr.taDtx2UDC.getByDtx(barcodeIn).Rows.Count == 0) - { - // vers 2.9 - // controllo formato datamatrix sia impostato sulla linea (altrimenti errore linea "non battezzata") - if (FormatoDtmxLinea == "") + // sollevo errore, in primis va definito AL sorgente... + Postazione.warningText = traduci("ERR-ALT-001"); + Postazione.CssClass = cssErr; + sendUpdateTablet("ND", "-", traduci("ERR-ALT-001"), "-", "-", "-", cssErr, cssErr, cssErr); + } + else + { + switch (tipoBC) + { + case tipoCodiceBarcode.Imballo: + // cerco di selezionare! + try { - // errore poiché non è stato non specificato tipo Dtmx assegnato alla linea! - Postazione.messaggiText = barcodeIn; - Postazione.warningText = traduci("ERR-DTX-013"); + ddlImballi.SelectedValue = barcodeIn; + } + catch + { + Postazione.warningText = traduci("ERR-IMB-001"); Postazione.CssClass = "stileComandoKo"; } - else + break; + case tipoCodiceBarcode.Comando: + // se è reset cancello tutto! + if (barcodeIn == memLayer.ML.cdv("cmdReset")) { - // verifico formato datamatrix letto sia quello della linea... - if (FormatoDtmxBarcode != FormatoDtmxLinea) + doReset(); + } + else if (barcodeIn == memLayer.ML.cdv("cmdCloseAL")) + { + // forza reset linea + currAL = ""; + sourceAL = ""; + // resetta! + doReset(); + } + break; + case tipoCodiceBarcode.UDC: + // controllo di avere destAL valido, sennò ricarico pagina... + if (destAL.Length > 5) + { + // controllo se sia un UDC valido... + if (MagClass.magazzino.checkUDC(barcodeIn)) { - // errore corrispondenza formato Dtmx - Postazione.messaggiText = barcodeIn; - Postazione.warningText = traduci("ERR-DTX-014"); - Postazione.CssClass = "stileComandoKo"; - } - else - { - // controllo esito marcatura... - bool marcaturaOk = false; - string formatiSbloccati = memLayer.ML.cdv(string.Format("sbloccoKO#{0}", user_std.pagCorrente)); // sbloccoKO#PostRX_DT - // verifico da conf SE il formato ha controllo KO sbloccato (default: KO BLOCCATI!!!) in tal caso è già OK!!! ATTENZIONE CERCA #codice# - if (formatiSbloccati.IndexOf("#" + FormatoDtmxLinea + "#") > 0) + // controllo se sia un UDC di finiti LIQ in posizione 4... + DS_magazzino.ElencoCartelliniRow cartUDC = MagClass.magazzino.taCartellini.getByUdc(barcodeIn)[0]; + if (cartUDC.CodStato == statoUdcOut && cartUDC.IdxPosizione == memLayer.ML.cdvi("IdxPosizioneFiniti")) { - marcaturaOk = true; - } - if (!marcaturaOk) - { - // recupero elenco datamatrix - DS_DataMatrix.v_ElencoDmtxDataTable tabDmtx = DataMatrix.mgr.taVED.getByKey(barcodeIn); - if (tabDmtx.Rows.Count > 0) + // controllo NON ci sia già un UDC di pari particolare caricato nella postazione corrente (non posso avere 2 UDC a pari particolare da riempire...) + if (MagClass.magazzino.taCartellini.getByParticolareAL(cartUDC.Particolare, destAL).Rows.Count == 0) { - // verifica esitoMarcatura OK - marcaturaOk = (tabDmtx[0].EsitoMarcatura == "OK"); + // controllo NON sia UDC in LDP e già PRELEVATO + if (MagClass.magazzino.taRigheListePrelievo.getByUdc(barcodeIn).Select("Prelevato = 1").Length == 0) + { + // se è ok RICARICO UDC in posizione corrente... + bool fatto = MagClass.magazzino.liquidiRiprendiInCaricoUDC(barcodeIn, MagClass.magazzino.CodSoggCurrUser, destAL, Postazione.currIdxCella); + if (fatto) + { + Postazione.messaggiText = traduci("RiCaricatoUdcLiq"); + Postazione.warningText = ""; + Postazione.CssClass = cssOk; + checkUpdateTablet(barcodeIn); + } + else + { + Postazione.messaggiText = ""; + Postazione.warningText = traduci("ERR-LIQ-001"); + Postazione.CssClass = cssErr; + } + } + else + { + Postazione.messaggiText = ""; + Postazione.warningText = traduci("ERR-LIQ-005"); + Postazione.CssClass = cssErr; + } + } + else + { + Postazione.messaggiText = ""; + Postazione.warningText = traduci("ERR-LIQ-004"); + Postazione.CssClass = cssErr; } - } - - // verifico se datamatrix SIA KO (marcatura NON OK...) - if (!marcaturaOk) - { - // errore corrispondenza formato Dtmx - Postazione.messaggiText = barcodeIn; - Postazione.warningText = traduci("ERR-DTX-012"); - Postazione.CssClass = "stileComandoKo"; } else { - - // datamatrix ok: setto css e labels - Postazione.messaggiText = traduci("partSelected"); - Postazione.warningText = ""; - Postazione.CssClass = "stileComandoOk"; - // controllo il particolare da Dtx + check capienza celle - if (Postazione.currCodCella != "") - { - // calcolo particolare! - try - { - // vers 2.9 modifica per multi-datamatrix - currParticolare = partByDtmx(true); - //currParticolare = DataMatrix.mgr.taDecode.GetData(barcodeIn, FormatoDtmxLinea)[0].Particolare; - } - catch (Exception exc) - { - logger.lg.scriviLog(string.Format("Errore in decodifica particolare da DataMatrix:{0}dtx:{1}{0}Formato Linea:{2}{0}Eccezione:{0}{3}", Environment.NewLine, barcodeIn, exc), tipoLog.EXCEPTION); - currParticolare = ""; - } - if (currParticolare != "") - { - // 2016.01.25 aggiunta lettura codice x data-ora + linea fusione - // controllo per recuperare da datamatrix i dati di codice linea e data fusione - DS_DataMatrix.v_ElencoDmtxDataTable tabDmtx = DataMatrix.mgr.taVED.getByKey(barcodeIn); - if (tabDmtx.Rows.Count > 0) - { - if (tabDmtx[0].EtichettaFusione != "") - { - try - { - // imposto dataOra e linea fusione - okDTL = getDateTimeLine(tabDmtx[0].EtichettaFusione, true); - if (okDTL) - { - Postazione.warningText = traduci("SetDataFus"); - } - } - catch - { } - } - } - - // genera eventuale UDC del particolare su cella/posizione corrente - qta = 1; // tanto poi si ricalcola... - checkCreaUDC(); - // verifico se devo fare gestione con intervallo dtx... da tab config DB) - if (memLayer.ML.configDbVal("CreaDtxByInt") == "1") - //if (utils.obj.configDbVal("CreaDtxByInt") == "1") - { - // ora chiamo la stored che fa il check x tutti i particolari nell'intervallo dei Dtx associati alla cella e (se almeno 2) nel caso crea UDC - checkIntervalloDtx(); - } - /*------------------------------------------------------------------------------------------------- - * chiamo la stored che in blocco - * - associa Dtx a UDC - * - fa controllo, se ho almeno 2 Dtx ok associo tutti i Dtx compresi nell'intervallo min-MAX - *-------------------------------------------------------------------------------------------------- - */ - DataMatrix.mgr.taDtx2UDC.RxSetDtx2Udc(barcodeIn, MagClass.magazzino.CodSoggCurrUser, statoUDC, memLayer.ML.cdvi("IdxPosizioneRxTemp"), Postazione.currIdxCella); - - // 2017.07.22 svuoto barcodeIn.. - barcodeIn = ""; - } - } + Postazione.messaggiText = ""; + Postazione.warningText = traduci("ERR-LIQ-002"); + Postazione.CssClass = cssErr; } } - } - } - else - { - Postazione.messaggiText = barcodeIn; - Postazione.warningText = traduci("DtxGiaAssegnato"); - Postazione.CssClass = "stileComandoKo"; - } - break; - case tipoCodiceBarcode.DataMatrixDecodificato: - // SEGNALO che ho trovato un partnumber che è un possibile datamatrix, ma che non è nell'elenco dei datamatrix acquisiti... - Postazione.warningText = traduci("partNumFoundNoDtx"); - Postazione.CssClass = "stileComandoWarn"; - // faccio le verifiche... verifico formato datamatrix sia COMPATIBILE con formato datamatrix della linea corrente... - if (FormatoDtmxBarcode != FormatoDtmxLinea) - { - // errore corrispondenza formato Dtmx - Postazione.messaggiText = barcodeIn; - Postazione.warningText = traduci("ERR-DTX-014"); - Postazione.CssClass = "stileComandoKo"; - } - else - { - // se da web.config permesso il "force" di acquisizione - if (!memLayer.ML.confReadBool("enableDtxNotAcq")) - { - //errore gestione dmtx non acquisizione NON E' permessa - Postazione.messaggiText = barcodeIn; - Postazione.warningText = traduci("ERR-DTX-015"); - Postazione.CssClass = "stileComandoKo"; + else + { + Postazione.messaggiText = ""; + Postazione.warningText = traduci("ERR-LIQ-003"); + Postazione.CssClass = cssErr; + } } else { - // datamatrix ok: setto css e labels - Postazione.messaggiText = traduci("partSelected"); - Postazione.warningText = ""; - Postazione.CssClass = "stileComandoOk"; - // controllo il particolare da Dtx + check capienza celle - if (Postazione.currCodCella != "") + Postazione.messaggiText = ""; + Postazione.warningText = traduci("ERR-ALF-001"); + Postazione.CssClass = cssErr; + } + break; + case tipoCodiceBarcode.AL: + // se linea libera... + if (currAL == "") + { + // verifico barcode valido + if (checkAL(barcodeIn, "T")) { - // calcolo particolare! + // verifico AL sia con datamatrix... + if (checkDtxAL(barcodeIn)) + { + // controllo: se avevo già letto lo steso AL è conferma presa in carico... + if (sourceAL == barcodeIn) + { + presaCaricoAL(); + } + else + { + // mostro AL sorgente + sourceAL = barcodeIn; + fixCssAL("warning"); + // sistemo grafica + Postazione.messaggiText = traduci("ConfermareAL"); + Postazione.warningText = ""; + Postazione.CssClass = cssOk; + } + } + else + { + sourceAL = ""; + } + } + else + { + sourceAL = ""; + } + } + else + { + Postazione.messaggiText = ""; + Postazione.warningText = traduci("ERR-ALT-002"); + Postazione.CssClass = cssErr; + } + break; + case tipoCodiceBarcode.DataMatrixTrovato: + string OldUDC = ""; + int IdxPosizione = 0; + string NewUDC = ""; + // verifica preliminare: se OK procedo, se è KO NON LO CONSIDERO PROPRIO + bool isOk = false; + try + { + isOk = DataMatrix.mgr.taVerifica.GetData(barcodeIn)[0].StatoDtx == "OK"; + } + catch + { } + if (!isOk) + { + // non accetto Dtx e mostro errore + Postazione.messaggiText = barcodeIn; + Postazione.warningText = traduci("ERR-DTX-012"); + Postazione.CssClass = cssErr; + } + else // PROCEDO!!! + { + // verifico DTX sia in quelli dell'AL sorgente + if (DataMatrix.mgr.taDtx2UDC.getByDtxAl(sourceAL, barcodeIn).Rows.Count > 0) + { + // cerco se ci sia UDC di destinazione + DateTime adesso = DateTime.Now; try { - // vers 2.9 modifica per multi-datamatrix - currParticolare = partByDtmx(false); + OldUDC = DataMatrix.mgr.taDtx2UDC.getByDtxAl(sourceAL, barcodeIn)[0].UDC; + IdxPosizione = MagClass.magazzino.taCartellini.getByUdc(OldUDC)[0].IdxPosizione; + currParticolare = MagClass.magazzino.taCartellini.getByUdc(OldUDC)[0].Particolare; } - catch (Exception exc) + catch { - logger.lg.scriviLog(string.Format("Errore in decodifica particolare da DataMatrix:{0}dtx:{1}{0}Formato Linea:{2}{0}Eccezione:{0}{3}", Environment.NewLine, barcodeIn, exc), tipoLog.EXCEPTION); currParticolare = ""; } if (currParticolare != "") { - // genera eventuale UDC del particolare su cella/posizione corrente - qta = 1; // tanto poi si ricalcola... - checkCreaUDC(); - /*------------------------------------------------------------------------------------------------- - * chiamo la stored che in blocco - * - associa Dtx a UDC - * - fa controllo, se ho almeno 2 Dtx ok associo tutti i Dtx compresi nell'intervallo min-MAX - *-------------------------------------------------------------------------------------------------- - */ - DataMatrix.mgr.taDtx2UDC.RxSetDtx2Udc(barcodeIn, MagClass.magazzino.CodSoggCurrUser, statoUDC, memLayer.ML.cdvi("IdxPosizioneRxTemp"), Postazione.currIdxCella); + try + { + NewUDC = MagClass.magazzino.taCartellini.getByParticolareAL(currParticolare, destAL)[0].UDC; + } + catch + { + NewUDC = ""; + } + if (NewUDC == "") + { + // CASO 01: DTX in AL sorgente, particolare OK, NON C'E' UDC dest + procDtx_Caso01(ref OldUDC, ref NewUDC, adesso); + } + else + { + // CASO 02: DTX in AL sorgente, particolare OK, C'E' UDC dest + OldUDC = procDtx_Caso02(OldUDC, NewUDC); + } + checkUpdateTablet(NewUDC); + } + else + { + Postazione.messaggiText = barcodeIn; + Postazione.warningText = traduci("UdcNonTrovato"); + Postazione.CssClass = cssErr; + } + } + // se non lo trovo in AL sorgente... + else + { + // faccio ulteriore verifica: se il datamatrix sia "libero" o già tra i "Missing In Action".. + if (DataMatrix.mgr.taDtxAvailFree.GetData(barcodeIn).Rows.Count > 0) + { + // CASO 03: DTX NON in sorgente ma libero/missing in action + NewUDC = procDtx_Caso03(NewUDC); + } + else + { + // CASO 04: DTX NON in sorgente e NON libero/missing in action + procDTX_Caso04(ref OldUDC, ref IdxPosizione, ref NewUDC); } } } - } - break; - default: - Postazione.warningText = traduci("ERR-UNK-001"); - Postazione.CssClass = "stileComandoND"; - break; + break; + default: + Postazione.warningText = traduci("ERR-BCD-001"); + Postazione.CssClass = cssErr; + break; + } } barcodeIn = ""; } - else - { - Postazione.messaggiText = traduci("AttesaBCode"); - Postazione.CssClass = "stileAttesa"; - } doUpdate(); } + + #region metodi processing DataMatrix letto da BarCode + /// - /// recupera da barcode dataOra e linea fusione (SE presenti) + /// CASO 01: DTX in AL sorgente, particolare OK, NON C'E' UDC dest /// - /// valore x decodificare dataora - linea - /// SE si debba cercare ANCHE linea... - /// - private bool getDateTimeLine(string val2decode, bool readline) + /// + /// + /// + private void procDtx_Caso01(ref string OldUDC, ref string NewUDC, DateTime adesso) { - bool okData = false; - bool okLinea = false; - DateTime oldDataFus = new DateTime(1900, 1, 1); - // imposto NUOVA dataora fusione... - string newData = ""; - string newLinea = ""; - // tento di recuperare e verifico validità dei 2 valori separatamente... - try + // verifico che NON sia modalità "rimozione" datamatrix + if (!chkDtxMode.Checked) { - newData = val2decode.Replace(memLayer.ML.AppConf["prefDateTime"], "").Substring(0, 10); - if (newData != "") + // scambio UDC e prendo quello TT + OldUDC = OldUDC.Replace(flussoTemp, flussoAnc); + // calcolo codImballo + + string codImballo = ""; + try { - dataFus = DateTime.ParseExact(newData, "yyMMddHHmm", CultureInfo.InvariantCulture); - okData = true; + codImballo = ddlImballi.SelectedValue; + } + catch + { + codImballo = memLayer.ML.cdv("CodImballoFiniti"); + } + // se NON HA selezionato prendo default... + if (codImballo == "" || codImballo == "-") + { + codImballo = memLayer.ML.cdv("CodImballoFiniti"); + } + // controllo se devo usare chiamata a stored unica (UDC + aggancio AL + cella corretta) o due chiamate + if (memLayer.ML.confReadBool("useStoredLiqSP")) + { + // nuova stored con AL e cella...... + NewUDC = MagClass.magazzino.creaUdcWithAlCella(destAL, sourceAL, barcodeIn, statoUdcOut, Postazione.currCodCella, flusso, "", currParticolare, "", "", "", "", OldUDC, 0, codImballo, "U", MagClass.magazzino.CodSoggCurrUser, pezziUdc, 0, 0, adesso, 0, statoUdcOut, memLayer.ML.cdvi("IdxPosizioneFinTemp"), "IdxPosizioneFinTemp", codEventoUdcOut, "", "", adesso.Year, Request.UserHostName); + // registro creazione nuovo UDC + MagClass.magazzino.taSAO.insertQuery(adesso, MagClass.magazzino.CodSoggCurrUser, Postazione.name, Postazione.IP, NewUDC, currParticolare, "creaUDC", string.Format("Creato nuovo UDC PostLiquidi DT, qta: {0} {1}", qta, "")); + } + else + { + // oppure lo creo... + NewUDC = MagClass.magazzino.creaUdc(flusso, "", currParticolare, "", "", "", "", OldUDC, 0, codImballo, "U", MagClass.magazzino.CodSoggCurrUser, pezziUdc, 0, 0, adesso, 0, statoUdcOut, memLayer.ML.cdvi("IdxPosizioneFinTemp"), "IdxPosizioneFinTemp", codEventoUdcOut, "", "", adesso.Year, Request.UserHostName); + // registro creazione nuovo UDC + MagClass.magazzino.taSAO.insertQuery(adesso, MagClass.magazzino.CodSoggCurrUser, Postazione.name, Postazione.IP, NewUDC, currParticolare, "creaUDC", string.Format("Creato nuovo UDC PostLiquidi DT, qta: {0} {1}", qta, "")); + // lo associo all'AL! + MagClass.magazzino.taAL2UDC.Insert(destAL, NewUDC, adesso, MagClass.magazzino.CodSoggCurrUser); + + + DataMatrix.mgr.taDtx2UDC.UpdateUDC(NewUDC, barcodeIn, statoUdcOut, DateTime.Now, MagClass.magazzino.CodSoggCurrUser, false, false); + // disattivo AL (se non era già disattivo...) x evitare si possa togliere senza chiudere... + MagClass.magazzino.taEA.DisattivaAL(sourceAL); + // fix messaggi + Postazione.messaggiText = traduci("ConfermatoDtx"); + Postazione.warningText = ""; + Postazione.CssClass = cssAtt; } } - catch + else { - dataFus = oldDataFus; + Postazione.messaggiText = barcodeIn; + Postazione.warningText = traduci("UdcNonTrovato"); + Postazione.CssClass = cssErr; } - if (readline) + } + /// + /// CASO 02: DTX in AL sorgente, particolare OK, C'E' UDC dest + /// + /// + /// + /// + private string procDtx_Caso02(string OldUDC, string NewUDC) + { + // verifico se sia modalità "rimozione" datamatrix x cui tolgo i datamatrix dall'UDC finale.. + if (chkDtxMode.Checked) { - if (okData) + // chiamo stored di verifica spostabilità (ovvero: dato Dtx è nell'UDC di dest e UDC TL è ancora in carico ad AL sorgente...) + bool dtxInUdcDest = false; + bool udcSourceOk = false; + try + { + dtxInUdcDest = DataMatrix.mgr.taDtx2UDC.getByDtx(barcodeIn).Select(string.Format("UDC = '{0}'", NewUDC)).Length > 0; + // ricalcolo vecchio UDC + OldUDC = ((DS_DataMatrix.Dtx2UDCRow)DataMatrix.mgr.taDtx2UDC.getByDtx(barcodeIn).Select(string.Format("CodStato = '{0}'", statoUdcIn))[0]).UDC.Replace(flussoAnc, flussoTemp); + // verifico SE sia in carico ad AL... + if (OldUDC != "") + { + if (MagClass.magazzino.taAL2UDC.getByAL(sourceAL).Select(string.Format("UDC = '{0}'", OldUDC)).Length > 0) + { + udcSourceOk = true; + } + } + } + catch + { } + if (dtxInUdcDest && udcSourceOk) + { + // tolgo da AL (se caricato), faccio update e sposto su UDC sorgente... + DataMatrix.mgr.taDtx2UDC.UpdateUDC(OldUDC, barcodeIn, statoUdcOut, DateTime.Now, MagClass.magazzino.CodSoggCurrUser, false, false); + // fix messaggi + Postazione.messaggiText = traduci("ToltoDtxDaDest"); + Postazione.warningText = ""; + Postazione.CssClass = cssAtt; + } + else + { + if (dtxInUdcDest) + { + // segno che NON posso spostare DTX + Postazione.messaggiText = ""; + Postazione.warningText = traduci("ERR-DTX-010"); + Postazione.CssClass = cssAtt; + } + else + { + // segno che NON posso spostare DTX + Postazione.messaggiText = ""; + Postazione.warningText = traduci("ERR-DTX-011"); + Postazione.CssClass = cssAtt; + } + } + } + else + { + // se lo trovo chiamo procedura di spostamento Dtx tra UDC sorgente --> dest (con eventuale creazione dest) + DataMatrix.mgr.taDtx2UDC.UpdateUDC(NewUDC, barcodeIn, statoUdcOut, DateTime.Now, MagClass.magazzino.CodSoggCurrUser, false, false); + // fix messaggi + Postazione.messaggiText = traduci("ConfermatoDtx"); + Postazione.warningText = ""; + Postazione.CssClass = cssAtt; + } + // disattivo AL (se non era già disattivo...) x evitare si possa togliere senza chiudere... + MagClass.magazzino.taEA.DisattivaAL(sourceAL); + return OldUDC; + } + /// + /// CASO 03: DTX NON in sorgente ma libero/missing in action + /// + /// + /// + private string procDtx_Caso03(string NewUDC) + { + // controllo se sia seconda conferma + if (barcodeIn == lastBarcodeIn) + { + lastBarcodeIn = ""; + // in questo caso aggiungo Dtx con la catena della storia precedente + try + { + // vers 2.9 modifica per multi-datamatrix + currParticolare = partByDtmx(true); + // vers vecchia + //currParticolare = DataMatrix.mgr.taDecode.GetData(barcodeIn, "")[0].Particolare; + } + catch + { + currParticolare = ""; + } + if (currParticolare != "") { try { - newLinea = val2decode.Replace(memLayer.ML.AppConf["prefDateTime"], "").Substring(10, val2decode.Length - 10 - memLayer.ML.AppConf["prefDateTime"].Length); - if ((newLinea != "") && (DataProxy.obj.taElPost.getByCod(newLinea).Rows.Count > 0)) - { - lineaFus = newLinea; - okLinea = true; - } - else - { - lineaFus = ""; - dataFus = oldDataFus; - } + NewUDC = MagClass.magazzino.taCartellini.getByParticolareAL(currParticolare, destAL)[0].UDC; } catch { - lineaFus = ""; - dataFus = oldDataFus; + NewUDC = ""; + } + if (NewUDC != "") + { + // sono in caso di forzatura Dtx, quindi controllo se l'UDC di destinazione esista e abbia qta DataMatrix associati > 0 + if (DataMatrix.mgr.taDtx2UDC.getByUDC(NewUDC).Rows.Count > 0) + // vecchio controllo delal QTA del cartellino + //if (MagClass.magazzino.taCartellini.getByUdc(NewUDC)[0].Qta > 0) + { + // riassocio (se possibile) UDC alla nuova storia (se era un DTX x prove dimensionali post TT non cambio la sua storia ma aggiungo relazioni UDC...) + DataMatrix.mgr.taDtx2UDC.RiassociaDtx(NewUDC, barcodeIn, DateTime.Now, MagClass.magazzino.CodSoggCurrUser); + // fix messaggi + Postazione.messaggiText = traduci("ConfermatoDtx"); + Postazione.warningText = ""; + Postazione.CssClass = cssAtt; + checkUpdateTablet(NewUDC); + } + else + { + // errore! UDC dest con qta == 0 + Postazione.messaggiText = ""; + Postazione.warningText = traduci("ERR-DTX-005"); + Postazione.CssClass = cssErr; + } + } + else + { + Postazione.messaggiText = ""; + Postazione.warningText = traduci("ERR-DTX-001"); + Postazione.CssClass = cssErr; } } else { - lineaFus = ""; + Postazione.messaggiText = ""; + Postazione.warningText = traduci("ERR-DTX-002"); + Postazione.CssClass = cssErr; + } + } + // salvo prima conferma del dtx x insert + else + { + lastBarcodeIn = barcodeIn; + Postazione.messaggiText = traduci("plsConfDtxLoad"); + Postazione.warningText = traduci("ERR-DTX-003"); + Postazione.CssClass = cssAdd; + } + return NewUDC; + } + /// + /// CASO 04: DTX NON in sorgente e NON libero/missing in action + /// + /// + /// + /// + private void procDTX_Caso04(ref string OldUDC, ref int IdxPosizione, ref string NewUDC) + { + // verifico se sia modalità "rimozione" datamatrix x cui tolgo i datamatrix dall'UDC finale.. + if (chkDtxMode.Checked) + { + // chiamo stored di verifica spostabilità (ovvero: dato Dtx è nell'UDC di dest e UDC TL è ancora in carico ad AL sorgente...) + bool dtxInUdcDest = false; + bool udcSourceOk = false; + try + { + // ricalcolo vecchio UDC + OldUDC = ((DS_DataMatrix.Dtx2UDCRow)DataMatrix.mgr.taDtx2UDC.getByDtx(barcodeIn).Select(string.Format("CodStato = '{0}'", statoUdcIn))[0]).UDC.Replace(flussoAnc, flussoTemp); + IdxPosizione = MagClass.magazzino.taCartellini.getByUdc(OldUDC)[0].IdxPosizione; + currParticolare = MagClass.magazzino.taCartellini.getByUdc(OldUDC)[0].Particolare; + NewUDC = DataMatrix.mgr.taDtx2UDC.getByDtxAl(destAL, barcodeIn)[0].UDC; + // verifico SE sia in carico ad AL... + if (OldUDC != "") + { + if (MagClass.magazzino.taAL2UDC.getByAL(sourceAL).Select(string.Format("UDC = '{0}'", OldUDC)).Length > 0) + { + udcSourceOk = true; + } + } + dtxInUdcDest = DataMatrix.mgr.taDtx2UDC.getByDtx(barcodeIn).Select(string.Format("UDC = '{0}'", NewUDC)).Length > 0; + } + catch + { } + if (dtxInUdcDest && udcSourceOk) + { + // tolgo da AL (se caricato), faccio update e sposto su UDC sorgente... + DataMatrix.mgr.taDtx2UDC.UpdateUDC(OldUDC, barcodeIn, statoUdcOut, DateTime.Now, MagClass.magazzino.CodSoggCurrUser, false, false); + // fix messaggi + Postazione.messaggiText = traduci("ToltoDtxDaDest"); + Postazione.warningText = ""; + Postazione.CssClass = cssAtt; + } + else + { + // segno che NON posso spostare DTX + Postazione.messaggiText = ""; + Postazione.warningText = traduci("ERR-DTX-010"); + Postazione.CssClass = cssAtt; } } else { - okLinea = true; + // devo distinguere tra il caso dei Dtx già spostati (quindi segnalare che è già in destinazione) + + // verifico DTX sia in quelli dell'AL destinazione + if (DataMatrix.mgr.taDtx2UDC.getByDtxAl(destAL, barcodeIn).Rows.Count > 0) + { + try + { + // vers 2.9 modifica per multi-datamatrix + currParticolare = partByDtmx(true); + // vers vecchia + //currParticolare = DataMatrix.mgr.taDecode.GetData(barcodeIn, "")[0].Particolare; + } + catch + { + currParticolare = ""; + } + NewUDC = MagClass.magazzino.taCartellini.getByParticolareAL(currParticolare, destAL)[0].UDC; + Postazione.messaggiText = barcodeIn; + Postazione.warningText = traduci("ERR-DTX-006"); + Postazione.CssClass = cssWait; + // update tablet! + checkUpdateTablet(NewUDC); + } + // ... dal caso generico di un Dtx NON accettabile + else + { + // volendo qui si potrebbe distinguere tra Dtx già con stato Fin e Dtx di RX/TT non ancora preso in carico ai Liquidi + // errore generico! + Postazione.messaggiText = barcodeIn; + Postazione.warningText = traduci("ERR-DTX-004"); + Postazione.CssClass = cssErr; + } } - return okData && okLinea; + } + + #endregion + + /// + /// prende in carico AL indicato... + /// + private void presaCaricoAL() + { + // salvo presa in carico AL + string AL = MagClass.magazzino.creaAssociaAlTL(sourceAL, tipoAL.AL_LI, MagClass.magazzino.CodSoggCurrUser, Postazione.currCodCella); + if (AL != "NA") + { + // salva ed indica nuovo AL selezionato... + sourceAL = AL; + currAL = sourceAL; + // nascondo elenco UDC dell'AL + fixCssAL("success"); + // sistemo grafica + Postazione.messaggiText = traduci("CaricatoAL"); + Postazione.warningText = ""; + Postazione.CssClass = cssAtt; + } + else + { + // sistemo grafica + Postazione.messaggiText = ""; + Postazione.warningText = traduci("[ERR-ALL-001]"); + Postazione.CssClass = cssErr; + } + } + /// + /// resetta AL sorgente + /// + public void resetSourceAL() + { + sourceAL = ""; } /// /// aggiorna tabella + focus a barcode /// public void doUpdate() { - fixCella(); - grView.DataBind(); - // fix dataFus - lblDTFus.Text = string.Format("{0:ddd dd/MM/yyyy, HH:mm}", dataFus); - lblLinFus.Text = lineaFus; - // aggiorno le qta! - qta = pezziUdc; - // update particolare - updatePart(); + setDefaultVal(); + setVisibility(); + grViewSource.DataBind(); + grViewDest.DataBind(); // raise dell'evento if (eh_reqUpdate != null) { @@ -644,325 +1047,363 @@ namespace GMW.WebUserControls txtBarcode.Focus(); } /// - /// effettua reset dati - /// - private void doResetData() - { - // resetto i dati QtaTot e particolare... - doChecks(); - } - /// - /// indica il codice articolo correntemente selezionato - /// - protected string currParticolare - { - get - { - return memLayer.ML.StringSessionObj(string.Format("currParticolare_{0}", uid)); - } - set - { - memLayer.ML.setSessionVal(string.Format("currParticolare_{0}", uid), value, memLayer.ML.confReadBool("keepParticolareSel")); - } - } - /// - /// num pezzi dell'intero AL (temporaneo) - /// - public int pezziUdc - { - get - { - int answ = 0; - try - { - DS_magazzino.v_UdcDetailDataTable tabUdc = MagClass.magazzino.taDettUDC.getUdcDetailByIdxCella(Convert.ToInt32(lblIdxCella.Text)); - if (tabUdc.Rows.Count > 0) - { - answ = Convert.ToInt32(float.Parse(tabUdc.Compute("Sum(Qta)", "").ToString())); - } - } - catch (Exception exc) - { - if (memLayer.ML.confReadInt("_logLevel") > 5) logger.lg.scriviLog(exc.ToString(), tipoLog.EXCEPTION); - answ = 0; - } - return answ; - } - } - /// - /// traduce gli header delle colonne + /// evento selezione grView destinazione: ricarico dati! /// /// /// - protected void grView_DataBound(object sender, EventArgs e) - { - if (grView.Rows.Count > 0) - { - LinkButton lb; - // aggiorno gli headers - foreach (TableCell cella in grView.HeaderRow.Cells) - { - try - { - lb = (LinkButton)cella.Controls[0]; - lb.Text = traduci(lb.Text); - } - catch - { } - } - int totRecord = grView.Rows.Count + grView.PageSize * (grView.PageCount - 1); - lblNumRec.Text = string.Format("{0} / 6", totRecord); - } - else - { - lblNumRec.Text = ""; - } - } - /// - /// creo il nuovo UDC da particolare corrente! - /// - /// - /// - protected void lbtAddUdc_Click(object sender, EventArgs e) - { - // controlli preliminari - if (Postazione.currCodCella != "") - { - if (currParticolare != "") - { - if (qta > 0) - { - checkCreaUDC(); - } - else - { - Postazione.warningText = traduci("ErroreNoQta"); - Postazione.CssClass = "stileComandoKo"; - } - } - else - { - Postazione.warningText = traduci("ErroreNoPart"); - Postazione.CssClass = "stileComandoKo"; - } - } - else - { - Postazione.warningText = traduci("ErroreNoSelLinea"); - Postazione.CssClass = "stileComandoKo"; - } - doUpdate(); - } - - /// - /// verifica tutti i DTX associati e se almeno 2 verifica ci siano UDC x tutti i particolari definiti nell'intervallo... - /// - /// - private void checkIntervalloDtx() - { - // recupero elenco intervallo e se ho almeno 2 particolari faccio check... - DS_DataMatrix.stp_conteggioDtxDataTable tabConteggi = DataMatrix.mgr.taConteggio.getByCodCella(Postazione.currCodCella); - if (tabConteggi.Rows.Count > 1) - { - // salvo particoalre x riassegnarlo alla fine... - string partSel = currParticolare; - // per ogni cella - foreach (DS_DataMatrix.stp_conteggioDtxRow riga in tabConteggi) - { - // imposto particolare corrente - currParticolare = riga.Particolare; - // faccio check... - checkCreaUDC(); - } - currParticolare = partSel; - } - } - /// - /// crea eventualmente UDC per particolare - /// - /// - /// - private void checkCreaUDC() - { - string newUdcChild = ""; - string noteTrim = ""; - DateTime adesso = DateTime.Now; - // verifico se ho già quel particolare tra quelli inseriti in linea... - try - { - newUdcChild = DataProxy.obj.taCartellini.getByParticolareIdxPosIdxCella(currParticolare, memLayer.ML.cdvi("IdxPosizioneRxTemp"), Postazione.currIdxCella)[0].UDC; - } - catch - { - newUdcChild = ""; - } - if (newUdcChild == "") - { - // controllo NON ci siano troppi UDC in posizione... da capienza ed assegnati - DS_magazzino.V_statoCelleCapienzaAssegnatiRow riga; - bool piena = false; - try - { - riga = MagClass.magazzino.taStatoCelle.getByIdxCella(Postazione.currIdxCella)[0]; - if (riga.UdcAssegnati >= riga.Capienza) piena = true; - } - catch - { - } - if (!piena) - { - try - { - // forzo qta a 0 x generare nuovo UDC - qta = 0; - // creo nuovo UDC RX - newUdcChild = MagClass.magazzino.creaUdc(flusso, "", currParticolare, "", "", "", "", "", 0, memLayer.ML.cdv("CodImballoRX"), "U", MagClass.magazzino.CodSoggCurrUser, qta, 0, 0, adesso, 0, statoUDC, memLayer.ML.cdvi("IdxPosizioneRxTemp"), "IdxPosizioneRxTemp", codEventoUdc, noteTrim, "", adesso.Year, Request.UserHostName); - - } - catch (Exception exc) - { - logger.lg.scriviLog(string.Format("Errore in creazione UDC temp RX: {0}{1}", Environment.NewLine, exc)); - } - } - else - { - Postazione.warningText = traduci("ErroreAL-Full"); - doUpdate(); - } - } - if (newUdcChild != "") - { - // lo posiziono nella cella corrente... - MagClass.magazzino.spostaUDC(memLayer.ML.StringSessionObj("CodCS"), newUdcChild, Postazione.currIdxCella, memLayer.ML.confReadBool("spostaUdcResettaLdp"), Request.UserHostName); - Postazione.CssClass = "stileAttesa"; - Postazione.warningText = ""; - Postazione.messaggiText = traduci("partAdded"); - - // 2014.07.10 aggiungo attributo della data di fusione... - MagClass.magazzino.taAtt2UDC.upsertVal(newUdcChild, "DF", string.Format("{0:yyyy/MM/dd HH:mm}", dataFus), adesso, MagClass.magazzino.CodSoggCurrUser); - - // 2015.06.03 aggiunto attributo linea fusione! - MagClass.magazzino.taAtt2UDC.upsertVal(newUdcChild, "LF", string.Format("{1} - {0:yy/MM/dd HH:mm}", dataFus, lineaFus), adesso, MagClass.magazzino.CodSoggCurrUser); - - currParticolare = ""; - doUpdate(); - } - } - /// - /// evento selezione: ricarico dati! - /// - /// - /// - protected void grView_SelectedIndexChanged(object sender, EventArgs e) + protected void grViewDest_SelectedIndexChanged(object sender, EventArgs e) { // ricarico dati dell'UDC come particolare e quantità... - string UDC = grView.SelectedDataKey["UDC"].ToString(); - if (MagClass.magazzino.checkUDC(UDC)) + currUDC = grViewDest.SelectedDataKey["UDC"].ToString(); + int qtaDtx = 0; + if (MagClass.magazzino.checkUDC(currUDC)) { - currParticolare = DataProxy.obj.taCartellini.stp_getByUdc(UDC)[0].Particolare; + currParticolare = DataProxy.obj.taCartellini.stp_getByUdc(currUDC)[0].Particolare; + qta = Convert.ToInt32(DataProxy.obj.taCartellini.stp_getByUdc(currUDC)[0].Qta); + qtaDtx = Convert.ToInt32(MagClass.magazzino.taA2U2D.getByUDC(currUDC)[0].QtaDtx); + // imposto particolare... + lblPart.Text = currParticolare; + ddlImballi.DataBind(); } Postazione.messaggiText = traduci("partSelected"); Postazione.warningText = ""; Postazione.CssClass = "stileComandoOk"; + setVisibility(); doUpdate(); + // fisso focus su note! + txtNote.Focus(); + checkUpdateTablet(currUDC); } /// - /// Numero cesta inserito + /// effettua check e update tablet /// - public string numCesta + /// + private void checkUpdateTablet(string UDC) { - get + if (memLayer.ML.confReadBool("updateTablet")) { - return txtCesta.Text.Trim(); - } - set - { - txtCesta.Text = value; + try + { + string particolare = ""; + int qtaDtx = 0; + int qtaTot = 0; + if (MagClass.magazzino.checkUDC(UDC)) + { + DS_Applicazione.ElencoCartelliniRow riga = DataProxy.obj.taCartellini.stp_getByUdc(UDC)[0]; + particolare = string.Format("{0} - {1}", riga.Particolare, riga.DescParticolare); + qtaTot = Convert.ToInt32(DataProxy.obj.taCartellini.stp_getByUdc(UDC)[0].Qta); + qtaDtx = Convert.ToInt32(MagClass.magazzino.taA2U2D.getByUDC(UDC)[0].QtaDtx); + } + // update tablet + string css = ""; + string mess = ""; + if (qtaDtx > qtaTot) + { + css = cssErr; + mess = traduci("ERR-QTY-001"); + } + else if (qtaDtx == qtaTot) + { + css = cssOk; + mess = traduci("Ready4Print"); + } + else + { + css = cssWait; + mess = "-"; + } + sendUpdateTablet(UDC, particolare, mess, qtaDtx.ToString(), qtaTot.ToString(), string.Format("({0})", qtaDtx - qtaTot), cssOk, cssAtt, css); + } + catch (Exception exc) + { + logger.lg.scriviLog(string.Format("Errore in fase di check dati x tablet: {0}{1}", Environment.NewLine, exc)); + } } } /// - /// evento cambio num cesta/grappolo + /// prende in carico AL selezionato /// /// /// - protected void txtCesta_TextChanged(object sender, EventArgs e) + protected void lbtPrendeCaricoAL_Click(object sender, EventArgs e) { - txtCesta.Text = txtCesta.Text.ToUpper().Trim().PadLeft(4, '0').Substring(0, 4); + presaCaricoAL(); doUpdate(); } /// + /// chiude l'AL in carico + /// + /// + /// + protected void lbtChiudiAL_Click(object sender, EventArgs e) + { + // controllo se UDC rimasti sono tutti a zero e NON ci sono altri datamatrix + if (assiemeIsEmpty(sourceAL) || forceDelete) + { + // chiamo stored x sistemazione AL: + MagClass.magazzino.eliminaEmptyAL(sourceAL, MagClass.magazzino.CodSoggCurrUser); + Postazione.warningText = ""; + Postazione.messaggiText = ""; + Postazione.CssClass = cssAtt; + // ricarico forzato! + Response.Redirect("PostLiquidi_DT"); + } + else + { + // altrimenti chiedo conferma per fase spostamenti forzati... + forceDelete = true; + Postazione.warningText = traduci("ConfChiusConAnomDtx"); + Postazione.messaggiText = traduci("RichConfChiusAlDtx"); + Postazione.CssClass = cssErr; + } + doUpdate(); + } + /// + /// variabile force delete salvata... + /// + protected bool forceDelete + { + get + { + return memLayer.ML.BoolSessionObj(string.Format("ForceDelAL_{0}", uid)); + } + set + { + memLayer.ML.setSessionVal(string.Format("ForceDelAL_{0}", uid), value); + } + } + /// + /// Verifica se Assieme sia vuoto (no DTX negli UDC) + /// + /// Codice AL + /// + protected bool assiemeIsEmpty(string AL) + { + bool answ = false; + try + { + answ = DataMatrix.mgr.taDtx2UDC.getByAL(AL).Rows.Count == 0; + } + catch { } + return answ; + } + /// + /// reset della selezione + /// + /// + /// + protected void btnReset_Click(object sender, EventArgs e) + { + grViewDest.SelectedIndex = -1; + qta = 0; + currUDC = ""; + setVisibility(); + doUpdate(); + } + /// + /// update Qty x UDC selezionato... + /// + /// + /// + protected void lbtUpdQty_Click(object sender, EventArgs e) + { + MagClass.magazzino.taCartellini.updateQty(currUDC, MagClass.magazzino.CodSoggCurrUser, "U", codEventoUdcOut, qta); + // fix tablet + checkUpdateTablet(currUDC); + currUDC = ""; + currParticolare = ""; + grViewDest.SelectedIndex = -1; + doUpdate(); + } + /// + /// richiesta (ri)stampa UDC + /// + /// + /// + public void ristampa() + { + bool fatto = false; + fatto = MagClass.magazzino.ristampaUdc(udcReq, Postazione.printer, Request.UserHostName); + // registro ri-stampa UDC + if (fatto) MagClass.magazzino.taSAO.insertQuery(DateTime.Now, MagClass.magazzino.CodSoggCurrUser, Postazione.name, Postazione.IP, udcReq, "", "stampaUDC", string.Format("Ri-Stampato UDC Dtx {0} su linea {1}", currUDC, Postazione.currCodLinea)); + } + /// /// verifica visibilità btn stampa UDC /// private void verificaBtnStampa() { bool showBtnStampa = false; - // se ho ALMENO 1 UDC - DS_magazzino.V_statoCelleCapienzaAssegnatiRow riga; - bool hasUdc = false; - try + // se ho selezionato udc... + if (currUDC != "") { - riga = MagClass.magazzino.taStatoCelle.getByIdxCella(Postazione.currIdxCella)[0]; - if (riga.UdcAssegnati > 0) hasUdc = true; - } - catch - { - } - if (hasUdc) - { - // se ho num cesta... - if (numCesta != "") + DS_magazzino.v_A2U2DRow riga; + int qtaUDC = 0; + int qtaDtx = 0; + try { - showBtnStampa = true; + riga = MagClass.magazzino.taA2U2D.getByUDC(currUDC)[0]; + qtaUDC = Convert.ToInt32(riga.Qta); + qtaDtx = riga.QtaDtx; + } + catch + { } + if (qtaUDC > 0) + { + // se le qta voluta e dtx sono uguali... + if (qtaUDC == qtaDtx) + { + showBtnStampa = true; + } } } divNote.Visible = showBtnStampa; } /// - /// genera e stampa AL + /// fornisce in output la corretta classe css x icona + /// + /// + /// + /// + public string cssGlyphByQty(object _qta, object _qtaDtx) + { + string answ = "glyphicon glyphicon-pencil btn-lg"; + int qtaUDC = 0; + int qtaDtx = -1; + try + { + qtaUDC = Convert.ToInt32(_qta); + } + catch { } + try + { + qtaDtx = Convert.ToInt32(_qtaDtx); + } + catch { } + if (qtaUDC == qtaDtx) + { + answ = "glyphicon glyphicon-print btn-lg"; + } + return answ; + } + /// + /// effettua processo di sistemazione UDC e stampa /// /// /// - protected void lbtGeneraAl_Click(object sender, EventArgs e) + protected void lbtStampaUDC_Click(object sender, EventArgs e) { // verifico postazione sia valida... if (Postazione.name != "" && Postazione.IP != "" && Postazione.currCodCella != "") { - /* generazione e stampa AL */ - string AL = ""; + // in base ad AL sorgente e destinazione, fa le operazioni di update x UDC e poi lo stampa + bool fatto = false; string noteTrim = txtNote.Text.Trim(); - // creazione AL ed associazione UDC / spostamento... try { - AL = MagClass.magazzino.creaAssociaAlRxNt(tipoAL.AL_RxNt, Postazione.currCodCella, MagClass.magazzino.CodSoggCurrUser, DateTime.Now.Year, numCesta, noteTrim); + // update UDC! + fatto = MagClass.magazzino.liquidiFullUpdate(sourceAL, flussoAnc, currUDC, ddlImballi.SelectedValue, noteTrim, MagClass.magazzino.CodSoggCurrUser); } catch { } - // lancio stampa - MagClass.magazzino.stampaAL(AL, Postazione.printer, Request.UserHostName); - // registro creazione AL - MagClass.magazzino.taSAO.insertQuery(DateTime.Now, MagClass.magazzino.CodSoggCurrUser, Postazione.name, Postazione.IP, AL, "", "creaAL", string.Format("Creato AL RX su linea {0}, note: {1} ", Postazione.currCodLinea, noteTrim)); - Postazione.CssClass = "stileAttesa"; - Postazione.warningText = ""; - Postazione.messaggiText = traduci("cartAlStampato"); - txtCesta.Text = ""; - // resetto particolare... - currParticolare = ""; + if (fatto) + { + // lancio stampa + MagClass.magazzino.stampaUdc(currUDC, Postazione.printer, tipoCartellino.cartFinitiSP, Request.UserHostName); + // registro creazione AL + MagClass.magazzino.taSAO.insertQuery(DateTime.Now, MagClass.magazzino.CodSoggCurrUser, Postazione.name, Postazione.IP, currUDC, currParticolare, "stampaUDC", string.Format("Stampato UDC Dtx {0} su linea {1}, note: {2} ", currUDC, Postazione.currCodLinea, noteTrim)); + Postazione.CssClass = cssAtt; + Postazione.warningText = ""; + Postazione.messaggiText = traduci("cartAlStampato"); + // calcolo particolare completo di descrizione + DS_Applicazione.ElencoCartelliniRow riga = DataProxy.obj.taCartellini.stp_getByUdc(currUDC)[0]; + string particolare = string.Format("{0} - {1}", riga.Particolare, riga.DescParticolare); + // indico su tablet come fatto + sendUpdateTablet(currUDC, particolare, traduci("cartAlStampato"), qta.ToString(), qta.ToString(), "", cssOk, cssOk, cssOk); + // resetto... + grViewDest.SelectedIndex = -1; + qta = 0; + currUDC = ""; + } doUpdate(); } else { // ricarico che mi manca postazione! - Postazione.CssClass = "stileAttesa"; + Postazione.CssClass = cssAtt; Postazione.warningText = traduci("ERR-POS-001"); Postazione.messaggiText = ""; Response.Redirect(user_std.pagCorrente); } } - - protected void ods_Deleted(object sender, ObjectDataSourceStatusEventArgs e) + /// + /// udc da stampare + /// + protected string udcReq { - // aggiorno le qta! - qta = pezziUdc; + get + { + return memLayer.ML.StringSessionObj("udcSelSAO"); + } } + /// + /// Effettua update della pagina tablet RT collegata alla postazione liquidi + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + protected void sendUpdateTablet(string UDC, string particolare, string mess, string qtaIn, string qtaTot, string qtaRim, string css1, string css2, string css3) + { + if (memLayer.ML.confReadBool("updateTablet")) + { + try + { + string answ = SteamWare.urlUtils.callUrl(string.Format(@"{0}/MBC.aspx?txt01={1}&txt02={2}&txt03={3}&txt04={4}&txt05={5}&txt06={6}&css1={7}&css2={8}&css3={9}", memLayer.ML.confReadString("urlRT"), UDC, particolare, mess, qtaIn, qtaTot, qtaRim, css1, css2, css3), false); + } + catch (Exception exc) + { + logger.lg.scriviLog(string.Format("Errore in chiamata a pagina Tablet: {0}{1}", Environment.NewLine, exc)); + barcodeIn = ""; + } + } + } + /// + /// preseleziono (se possibile) imballo... + /// + /// + /// + protected void ddlImballi_DataBound(object sender, EventArgs e) + { + selezionaImballo(); + } + /// + /// seleziona imballo corretto + /// + private void selezionaImballo() + { + string codImb = ""; + // cerco se c'è un imballo x particolare corrente... + if (currParticolare != "") + { + codImb = lastCodImb; + } + else + { + codImb = memLayer.ML.cdv("CodImballoFiniti"); + } + try + { + // preseleziono + ddlImballi.SelectedValue = codImb; + } + catch + { } + } + } } \ No newline at end of file diff --git a/GMW/WebUserControls/mod_PostFin_DT.ascx.designer.cs b/GMW/WebUserControls/mod_PostFin_DT.ascx.designer.cs index c2d0b6ab..0e4fc437 100644 --- a/GMW/WebUserControls/mod_PostFin_DT.ascx.designer.cs +++ b/GMW/WebUserControls/mod_PostFin_DT.ascx.designer.cs @@ -31,58 +31,76 @@ namespace GMW.WebUserControls { protected global::Microsoft.AspNet.Web.Optimization.WebForms.BundleReference BundleReference2; /// - /// Controllo grView. + /// Controllo divAL. /// /// /// Campo generato automaticamente. /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. /// - protected global::System.Web.UI.WebControls.GridView grView; + protected global::System.Web.UI.HtmlControls.HtmlGenericControl divAL; /// - /// Controllo ods. + /// Controllo lblAL. /// /// /// Campo generato automaticamente. /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. /// - protected global::System.Web.UI.WebControls.ObjectDataSource ods; + protected global::System.Web.UI.WebControls.Label lblAL; /// - /// Controllo lblIdxCella. + /// Controllo grViewSource. /// /// /// Campo generato automaticamente. /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. /// - protected global::System.Web.UI.WebControls.Label lblIdxCella; + protected global::System.Web.UI.WebControls.GridView grViewSource; /// - /// Controllo lblNumRec. + /// Controllo odsAL. /// /// /// Campo generato automaticamente. /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. /// - protected global::System.Web.UI.WebControls.Label lblNumRec; + protected global::System.Web.UI.WebControls.ObjectDataSource odsAL; /// - /// Controllo lblDTFus. + /// Controllo lbtPrendeCaricoAL. /// /// /// Campo generato automaticamente. /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. /// - protected global::System.Web.UI.WebControls.Label lblDTFus; + protected global::System.Web.UI.WebControls.LinkButton lbtPrendeCaricoAL; /// - /// Controllo lblLinFus. + /// Controllo lbtChiudiAL. /// /// /// Campo generato automaticamente. /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. /// - protected global::System.Web.UI.WebControls.Label lblLinFus; + protected global::System.Web.UI.WebControls.LinkButton lbtChiudiAL; + + /// + /// Controllo div1. + /// + /// + /// Campo generato automaticamente. + /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl div1; + + /// + /// Controllo chkDtxMode. + /// + /// + /// Campo generato automaticamente. + /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. + /// + protected global::System.Web.UI.HtmlControls.HtmlInputCheckBox chkDtxMode; /// /// Controllo lblParticolareAttivo. @@ -157,22 +175,49 @@ namespace GMW.WebUserControls { protected global::System.Web.UI.WebControls.TextBox txtNote; /// - /// Controllo lbtGeneraAl. + /// Controllo lbtStampaUDC. /// /// /// Campo generato automaticamente. /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. /// - protected global::System.Web.UI.WebControls.LinkButton lbtGeneraAl; + protected global::System.Web.UI.WebControls.LinkButton lbtStampaUDC; /// - /// Controllo lbtGeneraUDC. + /// Controllo lblDestAL. /// /// /// Campo generato automaticamente. /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. /// - protected global::System.Web.UI.WebControls.LinkButton lbtGeneraUDC; + protected global::System.Web.UI.WebControls.Label lblDestAL; + + /// + /// Controllo grViewDest. + /// + /// + /// Campo generato automaticamente. + /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. + /// + protected global::System.Web.UI.WebControls.GridView grViewDest; + + /// + /// Controllo odsDestAL. + /// + /// + /// Campo generato automaticamente. + /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. + /// + protected global::System.Web.UI.WebControls.ObjectDataSource odsDestAL; + + /// + /// Controllo divQta. + /// + /// + /// Campo generato automaticamente. + /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl divQta; /// /// Controllo txtQta. @@ -184,21 +229,48 @@ namespace GMW.WebUserControls { protected global::System.Web.UI.WebControls.TextBox txtQta; /// - /// Controllo lbtAddUdc. + /// Controllo lbtUpdQty. /// /// /// Campo generato automaticamente. /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. /// - protected global::System.Web.UI.WebControls.LinkButton lbtAddUdc; + protected global::System.Web.UI.WebControls.LinkButton lbtUpdQty; /// - /// Controllo txtCesta. + /// Controllo divImballi. /// /// /// Campo generato automaticamente. /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. /// - protected global::System.Web.UI.WebControls.TextBox txtCesta; + protected global::System.Web.UI.HtmlControls.HtmlGenericControl divImballi; + + /// + /// Controllo lblPart. + /// + /// + /// Campo generato automaticamente. + /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. + /// + protected global::System.Web.UI.WebControls.Label lblPart; + + /// + /// Controllo ddlImballi. + /// + /// + /// Campo generato automaticamente. + /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. + /// + protected global::System.Web.UI.WebControls.DropDownList ddlImballi; + + /// + /// Controllo odsImballi. + /// + /// + /// Campo generato automaticamente. + /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. + /// + protected global::System.Web.UI.WebControls.ObjectDataSource odsImballi; } }