using SteamWare; using System; using System.Collections.Generic; using System.Data; using System.Linq; namespace GMW_data { public class UserControlBCodeMan : GMW_data.UserControl { /// /// Oggetto locale gestione classe datamatrix... /// protected DataMatrix DataMatrix_mgr = new DataMatrix(); #region Conf stili css /// /// stile css comando OK /// public string cssOk = "stileComandoOk"; /// /// stile css comando KO /// public string cssErr = "stileComandoKo"; /// /// stile css comando ND /// public string cssWait = "stileComandoND"; /// /// stile css comando ATTESA /// public string cssAtt = "stileAttesa"; /// /// stile css comando warning /// public string cssWarn = "stileComandoWarn"; /// /// stile css comando ADD /// public string cssAdd = "stileComandoAdd"; #endregion #region area base comune (variabili, valori eventi - stati - tipi - posizioni) /// /// Abilitato/disabilitato BCode particolare /// public bool enableBCodeParticolare = true; /// /// flusso associato al controllo /// public string flusso = ""; /// /// flusso PRECEDENTE (ancestor) associato al controllo /// public string flussoAnc = ""; /// /// flusso associato (hard coded) a temporaneo /// public string flussoTemp = ""; /// /// stato associato all'UDC da CREARE /// public string statoUDC = ""; /// /// stato associato all'UDC da accettare /// public string statoUDC_pre = ""; /// /// tipo di evento associato alla creazione dell'UDC /// public string eventoUDC = ""; /// /// tipo di evento associato alla modifica qta dell'UDC /// public string eventoUDC_qta = ""; /// /// codice evento dell'UDC temporaneo (IN) che si crea /// public string eventoUDC_temp = ""; /// /// attributo per TRATTAMENTO termico /// public string attrNumTra = ""; /// /// flusso associato al TRATTAMENTO termico /// public string flusso_TR = ""; /// /// nome var in sessione x IdxCella /// public string sVarIdxCella = ""; /// /// dati x verifica CodSoggetto / matricola /// public string preCodSogg = memLayer.ML.cdv("prefCodSogg"); /// /// Qta Imballo standard /// public int QtaImballoStd = memLayer.ML.cdvi("QtaImballoFiniti"); /// /// codImballo standard /// public string CodImballoStd = memLayer.ML.cdv("CodImballoFiniti"); /// /// Codice linea non utilizzabile ("00" finale = Select...) /// public string codLineaKo = ""; /// /// Tipo UDC della linea x gestione messaggio (es log, ristampa, ...) /// public string tipoUdcLinea = ""; /// /// IdxPosizione x UDC in ingresso /// public int IdxPosizioneIn = 0; /// /// IdxPosizione x UDC in uscita /// public int IdxPosizioneOut = 0; /// /// NOME IdxPosizione x UDC in uscita al momento della creazione /// public string IdxPosizioneOutTempName = ""; /// /// IdxPosizione x UDC in uscita al momento della creazione /// public int IdxPosizioneOutTemp = 0; /// /// Cartellino da stampare/ristampare /// public tipoCartellino tipoCartCurr = tipoCartellino.cartND; #endregion #region area base comune (metodi generali) /// /// livello di log richiesto (web.config) /// public int logLevel { get { int answ = 0; try { answ = memLayer.ML.CRI("_logLevel"); } catch { } return answ; } } /// /// Impostazione variabili specifiche /// public virtual void setupVariabili() { } /// /// caricamento pagina /// /// /// public virtual void Page_Load(object sender, EventArgs e) { setupVariabili(); if (!Page.IsPostBack) { Postazione.messaggiText = ""; Postazione.warningText = ""; qta = 0; // imposto destAL destAL = AlByCella; traduciObj(); idxCella = Postazione.currIdxCella; checkNumKeyIn(); setVisibility(); } doChecks(); } /// /// sistema modalità input /// public virtual void setVisibility() { } /// /// IDX cella associata alla linea corrente /// public virtual int idxCella { get { int answ = 0; if (memLayer.ML.isInSessionObject(sVarIdxCella)) { answ = memLayer.ML.IntSessionObj(sVarIdxCella); } return answ; } set { memLayer.ML.setSessionVal(sVarIdxCella, value); } } /// /// Codice AL associato alla cella corrente... /// public virtual 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, "", "", "", 0); } } catch { } return answ; } } /// /// Codice AL sulla linea... /// public string currAL { get { string answ = ""; try { answ = MagClass.magazzino.taAL.getByKey(Postazione.currCodLinea)[0].CurrVal; } catch { } return answ; } set { MagClass.magazzino.taAL.updateCurrVal(Postazione.currCodLinea, value); } } /// /// Formato Datamatrix della linea selezionata /// public string FormatoDtmxLinea { get { string answ = ""; try { answ = MagClass.magazzino.taAL.getByKey(Postazione.currCodLinea)[0].FormatoDtmx; } catch { } return answ; } } /// /// Formato Datamatrix dell'ultimo Datamatrix letto (come barcode) /// public string FormatoDtmxBarcode { get { return FormatoDtmxDecod(barcodeIn); } } /// /// decodifica formato Datamatrix /// public string FormatoDtmxDecod(string datamatrix) { string answ = ""; try { answ = DataMatrix_mgr.taVerifica.GetData(datamatrix)[0].FormatoDtmx; } catch { } return answ; } /// /// Formato Datamatrix da particolare (tab TrascDatamatrix) /// public string FormatoDtmxPartic(string Particolare) { string answ = ""; try { answ = DataMatrix_mgr.taTDtmx.getByParticolare(Particolare)[0].FormatoDtmx; } catch { } return answ; } /// /// codice particolare da datamatrix /// /// boolean: /// true = utilizza lookUp su tabella dati acquisiti /// false = prova a decodificare (da formato Dtmx linea) /// protected string partByDtmx(bool byTable) { string answ = ""; if (byTable) { answ = DataMatrix_mgr.taDtxAcquisiti.getByKey(barcodeIn)[0].Particolare; } else { answ = DataMatrix_mgr.taDecode.GetData(barcodeIn, FormatoDtmxLinea)[0].Particolare; } return answ; } /// richiesta (ri)stampa UDC /// /// /// public virtual void ristampa() { ristampaUdc(tipoUdcLinea, udcReq); } /// /// Richiesta (ri)stampa UDC /// /// Tipo Udc (x messaggio log/SAO) /// Codice UDC public virtual void ristampaUdc(string tipoUdc, string udcReq) { bool fatto = false; // registro ri-stampa UDC DateTime adesso = DateTime.Now; // calcolo particolare... DS_magazzino.ElencoCartelliniRow rigaUDC; string particolare = ""; try { rigaUDC = MagClass.magazzino.taCartellini.getByUdc(udcReq)[0]; particolare = rigaUDC.Particolare; fatto = MagClass.magazzino.ristampaUdc(udcReq, Postazione.printer, Request.UserHostName); } catch { logger.lg.scriviLog(string.Format("Errore recupero particolare UDC {0} ({1})", udcReq, tipoUdc), tipoLog.EXCEPTION); } if (fatto) MagClass.magazzino.taSAO.insertQuery(adesso, MagClass.magazzino.CodSoggCurrUser, Postazione.name, Postazione.IP, udcReq, particolare, "stampaUDC", string.Format("Ri-Stampato UDC {0} ({1}) su linea {2}", udcReq, tipoUdc, Postazione.currCodLinea)); raiseEvent(ucEvType.ReqUpdateParent); } /// /// udc da stampare /// public virtual string udcReq { get { return memLayer.ML.StringSessionObj("udcSelSAO"); } } /// /// indica il codice articolo correntemente selezionato /// public virtual 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")); } } /// /// Codice AL in carico /// public virtual string sourceAL { get { return ""; } set { } } /// /// Codice AL target /// public virtual string destAL { get { return ""; } set { } } /// /// indica il codice articolo "originale" in caso di trascodifica GRZ/GRZ o GRZ/LVT o LVT/LVT /// public virtual string origParticolare { get { return memLayer.ML.StringSessionObj(string.Format("origParticolare_{0}", uid)); } set { memLayer.ML.setSessionVal(string.Format("origParticolare_{0}", uid), value, memLayer.ML.confReadBool("keepParticolareSel")); } } /// /// indica UDC correntemente selezionato /// public virtual 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")); } } /// /// Recupera descrizione e disegno dato un particolare /// /// /// /// public virtual void getDescrDisegnoParticolare(string CodParticolare, ref string descr, ref string disegno) { try { DS_magazzino.AnagParticolariRow riga = MagClass.magazzino.taAnagPart.likeSearch(CodParticolare, CodCs)[0]; descr = riga.DescParticolare; disegno = string.Format("( {0} )", riga.DisegnoGrezzo); } catch { } } /// /// effettua controlli visibilità /// public virtual void doChecks() { checkBarcode(); checkStampa(); checkParticolare(); } /// /// controllo l'abilitazione alla stampa UDC: /// - particolare ok /// - qta > 0 /// - udc da consumo totale/parziale /// altrimenti disabilito btn stampa /// public virtual void checkStampa() { } /// /// controlla particolare selezionato /// public virtual void checkParticolare() { } /// /// valore barcode /// public virtual string barcodeIn { get { return ""; } set { } } /// /// valore barcode /// public virtual DateTime lastCall { get { DateTime answ = DateTime.Now.AddHours(-1); try { if (memLayer.ML.isInSessionObject(string.Format("lastCall_", uid))) { answ = memLayer.ML.DateTimeSessionObj(string.Format("lastCall_", uid)); } } catch { } return answ; } set { memLayer.ML.setSessionVal(string.Format("lastCall_", uid), value); } } /// /// valore barcode /// public virtual string lastBarcodeIn { get { return memLayer.ML.StringSessionObj(string.Format("lastBarcode_{0}", uid)); } set { memLayer.ML.setSessionVal(string.Format("lastBarcode_{0}", uid), value, false); } } /// /// verifico se ci sia in sessione un input da NumKeyb e nel caso lo metto in barcodeIn e processo... /// public virtual void checkNumKeyIn() { if (memLayer.ML.isInSessionObject("numKeyIn")) { barcodeIn = memLayer.ML.StringSessionObj("numKeyIn"); // svuoto valore in sessione... memLayer.ML.emptySessionVal("numKeyIn"); // controllo barcode... checkBarcode(); } } /// /// cod imballo dell'ultimo UDC del particolare generato /// public virtual string lastCodImb { get { string answ = ""; try { answ = MagClass.magazzino.taCartellini.getLastByParticolareStato(CodCs, currParticolare, statoUDC, false)[0].CodImballo; } catch { answ = CodImballoStd; } return answ; } } /// /// num pezzi dell'ultimo UDC del particolare generato /// public virtual int pezziUdc { get { int answ = 0; try { answ = (int)MagClass.magazzino.taCartellini.getLastByParticolareStato(CodCs, currParticolare, statoUDC, false)[0].Qta; } catch { answ = QtaImballoStd; } return answ; } } /// /// qta pezzi TOTALE /// public virtual int qta { get { return 0; } set { } } /// /// Note Utente /// public virtual string campoNote { get { return ""; } set { } } /// /// Imballo selezionato /// public virtual string imballoSel { get { return ""; } set { } } /// /// Metodo aggiornamento qta /// public virtual void aggiornaQta() { MagClass.magazzino.taCartellini.updateQty(currUDC, MagClass.magazzino.CodSoggCurrUser, "U", eventoUDC_qta, qta); currUDC = ""; currParticolare = ""; } /// /// effettua reset dati /// public virtual void doResetData() { // resetto i dati QtaTot e particolare... qta = 0; currParticolare = ""; doChecks(); } /// /// verifica se attivo filtro company e imposta ods di conseguenza... /// public virtual void checkFixOds() { } /// /// aggiorna tabella + focus a barcode /// public virtual void doUpdate() { idxCella = Postazione.currIdxCella; destAL = AlByCella; setVisibility(); checkStampa(); // altri step in versione specifica } /// /// imposto i dati dal particolare corrente /// public virtual void impostaParticolare() { // controllo esista il particolare scansionato if (DataProxy.obj.taAnagParticolari.getByParticolare(currParticolare).Rows.Count == 0) { currParticolare = ""; Postazione.messaggiText += " - codice particolare non valido / non trovato in RILPRO."; Postazione.CssClass = cssErr; } else { Postazione.messaggiText += " - impostato particolare!"; Postazione.CssClass = cssOk; } // 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("QtaImballoFiniti"); } selezionaImballo(); } /// /// metodo stub selezione imballo /// public virtual void selezionaImballo() { try { if (lastCodImb != "") { if (!trySetImballo(lastCodImb)) { // preseleziono imballoSel = CodImballoStd; } } else { // preseleziono imballoSel = CodImballoStd; } } catch { } } /// /// determina se sia possibile cancellare un record, se qta > 0 /// /// /// public virtual bool canDelete(object _qta) { bool answ = false; try { answ = Convert.ToInt32(_qta) == 0; } catch { } return answ; } /// /// fornisce in output la corretta classe css x icona /// /// /// public virtual string cssGlyphByQty(object _qta) { string answ = "fa fa-pencil"; int qtaUDC = 0; try { qtaUDC = Convert.ToInt32(_qta); } catch { } if (qtaUDC > 0) { answ = "fa fa-print"; } return answ; } /// /// calcola il codice imballo da ultimo oppure da DB/webconfig /// /// /// public virtual string codImballo(string confBaseVal) { string answ = ""; // cerco se c'è un imballo x particolare corrente... if (currParticolare != "") { answ = lastCodImb; } else { answ = memLayer.ML.cdv(confBaseVal); } return answ; } /// /// effettua consumo UDC /// /// public virtual void consumaUdc(string oldUdc) { // se UDC è NON vuoto ed esiste if (oldUdc != "" && MagClass.magazzino.checkUDC(oldUdc)) { // se è consumabile (IdxPosizione > 0)... if (MagClass.magazzino.udcMpIsConsumabile(oldUdc)) { // consumo UDC MagClass.magazzino.scaricaUdcMpWip(oldUdc, Request.UserHostName); } } } /// /// effettua refresh (su db) del blocco postazione /// /// public virtual void refreshBloccoPost(string codLinea) { // resetto usi linee precedenti.. MagClass.magazzino.taAL.resetPost(Postazione.name); // se la linea non è "base" = "Sel linea", finisce x "0" if (codLinea.Substring(codLinea.Length - 1) != "0") { // salvo su DB che sto occupando linea... MagClass.magazzino.taAL.updatePost(codLinea, Postazione.name); } } #endregion #region area metodi interazione controlli /// /// update Qty x UDC selezionato... /// /// /// public virtual void lbtUpdQty_Click(object sender, EventArgs e) { aggiornaQta(); } /// /// Imposta ultima quantità rilevata /// /// /// public virtual void lbtSetLastQty_Click(object sender, EventArgs e) { // indico ultima qta qta = pezziUdc; // salvo!!! aggiornaQta(); } /// /// reset della selezione /// /// /// public virtual void btnReset_Click(object sender, EventArgs e) { qta = 0; currUDC = ""; currParticolare = ""; setVisibility(); doUpdate(); } /// /// evento cambio qta /// /// /// public virtual void txtQta_TextChanged(object sender, EventArgs e) { aggiornaQta(); } public virtual void grView_PageIndexChanged(object sender, EventArgs e) { // fix dell'ODS checkFixOds(); } public virtual void grViewSource_PageIndexChanged(object sender, EventArgs e) { // fix dell'ODS checkFixOds(); } public virtual void grView_Sorted(object sender, EventArgs e) { // fix dell'ODS checkFixOds(); } /// /// aggiorno ods al binding.. /// /// /// public virtual void ods_DataBinding(object sender, EventArgs e) { // fix dell'ODS checkFixOds(); } /// /// svuoto le note /// /// /// public virtual void btnEmptyNote_Click(object sender, EventArgs e) { campoNote = ""; Postazione.messaggiText = traduci("AttesaBCode"); Postazione.warningText = ""; Postazione.CssClass = cssAtt; // raise dell'evento raiseEvent(ucEvType.ReqUpdateParent); } /// /// preseleziono (se possibile) imballo... /// /// /// public virtual void ddlImballi_DataBound(object sender, EventArgs e) { if (!Page.IsPostBack) { selezionaImballo(); } } /// /// sistemazione labels, traduzioni e valori default oggetti /// public virtual void traduciObj() { // txtBox qta = memLayer.ML.cdvi("QtaImballoFiniti"); } /// /// controlla se ci sia un barcode /// public virtual void checkBarcode() { if (barcodeIn != "") { Postazione.messaggiText = string.Format("Barcode digitato: {0}", barcodeIn); Postazione.warningText = ""; switch (MagClass.tipoBCode_L3(barcodeIn)) { case tipoCodiceBarcode.Comando: if (barcodeIn == memLayer.ML.cdv("cmdReset")) { currParticolare = ""; Response.Redirect(PagCorrente); } break; case tipoCodiceBarcode.Imballo: trySetImballo(barcodeIn); break; case tipoCodiceBarcode.Particolare: if (enableBCodeParticolare) { // imposto il particolare corrente currParticolare = barcodeIn; origParticolare = barcodeIn; impostaParticolare(); } else { Postazione.messaggiText += traduci("ErrBcd_PartDisabled"); Postazione.CssClass = cssWait; } break; case tipoCodiceBarcode.UDC: processBCodeUdc(); // update doUpdate(); break; case tipoCodiceBarcode.Operatore: // calcolo matricola utente int MatrUtente = -1; string preCodSogg = memLayer.ML.cdv("prefCodSogg"); if (barcodeIn.StartsWith(preCodSogg)) { MatrUtente = DataProxy.obj.taTrascSogg.getByKey(barcodeIn, 0)[0].CodMatricola; } else { MatrUtente = Convert.ToInt32(barcodeIn); } if (MatrUtente >= 0) { // salvo in sessione operatore con AUTH OpAuth.startOpAuth(MatrUtente); // mostro che ho autorizzato... Postazione.messaggiText += traduci("userAuthRec"); Postazione.CssClass = cssOk; Response.Redirect(user_std.pagCorrente); } else { Postazione.messaggiText += " - codice non riconosciuto!"; Postazione.CssClass = cssWait; } break; default: // cerco se sia "0" = reset utente... if (barcodeIn == memLayer.ML.CRS("resetCodSogg")) { // salvo in sessione operatore con AUTH OpAuth.stopAuth(); // mostro che ho autorizzato... Postazione.messaggiText += traduci("userAuthRem"); Postazione.CssClass = cssOk; Response.Redirect(user_std.pagCorrente); } Postazione.messaggiText += " - codice non riconosciuto!"; Postazione.CssClass = cssWait; break; } barcodeIn = ""; lastBarcodeIn = "-"; } else { if (string.IsNullOrEmpty(lastBarcodeIn)) { Postazione.messaggiText = traduci("AttesaBCode"); Postazione.warningText = ""; Postazione.CssClass = cssAtt; } lastBarcodeIn = ""; } doUpdate(); } /// /// Pre-processing di un barcode tipo UDC /// public virtual void processBCodeUdc() { // se linea non selezionata ERRORE!!! if (Postazione.currCodLinea == codLineaKo) { Postazione.messaggiText += " - Attenzione, IMPOSTARE LINEA!"; Postazione.CssClass = cssErr; } else { // procedo solo se UDC esistente if (MagClass.magazzino.checkUDC(barcodeIn)) { // controllo se NON ci siano NC "pending" if (MagClass.magazzino.checkUDC_NC(barcodeIn) != checkUdcNc.HasNc) { string tipoLinea = ""; if (Postazione.currNomeLinea.IndexOf("GRZ") >= 0) { tipoLinea = "GRZ"; } else if (Postazione.currNomeLinea.IndexOf("LVT") >= 0) { tipoLinea = "LVT"; } else if (Postazione.currNomeLinea.IndexOf("FSC") >= 0) { tipoLinea = "FSC"; } else if (Postazione.currNomeLinea.IndexOf("LM - ") >= 0) { tipoLinea = "LM"; } else if (Postazione.currNomeLinea.IndexOf("LS - ") >= 0) { tipoLinea = "LS"; } else { tipoLinea = "ND"; } /******************************************************************** * procedo per UDC in ingresso: * - deve essere di tipo IN * - se NON c'è UDC in AL dest a pari particolare LO CREO * - se c'era già UDC per lo stesso particolare --> consumo (il vecchio) * - associo UDC letto ad UDC in AL dest a pari particolare * ********************************************************************/ // controllo IdxPosizione dell'UDC e confronto con posizione in webconfig x trattati (pre lavorazioni meccaniche) int IdxPosizione = DataProxy.obj.taCartellini.stp_getByUdc(barcodeIn)[0].IdxPosizione; if (IdxPosizione == IdxPosizioneIn) { // calcolo nuovo particolare origParticolare = DataProxy.obj.taCartellini.stp_getByUdc(barcodeIn)[0].Particolare; // verifico che il particolare NON SIA in veto... if (checkPartVetoByLinea(origParticolare)) { Postazione.messaggiText += $" - Attenzione, PARTICOLARE {origParticolare} NON ATTIVATO / NON PERMESSO sulla LINEA!"; Postazione.CssClass = "stileComandoKo"; } else { // chiamo sempre stored x recuperare GRZ da GRZ (solo alcuni) o LVT da GRZ o LVT da LVT (supercubati) // calcolo particolare OUT da Distinta Base string partOut = ""; MagClass.magazzino.taPartIO.particolareLVTFromGRZ(tipoLinea, origParticolare, CodCs, ref partOut); currParticolare = partOut; // continuo controlli if (currParticolare != "") { int idxCellaCurr = 0; try { idxCellaCurr = MagClass.magazzino.taPosUdcCorr.getByUDC(barcodeIn)[0].IdxCella; } catch { } string codBloccoCurr = ""; int idxBlocco = 0; try { idxBlocco = MagClass.magazzino.taCelle.getByIdxCella(idxCellaCurr)[0].IdxBlocco; codBloccoCurr = MagClass.magazzino.taBlocchi.getByIdx(idxBlocco)[0].CodBlocco; } catch { } // 2015.01.12 controllo UDC non già su altre postazioni... if (codBloccoCurr == Postazione.currCodBlocco && idxCellaCurr != Postazione.currIdxCella) { Postazione.messaggiText += " - Attenzione, UDC già caricato su ALTRA LINEA!"; Postazione.CssClass = cssErr; } else { processUdcInOut(idxCellaCurr, false, true); } } else // non trovo part LVT { Postazione.messaggiText += traduci("ERR-LVT-001"); Postazione.CssClass = cssErr; } } } // controllo SE PER CASO ci fosse NC e ci sia stata deroga, cambio MSG... if (MagClass.magazzino.checkUDC_NC(barcodeIn) == checkUdcNc.ChkDis_HasNc) { Postazione.CssClass = cssErr; Postazione.messaggiText += string.Format("
{0}", traduci("ERR-NC-001")); // recupero l'NC associata... Postazione.warningText += string.Format("
{0}", MagClass.magazzino.getDescrNc2Udc(barcodeIn)); } } else { Postazione.CssClass = cssErr; Postazione.messaggiText += string.Format("
{0}", traduci("ERR-NC-001")); // recupero l'NC associata... Postazione.warningText += string.Format("
{0}", MagClass.magazzino.getDescrNc2Udc(barcodeIn)); } } } } /// /// Processa UDC nuovo (eventualmente creando) e vecchio (eventualmente consumando) /// /// /// Forza lo spostamento a idxCella corrente... /// indica se si debba creare UDC in uscita se mancasse... /// public virtual void processUdcInOut(int idxCellaCurr, bool forceMove, bool createUdcOut) { verificaAssociaUdcParentChild(barcodeIn, forceMove, createUdcOut); // controllo se UDC non sia già stato spostato in posizione... dsMagazzino, posizUdcCorrente, getByUdc if (idxCellaCurr == Postazione.currIdxCella) { Postazione.messaggiText += " - Attenzione, UDC già caricato!"; Postazione.CssClass = cssErr; } else { // verifico per eventuale consumo vecchio UDC... cerco nella posizione DS_magazzino.v_UdcDetailDataTable tabUdcDet = null; try { // cerco nella posizione tabUdcDet = MagClass.magazzino.taDettUDC.getUdcDetailByIdxCella(idxCella); } catch { } // carico UDC letto in cella... DateTime adesso = DateTime.Now; string noteTrim = Postazione.currNomeLinea; // cerco se NON ci sia l'UDC letto... if (tabUdcDet.Select(string.Format("UDC = '{0}'", barcodeIn)).Length == 0) { processUdcOut(tabUdcDet, adesso, noteTrim); } Postazione.CssClass = cssOk; } } /// /// verifica se ci sia udcDest, se necessario crea ed associa a parent, e restituisce udcDest /// /// UDC Parent /// Forza lo spostamento a idxCella corrente... /// indica se si debba creare UDC in uscita se mancasse... /// public string verificaAssociaUdcParentChild(string udcParent, bool forceMove, bool createUdcOut) { // controllo SE esista già UDC in AL dest... altrimenti CREO!!! string udcDest = checkCreaUDC(forceMove, createUdcOut); if (udcDest != "") { // verifico che NON SIA GIA' associato... bool udcGiaAssociato = false; try { udcGiaAssociato = MagClass.magazzino.checkAssociazioneUdcParent(udcDest, udcParent); } catch { } if (!udcGiaAssociato) { // associo UDC con quello di destinazione SE NECESSARIO MagClass.magazzino.associaUdcParent(udcDest, udcParent, true); } } return udcDest; } /// /// Processing del vecchio UDC (eventualmente consumando) /// /// /// /// public virtual void processUdcOut(DS_magazzino.v_UdcDetailDataTable tabUdcDet, DateTime adesso, string noteTrim) { string oldUdc = ""; try { oldUdc = ((DS_magazzino.v_UdcDetailRow)tabUdcDet.Select(string.Format("Particolare = '{0}' AND IdxPosizione = {1}", origParticolare, IdxPosizioneIn))[0]).UDC; } catch { } // se trovo un altro UDC dello stesso particolare... if (oldUdc != "") { // consumo UDC consumaUdc(oldUdc); } // se ho cod cella sposto UDC in nuova posizione! MagClass.magazzino.spostaUDC(CodCs, barcodeIn, Postazione.currIdxCella, memLayer.ML.CRB("spostaUdcResettaLdp"), Request.UserHostName); // registro spostamento UDC MagClass.magazzino.taSAO.insertQuery(adesso, MagClass.magazzino.CodSoggCurrUser, Postazione.name, Postazione.IP, barcodeIn, currParticolare, "spostaUDC", string.Format("Caricato UDC {3} su linea {2}, qta: {0} {1} ", qta, noteTrim, Postazione.currCodLinea, tipoUdcLinea)); } /// /// segnaposto gestione creazione opzionale UDC /// /// Forza lo spostamento a idxCella corrente... /// indica se si debba creare UDC in uscita se mancasse... public virtual string checkCreaUDC(bool forceMove, bool createUdcOut) { string udcDest = ""; bool checkDone = true; DateTime adesso = DateTime.Now; MagClass geMag = new MagClass(); // verifico se ho già quel particolare tra quelli dell'AL... try { DS_magazzino.ElencoCartelliniDataTable tabCart; if (memLayer.ML.CRB("disable_singleton")) { tabCart = geMag.taCartellini.getByParticolareAL(currParticolare, destAL); } else { tabCart = MagClass.magazzino.taCartellini.getByParticolareAL(currParticolare, destAL); } if (tabCart.Rows.Count > 0) { udcDest = tabCart[0].UDC; } } catch (Exception exc) { checkDone = false; logger.lg.scriviLog(string.Format("Errore in ricerca UDC DEST x UDC temp {2}: {0}{1}", Environment.NewLine, exc, tipoUdcLinea)); udcDest = ""; } if (createUdcOut && checkDone) { if (string.IsNullOrEmpty(udcDest)) { try { // creo nuovo UDC FI... in posizione TEMP e con un evento differente... if (memLayer.ML.CRB("disable_singleton")) { udcDest = geMag.creaUdc(flusso, "", currParticolare, "", "", "", "", "", 0, lastCodImb, "U", MagClass.magazzino.CodSoggCurrUser, qta, 0, 0, adesso, 0, statoUDC, IdxPosizioneOutTemp, IdxPosizioneOutTempName, eventoUDC, "", "", adesso.Year, Request.UserHostName); // associo UDC a AL... geMag.taAL2UDC.Insert(destAL, udcDest, adesso, MagClass.magazzino.CodSoggCurrUser); } else { udcDest = MagClass.magazzino.creaUdc(flusso, "", currParticolare, "", "", "", "", "", 0, lastCodImb, "U", MagClass.magazzino.CodSoggCurrUser, qta, 0, 0, adesso, 0, statoUDC, IdxPosizioneOutTemp, IdxPosizioneOutTempName, eventoUDC, "", "", adesso.Year, Request.UserHostName); // associo UDC a AL... MagClass.magazzino.taAL2UDC.Insert(destAL, udcDest, adesso, MagClass.magazzino.CodSoggCurrUser); } if (forceMove) { if (memLayer.ML.CRB("disable_singleton")) { // se UDC NON in cella corrente lo sposto in nuova posizione! geMag.spostaUDC(CodCs, udcDest, Postazione.currIdxCella, memLayer.ML.CRB("spostaUdcResettaLdp"), Request.UserHostName); } else { // se UDC NON in cella corrente lo sposto in nuova posizione! MagClass.magazzino.spostaUDC(CodCs, udcDest, Postazione.currIdxCella, memLayer.ML.CRB("spostaUdcResettaLdp"), Request.UserHostName); } } } catch (Exception exc) { logger.lg.scriviLog(string.Format("Errore in creazione UDC temp {2}: {0}{1}", Environment.NewLine, exc, tipoUdcLinea)); } } if (udcDest != "") { Postazione.CssClass = cssAtt; Postazione.warningText = ""; Postazione.messaggiText = traduci("partAdded"); } else { Postazione.CssClass = cssErr; Postazione.warningText = traduci("ErroreUdcDest"); } } return udcDest; } /// /// tenta di impostare l'imballo al valore indicato altrimenti mostra errore /// /// public virtual bool trySetImballo(string valore) { bool fatto = false; // cerco di selezionare! try { imballoSel = valore; fatto = true; } catch { Postazione.warningText = traduci("ERR-IMB-001"); Postazione.CssClass = cssErr; } return fatto; } /// /// segnaposto gestione button stampa /// /// public virtual void btnStampa_Click(object sender, EventArgs e) { bool needsRedirect = false; string[] stringSeparators = new string[] { "#" }; // verifico postazione x procedere... if (Postazione.printer != "n.d.") { // verifico auth utente OPPURE se NON sia richiesta... if (OpAuth.isAuth || !OpAuth.opAuthReq) { DateTime adesso = DateTime.Now; // effettuo controlli che cod_soggetto, cod particolare e destAL siano disponibili... if (MagClass.magazzino.CodSoggCurrUser != "" && currParticolare != "" && destAL != "ALF00") { string codImballo = ""; try { codImballo = imballoSel; } catch { codImballo = CodImballoStd; } // se NON HA selezionato prendo default... if (string.IsNullOrEmpty(codImballo) || codImballo == "-") { codImballo = CodImballoStd; } string noteCompl = string.Format("{0}{1}{2}", Postazione.currNomeLinea, Environment.NewLine, campoNote); try { // aggiorno note e posizione da temp a definitivo x UDC... MagClass.magazzino.updateNotePosizioneDataImballoUDC(currUDC, noteCompl, IdxPosizioneOut, DateTime.Now, codImballo); if (OpAuth.isAuth) { // salvo attributo dell'OpAuth... MagClass.magazzino.taAtt2UDC.Insert(currUDC, memLayer.ML.CRS("attrOpAuth"), OpAuth.currAuth.CodSoggetto, DateTime.Now, MagClass.magazzino.CodSoggCurrUser); // consumo una auth... OpAuth.currAuth.remAuth--; if (OpAuth.currAuth.remAuth == 0) { OpAuth.stopAuth(); needsRedirect = true; } } } catch (Exception exc) { httpLog(string.Format("Errore creazione UDC {0}:{1}{2}", tipoUdcLinea, Environment.NewLine, exc), tipoLog.EXCEPTION); } // tolgo UDC da AL corrente... MagClass.magazzino.taAL2UDC.deleteQuery(destAL, currUDC); // ora stampo il nuovo cartellino nel formato impostato MagClass.magazzino.stampaUdc(currUDC, Postazione.printer, tipoCartCurr, Request.UserHostName); // incremento timing... adesso = adesso.AddSeconds(2); // registro stampa nuovo UDC MagClass.magazzino.taSAO.insertQuery(adesso, MagClass.magazzino.CodSoggCurrUser, Postazione.name, Postazione.IP, currUDC, currParticolare, "stampaUDC", "Stampato UDC FINITO"); // 2016.06.15 modifica per creare subito un NUOVO UDC connesso a quello in origine... QTA 0 !!! string udcParent = ""; // recupero parent... ULTIMO (descending) try { udcParent = MagClass.magazzino.getUdcParentDesc(currUDC); } catch { } // controllo che sia DAVVERO caricato UDC parent... string oldUdc = ""; // verifico per eventuale consumo vecchio UDC... cerco nella posizione DS_magazzino.v_UdcDetailDataTable tabUdcDet = null; try { // cerco nella posizione tabUdcDet = MagClass.magazzino.taDettUDC.getUdcDetailByIdxCella(idxCella); } catch { } try { oldUdc = ((DS_magazzino.v_UdcDetailRow)tabUdcDet.Select(string.Format("UDC = '{0}'", udcParent))[0]).UDC; } catch { } // PROCEDO SOLO SE HO UN UDC IN INGRESSO!!! if (udcParent != "" && oldUdc != "") { // CREO NUOVO UDC!!! string udcDest = ""; udcDest = checkCreaUDC(false, true); // associo UDC con quello di destinazione MagClass.magazzino.associaUdcParent(udcDest, udcParent, true); // registro creazione nuovo UDC MagClass.magazzino.taSAO.insertQuery(adesso, MagClass.magazzino.CodSoggCurrUser, Postazione.name, Postazione.IP, currUDC, currParticolare, "creaUDC", string.Format("Creato ed associato nuovo UDC {3} con codice {2}, qta: {0}, UDC Parent: {1}", qta, udcParent, udcDest, tipoUdcLinea)); } // resetto doResetData(); } else { httpLog(string.Format("FINITI, Errore persi utente/particolare, ricarico!"), tipoLog.ERROR); Response.Redirect("~/login.aspx"); } } else { Postazione.messaggiText = traduci("noOpAuth"); Postazione.warningText = ""; Postazione.CssClass = cssErr; httpLog(string.Format("Errore manca OpAuth x UDC {0}", tipoUdcLinea), tipoLog.ERROR); } } else { Response.Redirect("~/menu.aspx"); } doUpdate(); // raise dell'evento raiseEvent(ucEvType.ReqUpdateParent); if (needsRedirect) { Response.Redirect(user_std.pagCorrente); } } #endregion } }