diff --git a/MP-IO/Controllers/IOBController.cs b/MP-IO/Controllers/IOBController.cs index 81ef8ccc..7303194e 100644 --- a/MP-IO/Controllers/IOBController.cs +++ b/MP-IO/Controllers/IOBController.cs @@ -54,6 +54,11 @@ namespace MP_IO.Controllers public string addTask2Exe(string id, string taskName, string taskVal) { string answ = ""; + // attenzione! poiché nell'URL il carattere "#" viene filtrato ci aspettiamo il carattere "|" che poi trasformiamo ora in "#" + if (!string.IsNullOrEmpty(id)) + { + id = id.Replace("|", "#"); + } // scrivo keep alive!!! (se necessario, altrimenti è in cache...) MapoDb.MapoDb connDb = new MapoDb.MapoDb(); DataLayer DataLayerObj = new DataLayer(); @@ -465,7 +470,7 @@ namespace MP_IO.Controllers public string flog(string id, string flux, string valore, string dtEve, string dtCurr, string cnt) { return flog(id, flux, valore, dtEve, dtCurr, cnt, "false"); - } + } #endif /// @@ -539,7 +544,7 @@ namespace MP_IO.Controllers answ = processFLogJson(id, false, insDone, answ, content); } return answ; - } + } #endif /// @@ -608,7 +613,7 @@ namespace MP_IO.Controllers // carattere "|" che poi trasformiamo ora in "#" id = id.Replace("|", "#"); DataLayer DataLayerObj = new DataLayer(); - return DataLayerObj.AutoStartOdl(id, true, true, 100, ""); + return DataLayerObj.AutoStartOdl(id, true, true, 100, 0, ""); } /// @@ -622,9 +627,11 @@ namespace MP_IO.Controllers /// /// /// + /// /// Cod esterno da legare all'ODL x tracciare lotti prod + /// matricola operatore che effettua la fuzione (default = 0) /// Esito chiamata (OK/vuoto) - public string forceSplitOdlFull(string id, bool doConfirm, bool qtyFromLast, int? roundStep, string keyRichiesta = "") + public string forceSplitOdlFull(string id, bool doConfirm, bool qtyFromLast, int? roundStep, string keyRichiesta = "", int matrOpr = 0) { // attenzione! poiché nell'URL il carattere "#" viene filtrato ci aspettiamo il // carattere "|" che poi trasformiamo ora in "#" @@ -634,7 +641,7 @@ namespace MP_IO.Controllers { roundStep = 100; } - return DataLayerObj.AutoStartOdl(id, doConfirm, qtyFromLast, (int)roundStep, keyRichiesta); + return DataLayerObj.AutoStartOdl(id, doConfirm, qtyFromLast, (int)roundStep, matrOpr, keyRichiesta); } /// @@ -649,14 +656,15 @@ namespace MP_IO.Controllers /// idx del PDL da avviare /// data-ora di avvio (opzionale) /// data-ora attuale (opzionale) + /// matricola operatore (default 0) /// Esito chiamata (OK/vuoto) - public string forceStartPOdl(string id, int idxPODL, string dtEve = "", string dtCurr = "") + public string forceStartPOdl(string id, int idxPODL, string dtEve = "", string dtCurr = "", int matrOpr = 0) { // attenzione! poiché nell'URL il carattere "#" viene filtrato ci aspettiamo il // carattere "|" che poi trasformiamo ora in "#" id = id.Replace("|", "#"); DataLayer DataLayerObj = new DataLayer(); - string answ = DataLayerObj.ForceStartPOdl(id, idxPODL, true, dtEve, dtCurr); + string answ = DataLayerObj.ForceStartPOdl(id, idxPODL, true, matrOpr, dtEve, dtCurr); return answ; } @@ -1505,6 +1513,11 @@ namespace MP_IO.Controllers /// Json contenente 1..n task da eseguire public string getTask2Exe(string id) { + // attenzione! poiché nell'URL il carattere "#" viene filtrato ci aspettiamo il carattere "|" che poi trasformiamo ora in "#" + if (!string.IsNullOrEmpty(id)) + { + id = id.Replace("|", "#"); + } string answ = ""; // scrivo keep alive!!! (se necessario, altrimenti è in cache...) MapoDb.MapoDb connDb = new MapoDb.MapoDb(); @@ -1804,6 +1817,11 @@ namespace MP_IO.Controllers public string remTask2Exe(string id, string taskName) { string answ = ""; + // attenzione! poiché nell'URL il carattere "#" viene filtrato ci aspettiamo il carattere "|" che poi trasformiamo ora in "#" + if (!string.IsNullOrEmpty(id)) + { + id = id.Replace("|", "#"); + } // scrivo keep alive!!! (se necessario, altrimenti è in cache...) MapoDb.MapoDb connDb = new MapoDb.MapoDb(); DataLayer DataLayerObj = new DataLayer(); @@ -1915,7 +1933,6 @@ namespace MP_IO.Controllers System.Web.HttpContext.Current.Request.InputStream.Position = 0; if (content != null) { - try { DataLayer DataLayerObj = new DataLayer(); @@ -2064,7 +2081,7 @@ namespace MP_IO.Controllers /// /// SALVA in blocco un incremento pezzi x macchina restituendo il valore appena inviato o, - /// se mancasse chaive redis, del valore da DB + /// se mancasse chiave REDIS, del valore da DB /// /// GET: IOB/savePzCountIncAtDate/5?qty=10&dtEve=20230323151100000&dtCurr=20230323221100000 /// diff --git a/MP-IO/Web.config b/MP-IO/Web.config index 7743938e..e2fa62fe 100644 --- a/MP-IO/Web.config +++ b/MP-IO/Web.config @@ -24,7 +24,7 @@ - + diff --git a/MP-TAB/WebUserControls/mod_ODL.ascx.cs b/MP-TAB/WebUserControls/mod_ODL.ascx.cs index dbeb6217..332f8a7f 100644 --- a/MP-TAB/WebUserControls/mod_ODL.ascx.cs +++ b/MP-TAB/WebUserControls/mod_ODL.ascx.cs @@ -11,6 +11,227 @@ namespace MoonProTablet.WebUserControls { public partial class mod_ODL : BaseUserControl { + #region Public Events + + /// + /// registrato nuovo valore + /// + public event EventHandler eh_reqUpdate; + + #endregion Public Events + + #region Public Properties + + /// + /// Cod articolo dell'ODL selezionato + /// + public string CodArtSel + { + get + { + string CodArticolo = ""; + try + { + CodArticolo = DataLayerObj.taODL.getByIdx(idxODLSel, false)[0].CodArticolo; + } + catch + { } + return CodArticolo; + } + } + + /// + /// Verifica se la macchina NON abbia ODL (valido, > 0) + /// + public bool emptyOdlAltraMacc + { + get + { + return (idxOdlAltraMacc == "" || idxOdlAltraMacc == "0"); + } + } + + /// + /// Verifica se la macchina NON abbia ODL (valido, > 0) + /// + public bool emptyOdlMacc + { + get + { + return (idxOdlMacc == "" || idxOdlMacc == "0"); + } + } + + /// + /// idx macchina selezionata + /// + public new string idxMacchinaFix + { + get + { + string answ = ""; + try + { + answ = memLayer.ML.StringSessionObj(string.Format("idxMacchina-{0}", uid)); + } + catch + { } + return answ; + } + set + { + memLayer.ML.setSessionVal(string.Format("idxMacchina-{0}", uid), value); + cmp_selPODL.idxMacchinaFix = value; + cmp_newODL.idxMacchinaFix = value; + } + } + + /// + /// IdxODL su ALTRA macchina (se multi) + /// + public string idxOdlAltraMacc + { + get + { + if (_idxOdlAltraMacc == null) + { + _idxOdlAltraMacc = DataLayerObj.currODL(idxMaccAltraTav, true); + } + return _idxOdlAltraMacc; + } + set + { + _idxOdlAltraMacc = value; + } + } + + /// + /// IdxODL sulla macchina + /// + public string idxOdlMacc + { + get + { + if (_idxOdlMacc == null) + { + _idxOdlMacc = DataLayerObj.currODL(idxMacchinaFix, true); + } + return _idxOdlMacc; + } + set + { + _idxOdlMacc = value; + } + } + + /// + /// codice odl selezionato + /// + public int idxODLSel + { + get + { + return cmp_selPODL.idxODLSel; + } + } + + /// + /// Determina se sia abilitato il controllo x editing + /// + public bool isEnabled + { + get + { + bool answ = false; + try + { + answ = memLayer.ML.BoolSessionObj(string.Format("isEnabled-{0}", uid)); + } + catch + { } + return answ; + } + set + { + memLayer.ML.setSessionVal(string.Format("isEnabled-{0}", uid), value); + } + } + + /// + /// Testo x button creazione nuovo ODL + /// + public string lblCreaOdl + { + get + { + string answ = "CREAZIONE ODL PROVVISORIO"; + if (cmp_newODL.Visible) + { + answ = "NASCONDI creazione ODL provvisorio"; + } + return answ; + } + } + + public bool maccInAttr + { + get + { + bool answ = false; + // controllo se la macchina è in attrezzaggio... + DS_applicazione.StatoMacchineRow rigaStato = null; + try + { + // se è multi controllo parent... + if (isMulti) + { + rigaStato = selData.mng.rigaStato(idxMaccParent); + } + else + { + rigaStato = selData.mng.rigaStato(idxMacchinaFix); + } + answ = (rigaStato.IdxStato == 2); + } + catch (Exception exc) + { + logger.lg.scriviLog(string.Format("Eccezione in recupero dati rigaStato! {0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION); + } + return answ; + } + } + + #endregion Public Properties + + #region Public Methods + + public void checkAll() + { + lblOut.Text = ""; + checkBtnStatus(); + divOdlProvv.Visible = showOdlProvvVal; + divOpRiattr.Visible = (showSplitOdlOnTavVal || showReopOdlTav); + lbtSplitOdlSuTav.Visible = showSplitOdlOnTavVal; + lbtReopOdlSuTav.Visible = showReopOdlTav; + lbtFixEndSetup.Visible = !maccInAttr && memLayer.ML.CRB("OptEnableFixSetup"); + } + + public void hideAll() + { + divDettPOdl.Visible = false; + } + + #endregion Public Methods + + #region Internal Methods + + internal void fixODL() + { + cmp_dettODL.fixODL(); + } + + #endregion Internal Methods + #region Protected Fields /// @@ -25,15 +246,6 @@ namespace MoonProTablet.WebUserControls #endregion Protected Fields - #region Public Events - - /// - /// registrato nuovo valore - /// - public event EventHandler eh_reqUpdate; - - #endregion Public Events - #region Protected Properties /// @@ -253,551 +465,6 @@ namespace MoonProTablet.WebUserControls #endregion Protected Properties - #region Public Properties - - /// - /// Cod articolo dell'ODL selezionato - /// - public string CodArtSel - { - get - { - string CodArticolo = ""; - try - { - CodArticolo = DataLayerObj.taODL.getByIdx(idxODLSel, false)[0].CodArticolo; - } - catch - { } - return CodArticolo; - } - } - - /// - /// Verifica se la macchina NON abbia ODL (valido, > 0) - /// - public bool emptyOdlAltraMacc - { - get - { - return (idxOdlAltraMacc == "" || idxOdlAltraMacc == "0"); - } - } - - /// - /// Verifica se la macchina NON abbia ODL (valido, > 0) - /// - public bool emptyOdlMacc - { - get - { - return (idxOdlMacc == "" || idxOdlMacc == "0"); - } - } - - /// - /// idx macchina selezionata - /// - public new string idxMacchinaFix - { - get - { - string answ = ""; - try - { - answ = memLayer.ML.StringSessionObj(string.Format("idxMacchina-{0}", uid)); - } - catch - { } - return answ; - } - set - { - memLayer.ML.setSessionVal(string.Format("idxMacchina-{0}", uid), value); - cmp_selPODL.idxMacchinaFix = value; - cmp_newODL.idxMacchinaFix = value; - } - } - - /// - /// IdxODL su ALTRA macchina (se multi) - /// - public string idxOdlAltraMacc - { - get - { - if (_idxOdlAltraMacc == null) - { - _idxOdlAltraMacc = DataLayerObj.currODL(idxMaccAltraTav, true); - } - return _idxOdlAltraMacc; - } - set - { - _idxOdlAltraMacc = value; - } - } - - /// - /// IdxODL sulla macchina - /// - public string idxOdlMacc - { - get - { - if (_idxOdlMacc == null) - { - _idxOdlMacc = DataLayerObj.currODL(idxMacchinaFix, true); - } - return _idxOdlMacc; - } - set - { - _idxOdlMacc = value; - } - } - - /// - /// codice odl selezionato - /// - public int idxODLSel - { - get - { - return cmp_selPODL.idxODLSel; - } - } - - /// - /// Determina se sia abilitato il controllo x editing - /// - public bool isEnabled - { - get - { - bool answ = false; - try - { - answ = memLayer.ML.BoolSessionObj(string.Format("isEnabled-{0}", uid)); - } - catch - { } - return answ; - } - set - { - memLayer.ML.setSessionVal(string.Format("isEnabled-{0}", uid), value); - } - } - - /// - /// Testo x button creazione nuovo ODL - /// - public string lblCreaOdl - { - get - { - string answ = "CREAZIONE ODL PROVVISORIO"; - if (cmp_newODL.Visible) - { - answ = "NASCONDI creazione ODL provvisorio"; - } - return answ; - } - } - - public bool maccInAttr - { - get - { - bool answ = false; - // controllo se la macchina è in attrezzaggio... - DS_applicazione.StatoMacchineRow rigaStato = null; - try - { - // se è multi controllo parent... - if (isMulti) - { - rigaStato = selData.mng.rigaStato(idxMaccParent); - } - else - { - rigaStato = selData.mng.rigaStato(idxMacchinaFix); - } - answ = (rigaStato.IdxStato == 2); - } - catch (Exception exc) - { - logger.lg.scriviLog(string.Format("Eccezione in recupero dati rigaStato! {0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION); - } - return answ; - } - } - - #endregion Public Properties - - #region Private Methods - - /// - /// controlla stato bottoni abilitato - /// - private void checkBtnStatus() - { - // di default rendo abilitato / disabilitato tutto in base al valore "isEnabled" - lbtShowSplitODL.Enabled = isEnabled && enableRiattrezzaggio; - lbtSplitODL.Enabled = isEnabled; - - fixWCtrStatus(lbtShowSplitODL); - fixWCtrStatus(lbtSplitODL); - - // condizioni booleane - bool inAttr = false; - bool currHasOdl = false; - // controllo se la macchina è in attrezzaggio... - DS_applicazione.StatoMacchineRow rigaStato = null; - try - { - // se è multi controllo parent... - if (isMulti) - { - rigaStato = selData.mng.rigaStato(idxMaccParent); - inAttr = (rigaStato.IdxStato == 2 && tavHasOdl); - } - else - { - rigaStato = selData.mng.rigaStato(idxMacchinaFix); - if (rigaStato != null) - { - inAttr = (rigaStato.IdxStato == 2); - } - } - } - catch (Exception exc) - { - logger.lg.scriviLog(string.Format("Eccezione in recupero dati rigaStato! {0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION); - } - - try - { - currHasOdl = DataLayerObj.taODL.getByMacchina(idxMacchinaFix)[0].IdxODL != 0; - } - catch (Exception exc) - { - logger.lg.scriviLog(string.Format("Eccezione in recupero dati currHasOdl! {0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION); - } - // deve controllare abbia ODL o PROMESSE odl... - bool hasNewOdl = DataLayerObj.taSelOdlFree.getUnused(idxMacchinaFix, cmp_selPODL.checkAll, numDaySelOdl).Rows.Count > 1; - // sistemo buttons! - lbtStartAttr.Enabled = (isEnabled && (!inAttr && hasNewOdl)); - lbtEndProd.Enabled = (isEnabled && (!inAttr && currHasOdl)); - - // verifico condizioni annullamento setup - lbtAnnullaSetup.Visible = false; - if (isEnabled && enableAnnullaSetup && inAttr && enableSchedaTecnica) - { - // verifico condizione pz da confermare - var tabProd = DataLayerObj.taStatoProd.GetData(idxMacchinaSel, DateTime.Now); - if (tabProd != null && tabProd.Rows.Count > 0) - { - var rigaProd = tabProd[0]; - lbtAnnullaSetup.Visible = rigaProd.PzTotODL == 0; - } - } - - // controllo se ci sia da verificare scheda tecnica - if (enableSchedaTecnica) - { - var tabRichieste = DataLayerObj.taSTAR.getPendingByOdl(idxOdl); - bool okCheckST = tabRichieste.Count == 0; - if (okCheckST) - { - hlNeedStar.Visible = false; - lbtStartProd.Enabled = (isEnabled && inAttr); - } - else - { - hlNeedStar.Visible = (isEnabled && inAttr); - lbtStartProd.Enabled = false; - } - } - else - { - lbtStartProd.Enabled = (isEnabled && inAttr); - } - cmp_selPODL.Enabled = (isEnabled && (!inAttr && hasNewOdl)); - // sistemo anche come css.. - fixWCtrStatus(lbtStartAttr); - fixWCtrStatus(lbtStartProd); - fixWCtrStatus(lbtEndProd); - // sistemo show tempo/note attrezzaggio.. - if (inAttr) - { - showNoteTC(true); - int idxOdl = 0; - try - { - idxOdl = DataLayerObj.taODL.getByMacchina(idxMacchinaFix)[0].IdxODL; - updateTempoTc(idxOdl, inAttr); - updateNoteTC(idxOdl); - } - catch (Exception exc) - { - logger.lg.scriviLog(string.Format("Eccezione in recupero dati ODL! {0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION); - } - } - - // verifico se l'articolo corrente sia in revisione x mostrare conferma modifica revisione... - if (CodArtSel != "") - { - bool showWarn = false; - try - { - showWarn = DataLayerObj.taAnagArt.getByCod(CodArtSel)[0].FlagIsNew; - } - catch (Exception exc) - { - logger.lg.scriviLog(string.Format("Eccezione in recupero dati showWarn! {0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION); - } - divWarningArt.Visible = showWarn; - } - } - - /// - /// Verifica se mostrare note - /// - private void checkTcNote() - { - if (cmp_selPODL.SelectedIndex > 0) - { - showNoteTC(true); - updateTempoTc(idxODLSel, false); - updateNoteTC(idxODLSel); - } - else - { - showNoteTC(false); - } - } - - private void Cmp_newODL_eh_newVal(object sender, EventArgs e) - { - // creato nuovo ODL, faccio refresh ricaricando pagina! - Response.Redirect("~/ODL"); - } - - private void Cmp_selPODL_eh_doUpdate(object sender, EventArgs e) - { - checkBtnStatus(); - } - - private void Cmp_selPODL_eh_selVal(object sender, EventArgs e) - { - checkTcNote(); - } - - /// - /// verifica se sia necessario confermare la prod dell'ODL precedente prima di chiudere e lo fa in automatico... - /// - /// boolean, true = deve confermare 0 pezzi (es. in setup) - private void confermaProdOdl(bool confZero) - { - // 2016.11.17 NOTA: introdotti scarti, li confermiamo SEMPRE a zero se in setup, però da valutare SE a FINE ATTREZZAGGIO chiedere num pezzi e num scarti (saldo zero buoni) da inserire... - bool fatto = false; - DateTime adesso = DateTime.Now; - if (confZero) - { - // confermo produzione ZERO pezzi (in setup) - if (confRett) - { - // confermo al netto dei pezzi lasciati... - fatto = DataLayerObj.confermaProdMacchinaFull(idxMacchinaFix, memLayer.ML.CRI("modoConfProd"), 0, 0, 0, adesso); - } - else - { - fatto = DataLayerObj.confermaProdMacchina(idxMacchinaFix, memLayer.ML.CRI("modoConfProd"), 0, 0, adesso); - } - } - else // se NON sono in setup verifico se ho pz da confermare - { - // recupero pz da confermare - DS_ProdTempi.stp_PzProd_getByMacchinaRow rigaProd = DataLayerObj.taPzProd2conf.GetData(idxMacchinaFix)[0]; - if (rigaProd.pezziNonConfermati > 0) - { - // confermo produzione ZERO pezzi (in setup) - if (confRett) - { - // confermo al netto dei pezzi lasciati... - fatto = DataLayerObj.confermaProdMacchinaFull(idxMacchinaFix, memLayer.ML.CRI("modoConfProd"), rigaProd.pezziNonConfermati, 0, 0, adesso); - } - else - { - fatto = DataLayerObj.confermaProdMacchina(idxMacchinaFix, memLayer.ML.CRI("modoConfProd"), rigaProd.pezziNonConfermati, 0, adesso); - } - } - } - } - - /// - /// Rimozione dati e parametri (TAB e su PLC) x ODL corrente - /// - private void doRemoveCurrOdlData() - { - // invio task x end produzione... - string setArtVal = "NO ART"; - string setPzCommVal = "0"; - string setCommVal = $"NO ODL"; - // FIXME TODO: scrivere come sotto? testare valvital x linea LASCO - DataLayerObj.addTask4Machine(idxMacchinaFix, taskType.endProd, ""); - DataLayerObj.addTask4Machine(idxMacchinaFix, taskType.setArt, setArtVal); - DataLayerObj.addTask4Machine(idxMacchinaFix, taskType.setPzComm, setPzCommVal); - DataLayerObj.addTask4Machine(idxMacchinaFix, taskType.setComm, setCommVal); - // se è master --> chiamo update child! - if (isMaster) - { - // calcolo gli slave... - var slaveList = DataLayerObj.taM2S.getByMaster(idxMacchina); - foreach (var machine in slaveList) - { - // invio task x end produzione... - DataLayerObj.addTask4Machine(machine.IdxMacchinaSlave, taskType.endProd, ""); - DataLayerObj.addTask4Machine(machine.IdxMacchinaSlave, taskType.setArt, setArtVal); - DataLayerObj.addTask4Machine(machine.IdxMacchinaSlave, taskType.setPzComm, setPzCommVal); - DataLayerObj.addTask4Machine(machine.IdxMacchinaSlave, taskType.setComm, setCommVal); - } - } - - // resetto contapezzi redis... - DataLayerObj.saveCounter(idxMacchinaFix, "0"); - // resetto ODL su redis... - DataLayerObj.emptyCurrODL(idxMacchinaFix); - // reset ODL!... - idxOdl = -1; - } - - /// - /// sistema buttons split - /// - /// - private void fixSplitBtn(bool splitOdl) - { - lbtShowSplitODL.Visible = !splitOdl && enableRiattrezzaggio; - lbtSplitODL.Visible = splitOdl; - - chkCloseOdl.Visible = showChkCloseOdlVal && !splitOdl; - chkCloseOdl.Enabled = isEnabled; - fixWCtrStatus(chkCloseOdl); - - showNoteTC(splitOdl); - cmp_selPODL.CtrlVisible = !splitOdl; - lbtStartAttr.Visible = !splitOdl; - lbtShowOdlDet.Visible = !lbtStartAttr.Visible; - lbtStartProd.Visible = !splitOdl; - lbtEndProd.Visible = !splitOdl; - } - - /// - /// processa evento richiesto - /// - /// - /// - /// - /// - private void processaEvento(string idxMaccCurr, int idxEvento, string userMsg, int idxODL) - { - inputComandoMapo inCmd; - inputComandoMapo inCmd2; - DS_applicazione.StatoMacchineRow rigaStato = selData.mng.rigaStato(idxMaccCurr); - // ricavo codice articolo... - string CodArticolo = DataLayerObj.taODL.getByIdx(idxODL, false)[0].CodArticolo; - // processo evento... - inCmd = DataLayerObj.scriviRigaEventoBarcode(idxMaccCurr, idxEvento, CodArticolo, "", DataLayerObj.MatrOpr, rigaStato.pallet); - // se la macchina è MULTI (cod#tavola) e sonoa INIZIO/FINE attrezzaggio (idxEv <=2) oppure FINE PROD processo ANCHE per la macchina madre... - if (idxMaccCurr.IndexOf('#') > 0 && (idxEvento <= 2 || idxEvento == 7)) - { - inCmd2 = DataLayerObj.scriviRigaEventoBarcode(idxMaccParent, idxEvento, CodArticolo, "", DataLayerObj.MatrOpr, rigaStato.pallet); - } - // chiamo refresh MSE - DataLayerObj.taMSE.forceRecalc(0, idxMaccCurr); - // invalido la cache di selData - selData.mng.invalidateCache(); - lblOut.Text = userMsg; - // loggo USR MSG - logger.lg.scriviLog(userMsg, tipoLog.INFO); - checkBtnStatus(); - } - - /// - /// mostra/nasconde note - /// - private void showNoteTC(bool show) - { - // mostra/nasconde note da compilare - divTempo.Visible = show; - divNote.Visible = show; - divPzPallet.Visible = show; - lbtStartAttr.Visible = show; - lbtShowOdlDet.Visible = !show; - cmp_dettPODL.idxODLSel = idxODLSel; - divDettPOdl.Visible = show && idxODLSel > 0; - // se abilitato da config su DB mostro selezione del numPzPallet... - cmp_selPzPallet.enableSet = enableTabSetPzPallet; - } - - /// - /// aggiorna note ODL - /// - /// - private void updateNoteTC(int idxOdl) - { - string testo = ""; - if (idxOdl > 0) - { - try - { - testo = DataLayerObj.taODL.getByIdx(idxOdl, false)[0].Note; - } - catch - { } - } - txtNote.Text = testo; - } - - /// - /// update TC mostrato - /// - /// idx dell'ODL / PODL - /// - private void updateTempoTc(int idxOdlPodl, bool inAttr) - { - // riporta TC - decimal _TCRichAttr = 0; - int pzPallet = 1; - if (enableRPO && !inAttr) - { - var rigaProm = DataLayerObj.taPODL.getByKey(idxOdlPodl)[0]; - _TCRichAttr = rigaProm.TCAssegnato; - pzPallet = rigaProm.PzPallet; - } - else - { - DS_ProdTempi.ODLRow rigaOdl = DataLayerObj.taODL.getByIdx(idxOdlPodl, false)[0]; - if (rigaOdl.TCRichAttr > 0) - { - _TCRichAttr = rigaOdl.TCRichAttr; - } - else - { - _TCRichAttr = rigaOdl.TCAssegnato; - } - pzPallet = rigaOdl.PzPallet; - } - // aggiorno dati! - TCRichAttr = _TCRichAttr; - PzPallet = pzPallet; - } - - #endregion Private Methods - #region Protected Methods /// @@ -1449,33 +1116,366 @@ namespace MoonProTablet.WebUserControls #endregion Protected Methods - #region Internal Methods + #region Private Methods - internal void fixODL() + /// + /// controlla stato bottoni abilitato + /// + private void checkBtnStatus() { - cmp_dettODL.fixODL(); + // di default rendo abilitato / disabilitato tutto in base al valore "isEnabled" + lbtShowSplitODL.Enabled = isEnabled && enableRiattrezzaggio; + lbtSplitODL.Enabled = isEnabled; + + fixWCtrStatus(lbtShowSplitODL); + fixWCtrStatus(lbtSplitODL); + + // condizioni booleane + bool inAttr = false; + bool currHasOdl = false; + // controllo se la macchina è in attrezzaggio... + DS_applicazione.StatoMacchineRow rigaStato = null; + try + { + // se è multi controllo parent... + if (isMulti) + { + rigaStato = selData.mng.rigaStato(idxMaccParent); + inAttr = (rigaStato.IdxStato == 2 && tavHasOdl); + } + else + { + rigaStato = selData.mng.rigaStato(idxMacchinaFix); + if (rigaStato != null) + { + inAttr = (rigaStato.IdxStato == 2); + } + } + } + catch (Exception exc) + { + logger.lg.scriviLog(string.Format("Eccezione in recupero dati rigaStato! {0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION); + } + + try + { + currHasOdl = DataLayerObj.taODL.getByMacchina(idxMacchinaFix)[0].IdxODL != 0; + } + catch (Exception exc) + { + logger.lg.scriviLog(string.Format("Eccezione in recupero dati currHasOdl! {0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION); + } + // deve controllare abbia ODL o PROMESSE odl... + bool hasNewOdl = DataLayerObj.taSelOdlFree.getUnused(idxMacchinaFix, cmp_selPODL.checkAll, numDaySelOdl).Rows.Count > 1; + // sistemo buttons! + lbtStartAttr.Enabled = (isEnabled && (!inAttr && hasNewOdl)); + lbtEndProd.Enabled = (isEnabled && (!inAttr && currHasOdl)); + + // verifico condizioni annullamento setup + lbtAnnullaSetup.Visible = false; + if (isEnabled && enableAnnullaSetup && inAttr && enableSchedaTecnica) + { + // verifico condizione pz da confermare + var tabProd = DataLayerObj.taStatoProd.GetData(idxMacchinaSel, DateTime.Now); + if (tabProd != null && tabProd.Rows.Count > 0) + { + var rigaProd = tabProd[0]; + lbtAnnullaSetup.Visible = rigaProd.PzTotODL == 0; + } + } + + // controllo se ci sia da verificare scheda tecnica + if (enableSchedaTecnica) + { + var tabRichieste = DataLayerObj.taSTAR.getPendingByOdl(idxOdl); + bool okCheckST = tabRichieste.Count == 0; + if (okCheckST) + { + hlNeedStar.Visible = false; + lbtStartProd.Enabled = (isEnabled && inAttr); + } + else + { + hlNeedStar.Visible = (isEnabled && inAttr); + lbtStartProd.Enabled = false; + } + } + else + { + lbtStartProd.Enabled = (isEnabled && inAttr); + } + cmp_selPODL.Enabled = (isEnabled && (!inAttr && hasNewOdl)); + // sistemo anche come css.. + fixWCtrStatus(lbtStartAttr); + fixWCtrStatus(lbtStartProd); + fixWCtrStatus(lbtEndProd); + // sistemo show tempo/note attrezzaggio.. + if (inAttr) + { + showNoteTC(true); + int idxOdl = 0; + try + { + idxOdl = DataLayerObj.taODL.getByMacchina(idxMacchinaFix)[0].IdxODL; + updateTempoTc(idxOdl, inAttr); + updateNoteTC(idxOdl); + } + catch (Exception exc) + { + logger.lg.scriviLog(string.Format("Eccezione in recupero dati ODL! {0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION); + } + } + + // verifico se l'articolo corrente sia in revisione x mostrare conferma modifica revisione... + if (CodArtSel != "") + { + bool showWarn = false; + try + { + showWarn = DataLayerObj.taAnagArt.getByCod(CodArtSel)[0].FlagIsNew; + } + catch (Exception exc) + { + logger.lg.scriviLog(string.Format("Eccezione in recupero dati showWarn! {0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION); + } + divWarningArt.Visible = showWarn; + } } - #endregion Internal Methods - - #region Public Methods - - public void checkAll() + /// + /// Verifica se mostrare note + /// + private void checkTcNote() + { + if (cmp_selPODL.SelectedIndex > 0) + { + showNoteTC(true); + updateTempoTc(idxODLSel, false); + updateNoteTC(idxODLSel); + } + else + { + showNoteTC(false); + } + } + + private void Cmp_newODL_eh_newVal(object sender, EventArgs e) + { + // creato nuovo ODL, faccio refresh ricaricando pagina! + Response.Redirect("~/ODL"); + } + + private void Cmp_selPODL_eh_doUpdate(object sender, EventArgs e) { - lblOut.Text = ""; checkBtnStatus(); - divOdlProvv.Visible = showOdlProvvVal; - divOpRiattr.Visible = (showSplitOdlOnTavVal || showReopOdlTav); - lbtSplitOdlSuTav.Visible = showSplitOdlOnTavVal; - lbtReopOdlSuTav.Visible = showReopOdlTav; - lbtFixEndSetup.Visible = !maccInAttr && memLayer.ML.CRB("OptEnableFixSetup"); } - public void hideAll() + private void Cmp_selPODL_eh_selVal(object sender, EventArgs e) { - divDettPOdl.Visible = false; + checkTcNote(); } - #endregion Public Methods + /// + /// verifica se sia necessario confermare la prod dell'ODL precedente prima di chiudere e lo fa in automatico... + /// + /// boolean, true = deve confermare 0 pezzi (es. in setup) + private void confermaProdOdl(bool confZero) + { + // 2016.11.17 NOTA: introdotti scarti, li confermiamo SEMPRE a zero se in setup, però da valutare SE a FINE ATTREZZAGGIO chiedere num pezzi e num scarti (saldo zero buoni) da inserire... + bool fatto = false; + DateTime adesso = DateTime.Now; + if (confZero) + { + // confermo produzione ZERO pezzi (in setup) + if (confRett) + { + // confermo al netto dei pezzi lasciati... + fatto = DataLayerObj.confermaProdMacchinaFull(idxMacchinaFix, memLayer.ML.CRI("modoConfProd"), 0, 0, 0, adesso, DataLayerObj.MatrOpr); + } + else + { + fatto = DataLayerObj.confermaProdMacchina(idxMacchinaFix, memLayer.ML.CRI("modoConfProd"), 0, 0, adesso, DataLayerObj.MatrOpr); + } + } + else // se NON sono in setup verifico se ho pz da confermare + { + // recupero pz da confermare + DS_ProdTempi.stp_PzProd_getByMacchinaRow rigaProd = DataLayerObj.taPzProd2conf.GetData(idxMacchinaFix)[0]; + if (rigaProd.pezziNonConfermati > 0) + { + // confermo produzione ZERO pezzi (in setup) + if (confRett) + { + // confermo al netto dei pezzi lasciati... + fatto = DataLayerObj.confermaProdMacchinaFull(idxMacchinaFix, memLayer.ML.CRI("modoConfProd"), rigaProd.pezziNonConfermati, 0, 0, adesso, DataLayerObj.MatrOpr); + } + else + { + fatto = DataLayerObj.confermaProdMacchina(idxMacchinaFix, memLayer.ML.CRI("modoConfProd"), rigaProd.pezziNonConfermati, 0, adesso, DataLayerObj.MatrOpr); + } + } + } + } + + /// + /// Rimozione dati e parametri (TAB e su PLC) x ODL corrente + /// + private void doRemoveCurrOdlData() + { + // invio task x end produzione... + string setArtVal = "NO ART"; + string setPzCommVal = "0"; + string setCommVal = $"NO ODL"; + // FIXME TODO: scrivere come sotto? testare valvital x linea LASCO + DataLayerObj.addTask4Machine(idxMacchinaFix, taskType.endProd, ""); + DataLayerObj.addTask4Machine(idxMacchinaFix, taskType.setArt, setArtVal); + DataLayerObj.addTask4Machine(idxMacchinaFix, taskType.setPzComm, setPzCommVal); + DataLayerObj.addTask4Machine(idxMacchinaFix, taskType.setComm, setCommVal); + // se è master --> chiamo update child! + if (isMaster) + { + // calcolo gli slave... + var slaveList = DataLayerObj.taM2S.getByMaster(idxMacchina); + foreach (var machine in slaveList) + { + // invio task x end produzione... + DataLayerObj.addTask4Machine(machine.IdxMacchinaSlave, taskType.endProd, ""); + DataLayerObj.addTask4Machine(machine.IdxMacchinaSlave, taskType.setArt, setArtVal); + DataLayerObj.addTask4Machine(machine.IdxMacchinaSlave, taskType.setPzComm, setPzCommVal); + DataLayerObj.addTask4Machine(machine.IdxMacchinaSlave, taskType.setComm, setCommVal); + } + } + + // resetto contapezzi redis... + DataLayerObj.saveCounter(idxMacchinaFix, "0"); + // resetto ODL su redis... + DataLayerObj.emptyCurrODL(idxMacchinaFix); + // reset ODL!... + idxOdl = -1; + } + + /// + /// sistema buttons split + /// + /// + private void fixSplitBtn(bool splitOdl) + { + lbtShowSplitODL.Visible = !splitOdl && enableRiattrezzaggio; + lbtSplitODL.Visible = splitOdl; + + chkCloseOdl.Visible = showChkCloseOdlVal && !splitOdl; + chkCloseOdl.Enabled = isEnabled; + fixWCtrStatus(chkCloseOdl); + + showNoteTC(splitOdl); + cmp_selPODL.CtrlVisible = !splitOdl; + lbtStartAttr.Visible = !splitOdl; + lbtShowOdlDet.Visible = !lbtStartAttr.Visible; + lbtStartProd.Visible = !splitOdl; + lbtEndProd.Visible = !splitOdl; + } + + /// + /// processa evento richiesto + /// + /// + /// + /// + /// + private void processaEvento(string idxMaccCurr, int idxEvento, string userMsg, int idxODL) + { + inputComandoMapo inCmd; + inputComandoMapo inCmd2; + DS_applicazione.StatoMacchineRow rigaStato = selData.mng.rigaStato(idxMaccCurr); + // ricavo codice articolo... + string CodArticolo = DataLayerObj.taODL.getByIdx(idxODL, false)[0].CodArticolo; + // processo evento... + inCmd = DataLayerObj.scriviRigaEventoBarcode(idxMaccCurr, idxEvento, CodArticolo, "", DataLayerObj.MatrOpr, rigaStato.pallet); + // se la macchina è MULTI (cod#tavola) e sonoa INIZIO/FINE attrezzaggio (idxEv <=2) oppure FINE PROD processo ANCHE per la macchina madre... + if (idxMaccCurr.IndexOf('#') > 0 && (idxEvento <= 2 || idxEvento == 7)) + { + inCmd2 = DataLayerObj.scriviRigaEventoBarcode(idxMaccParent, idxEvento, CodArticolo, "", DataLayerObj.MatrOpr, rigaStato.pallet); + } + // chiamo refresh MSE + DataLayerObj.taMSE.forceRecalc(0, idxMaccCurr); + // invalido la cache di selData + selData.mng.invalidateCache(); + lblOut.Text = userMsg; + // loggo USR MSG + logger.lg.scriviLog(userMsg, tipoLog.INFO); + checkBtnStatus(); + } + + /// + /// mostra/nasconde note + /// + private void showNoteTC(bool show) + { + // mostra/nasconde note da compilare + divTempo.Visible = show; + divNote.Visible = show; + divPzPallet.Visible = show; + lbtStartAttr.Visible = show; + lbtShowOdlDet.Visible = !show; + cmp_dettPODL.idxODLSel = idxODLSel; + divDettPOdl.Visible = show && idxODLSel > 0; + // se abilitato da config su DB mostro selezione del numPzPallet... + cmp_selPzPallet.enableSet = enableTabSetPzPallet; + } + + /// + /// aggiorna note ODL + /// + /// + private void updateNoteTC(int idxOdl) + { + string testo = ""; + if (idxOdl > 0) + { + try + { + testo = DataLayerObj.taODL.getByIdx(idxOdl, false)[0].Note; + } + catch + { } + } + txtNote.Text = testo; + } + + /// + /// update TC mostrato + /// + /// idx dell'ODL / PODL + /// + private void updateTempoTc(int idxOdlPodl, bool inAttr) + { + // riporta TC + decimal _TCRichAttr = 0; + int pzPallet = 1; + if (enableRPO && !inAttr) + { + var rigaProm = DataLayerObj.taPODL.getByKey(idxOdlPodl)[0]; + _TCRichAttr = rigaProm.TCAssegnato; + pzPallet = rigaProm.PzPallet; + } + else + { + DS_ProdTempi.ODLRow rigaOdl = DataLayerObj.taODL.getByIdx(idxOdlPodl, false)[0]; + if (rigaOdl.TCRichAttr > 0) + { + _TCRichAttr = rigaOdl.TCRichAttr; + } + else + { + _TCRichAttr = rigaOdl.TCAssegnato; + } + pzPallet = rigaOdl.PzPallet; + } + // aggiorno dati! + TCRichAttr = _TCRichAttr; + PzPallet = pzPallet; + } + + #endregion Private Methods } } \ No newline at end of file diff --git a/MP-TAB/WebUserControls/mod_confProd.ascx.cs b/MP-TAB/WebUserControls/mod_confProd.ascx.cs index 6288bdcf..cec4f036 100644 --- a/MP-TAB/WebUserControls/mod_confProd.ascx.cs +++ b/MP-TAB/WebUserControls/mod_confProd.ascx.cs @@ -437,11 +437,11 @@ namespace MoonProTablet.WebUserControls if (confRett) { // confermo al netto dei pezzi lasciati... - fatto = DataLayerObj.confermaProdMacchinaFull(idxMacchinaSel, memLayer.ML.CRI("modoConfProd"), numPzConfermati - numPzLasciati, numPzLasciati, numPzScarto2Rec, dtReqUpdate); + fatto = DataLayerObj.confermaProdMacchinaFull(idxMacchinaSel, memLayer.ML.CRI("modoConfProd"), numPzConfermati - numPzLasciati, numPzLasciati, numPzScarto2Rec, dtReqUpdate, DataLayerObj.MatrOpr); } else { - fatto = DataLayerObj.confermaProdMacchina(idxMacchinaSel, memLayer.ML.CRI("modoConfProd"), numPzConfermati, numPzScarto2Rec, dtReqUpdate); + fatto = DataLayerObj.confermaProdMacchina(idxMacchinaSel, memLayer.ML.CRI("modoConfProd"), numPzConfermati, numPzScarto2Rec, dtReqUpdate, DataLayerObj.MatrOpr); } return fatto; } diff --git a/MapoDb/DataLayer.cs b/MapoDb/DataLayer.cs index 0c08290d..fa1d3ee2 100644 --- a/MapoDb/DataLayer.cs +++ b/MapoDb/DataLayer.cs @@ -20,9 +20,13 @@ namespace MapoDb /// public class DataLayer { - #region Public Fields + /// + /// Valori config da tabella corrente + /// + public DS_Utility.ConfigDataTable ListConfig = new DS_Utility.ConfigDataTable(); + /// /// Oggetto MapoDb impiegato da DataLayer x i suoi accessi ai dati /// @@ -114,11 +118,6 @@ namespace MapoDb // init config.. ListConfig = taConfig.GetData(); } - /// - /// Valori config da tabella corrente - /// - public DS_Utility.ConfigDataTable ListConfig = new DS_Utility.ConfigDataTable(); - /// /// Init class @@ -274,6 +273,16 @@ namespace MapoDb return mHash($"MachineConfFlux:{idxMacchina}"); } + /// + /// Hash dati di configurazione IOB in formato YAML x la macchina specificata + /// + /// + /// + public static string ConfYamlHash(string idxMacchina) + { + return mHash($"IOB:{idxMacchina}:ConfYaml"); + } + /// /// Hash dati tabella AnagStati macchina /// @@ -470,15 +479,6 @@ namespace MapoDb { return mHash($"MemMap:{idxMacchina}"); } - /// - /// Hash dati di configurazione IOB in formato YAML x la macchina specificata - /// - /// - /// - public static string ConfYamlHash(string idxMacchina) - { - return mHash($"IOB:{idxMacchina}:ConfYaml"); - } /// /// Hash Redis contenente i dati MP di una specifico TYPE (es StatusMacchina, @@ -739,12 +739,13 @@ namespace MapoDb /// macchina /// effettuare conferma qty /// imposta la qty prox ODL da ODL che si chiude + /// matricola operatore /// /// STEP x cui arrotondare la quantità prox ODL (corrente come riferimento) /// /// Cod ext da associare all'ODL /// - public string AutoStartOdl(string idxMacchina, bool doConfirm, bool qtyFromLast, int roundStep = 100, string keyRichiesta = "") + public string AutoStartOdl(string idxMacchina, bool doConfirm, bool qtyFromLast, int matrOpr, int roundStep = 100, string keyRichiesta = "") { string answ = "KO"; DateTime adesso = DateTime.Now; @@ -815,23 +816,23 @@ namespace MapoDb if (confRett) { // confermo al netto dei pezzi lasciati... - fatto = confermaProdMacchinaFull(idxMacchinaSel, memLayer.ML.CRI("modoConfProd"), qtyConf, 0, qtyScarto, adesso); + fatto = confermaProdMacchinaFull(idxMacchinaSel, memLayer.ML.CRI("modoConfProd"), qtyConf, 0, qtyScarto, adesso, matrOpr); if (memLayer.ML.CRB("SlaveConfirmPzProd")) { foreach (var machine in slaveList) { - confermaProdMacchinaFull(machine.IdxMacchinaSlave, memLayer.ML.CRI("modoConfProd"), qtyConf, 0, qtyScarto, adesso); + confermaProdMacchinaFull(machine.IdxMacchinaSlave, memLayer.ML.CRI("modoConfProd"), qtyConf, 0, qtyScarto, adesso, matrOpr); } } } else { - fatto = confermaProdMacchina(idxMacchinaSel, memLayer.ML.CRI("modoConfProd"), qtyConf, qtyScarto, adesso); + fatto = confermaProdMacchina(idxMacchinaSel, memLayer.ML.CRI("modoConfProd"), qtyConf, qtyScarto, adesso, matrOpr); if (memLayer.ML.CRB("SlaveConfirmPzProd")) { foreach (var machine in slaveList) { - confermaProdMacchina(idxMacchinaSel, memLayer.ML.CRI("modoConfProd"), qtyConf, qtyScarto, adesso); + confermaProdMacchina(idxMacchinaSel, memLayer.ML.CRI("modoConfProd"), qtyConf, qtyScarto, adesso, matrOpr); } } } @@ -1198,13 +1199,13 @@ namespace MapoDb /// qta pezzi SCARTO da confermare /// DataOra in cui registrare approvazione /// - public bool confermaProdMacchina(string idxMacchina, int modoConfProd, int numPzConfermati, int numPzScarto, DateTime DataOraApp) + public bool confermaProdMacchina(string idxMacchina, int modoConfProd, int numPzConfermati, int numPzScarto, DateTime DataOraApp, int matrOpr) { bool answ = false; try { DS_ProdTempi.stp_PzProd_getByMacchinaRow rigaProd = taPzProd2conf.GetData(idxMacchina.ToString())[0]; - taPzProd2conf.stp_ConfermaProduzCompleta(idxMacchina, MatrOpr, rigaProd.DataFrom, DataOraApp, numPzConfermati, numPzScarto, modoConfProd, DataOraApp, true); + taPzProd2conf.stp_ConfermaProduzCompleta(idxMacchina, matrOpr, rigaProd.DataFrom, DataOraApp, numPzConfermati, numPzScarto, modoConfProd, DataOraApp, true); // indico eseguito! answ = true; } @@ -1228,13 +1229,13 @@ namespace MapoDb /// qta pezzi SCARTO da confermare /// DataOra in cui registrare approvazione /// - public bool confermaProdMacchinaFull(string idxMacchina, int modoConfProd, int numPzConfermati, int numPzLasciati, int numPzScarto, DateTime DataOraApp) + public bool confermaProdMacchinaFull(string idxMacchina, int modoConfProd, int numPzConfermati, int numPzLasciati, int numPzScarto, DateTime DataOraApp, int matrOpr) { bool answ = false; try { DS_ProdTempi.stp_PzProd_getByMacchinaRow rigaProd = taPzProd2conf.GetData(idxMacchina.ToString())[0]; - taPzProd2conf.stp_ConfermaProduzCompletaFull(idxMacchina, MatrOpr, rigaProd.DataFrom, DataOraApp, numPzConfermati, numPzLasciati, numPzScarto, modoConfProd, DataOraApp, true); + taPzProd2conf.stp_ConfermaProduzCompletaFull(idxMacchina, matrOpr, rigaProd.DataFrom, DataOraApp, numPzConfermati, numPzLasciati, numPzScarto, modoConfProd, DataOraApp, true); // indico eseguito! answ = true; } @@ -1748,10 +1749,11 @@ namespace MapoDb /// macchina /// IDX PODL da processare /// effettuare conferma qty + /// effettuare conferma qty /// data-ora di avvio (opzionale) /// data-ora attuale (opzionale) /// - public string ForceStartPOdl(string idxMacchina, int idxPODL, bool doConfirm, string dtEve = "", string dtCurr = "") + public string ForceStartPOdl(string idxMacchina, int idxPODL, bool doConfirm, int matrOpr = 0, string dtEve = "", string dtCurr = "") { string answ = "KO"; int CurrProdStatus = 0; @@ -1879,7 +1881,7 @@ namespace MapoDb // eventuale chiusura vecchio ODL, 2 sec prima... if (currODLData.Count > 0) { - doCloseCurrODL(idxMacchina, doConfirm, qtyConf, currODLData, dtEvent.AddSeconds(-2)); + doCloseCurrODL(idxMacchina, doConfirm, qtyConf, currODLData, dtEvent.AddSeconds(-2), matrOpr); } // avvio PODL: creo nuovo ODL da promessa ed associo taODL.inizioSetupPromessa(idxPODL, MatrOpr, POdlRow.IdxMacchina, POdlRow.TCAssegnato, POdlRow.PzPallet, POdlRow.Note, dtEvent); @@ -1895,7 +1897,7 @@ namespace MapoDb // eventuale chiusura vecchio ODL if (currODLData.Count > 0) { - doCloseCurrODL(idxMacchina, doConfirm, qtyConf, currODLData, dtEvent.AddSeconds(-2)); + doCloseCurrODL(idxMacchina, doConfirm, qtyConf, currODLData, dtEvent.AddSeconds(-2), matrOpr); } // duplico PODL... inserisco nuovo record... taPODL.insertQuery(POdlRow.KeyRichiesta, POdlRow.KeyBCode, true, POdlRow.CodArticolo, POdlRow.CodGruppo, POdlRow.IdxMacchina, POdlRow.NumPezzi, POdlRow.TCAssegnato, POdlRow.DueDate, POdlRow.Priorita, POdlRow.PzPallet, POdlRow.Note); @@ -1918,7 +1920,7 @@ namespace MapoDb // eventuale chiusura vecchio ODL, 2 sec prima... if (currODLData.Count > 0) { - doCloseCurrODL(idxMacchina, doConfirm, qtyConf, currODLData, dtEvent.AddSeconds(-2)); + doCloseCurrODL(idxMacchina, doConfirm, qtyConf, currODLData, dtEvent.AddSeconds(-2), matrOpr); } // avvio PODL: creo nuovo ODL da promessa ed associo taODL.inizioSetupPromessa(idxPODL, MatrOpr, POdlRow.IdxMacchina, POdlRow.TCAssegnato, POdlRow.PzPallet, POdlRow.Note, dtEvent); @@ -4094,6 +4096,24 @@ namespace MapoDb return fatto; } + /// + /// Salvataggio YAML completo di configurazione dell'IOB + /// + /// + /// + /// + public bool setIobConfYaml(string idxMacchina, string iobConfFull) + { + bool answ = false; + // se ho un area memoria valida... + if (!string.IsNullOrEmpty(iobConfFull)) + { + // salvo! + memLayer.ML.setRSV(ConfYamlHash(idxMacchina), iobConfFull); + } + return answ; + } + /// /// Salvataggio della mappa di memoria dell'IOB x ulteriori impieghi /// @@ -4113,24 +4133,6 @@ namespace MapoDb return answ; } - /// - /// Salvataggio YAML completo di configurazione dell'IOB - /// - /// - /// - /// - public bool setIobConfYaml(string idxMacchina, string iobConfFull) - { - bool answ = false; - // se ho un area memoria valida... - if (!string.IsNullOrEmpty(iobConfFull)) - { - // salvo! - memLayer.ML.setRSV(ConfYamlHash(idxMacchina), iobConfFull); - } - return answ; - } - /// /// Restituisce il valore booleano se la macchina sia abilitata all'inserimento COMPLETO nel /// Signal Log @@ -4649,7 +4651,7 @@ namespace MapoDb } } - private bool doCloseCurrODL(string idxMacchina, bool doConfirm, int qtyConf, DS_ProdTempi.ODLDataTable currODLData, DateTime dtEvento) + private bool doCloseCurrODL(string idxMacchina, bool doConfirm, int qtyConf, DS_ProdTempi.ODLDataTable currODLData, DateTime dtEvento, int matrOpr) { DateTime adesso = DateTime.Now; bool fatto = false; @@ -4661,9 +4663,6 @@ namespace MapoDb inputComandoMapo resCmd = scriviRigaEventoBarcode(idxMacchina, idxEvento, currODLData[0].CodArticolo, "ODL-CLOSE-ATTR", 0, "", dtEvento, adesso); if (doConfirm) { - //// attendo 100 msec - //Thread.Sleep(100); - // modifico la dataEvento dtEvento.AddMilliseconds(200); // chiamo conferma produzione... @@ -4675,11 +4674,11 @@ namespace MapoDb if (confRett) { // confermo al netto dei pezzi lasciati... - fatto = confermaProdMacchinaFull(idxMacchinaSel, memLayer.ML.CRI("modoConfProd"), qtyConf, 0, 0, dtEvento); + fatto = confermaProdMacchinaFull(idxMacchinaSel, memLayer.ML.CRI("modoConfProd"), qtyConf, 0, 0, dtEvento, matrOpr); } else { - fatto = confermaProdMacchina(idxMacchinaSel, memLayer.ML.CRI("modoConfProd"), qtyConf, 0, dtEvento); + fatto = confermaProdMacchina(idxMacchinaSel, memLayer.ML.CRI("modoConfProd"), qtyConf, 0, dtEvento, matrOpr); } if (!fatto) { @@ -4691,8 +4690,6 @@ namespace MapoDb Log.Info($"Eccezione in doCloseCurrODL{Environment.NewLine}{exc}", tipoLog.EXCEPTION); } } - //// attendo 100 msec - //Thread.Sleep(100); dtEvento.AddMilliseconds(200); // chiamo chiusura MapoDbObj.taODL.forceClose(currODLData[0].IdxODL, idxMacchina, dtEvento);