diff --git a/Jenkinsfile b/Jenkinsfile index 4d6a0c47..a28a6d29 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -12,7 +12,7 @@ pipeline { steps { /* calcolo numero versione... diverso x branch MASTER/DEVELOP */ script { - withEnv(['NEXT_BUILD_NUMBER=1311']) { + withEnv(['NEXT_BUILD_NUMBER=1312']) { // env.versionNumber = VersionNumber(versionNumberString : '6.11.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true) env.versionNumber = VersionNumber(versionNumberString : '6.11.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true, overrideBuildsAllTime: '${NEXT_BUILD_NUMBER}') env.APP_NAME = 'MAPO' diff --git a/MP-IO/Controllers/IOBController.cs b/MP-IO/Controllers/IOBController.cs index 4fa383e6..6bc166c3 100644 --- a/MP-IO/Controllers/IOBController.cs +++ b/MP-IO/Controllers/IOBController.cs @@ -310,7 +310,7 @@ namespace MP_IO.Controllers } /// - /// Chiude ODL precedente ed avvia uno nuovo (duplicandolo), e CONFERMA produzione... + /// Chiude ODL precedente ed avvia uno nuovo (duplicandolo e sitemando quantità RIMANENTE), e CONFERMA produzione... /// /// GET: IOB/forceSplitOdl/SIMUL_03 /// @@ -322,7 +322,26 @@ namespace MP_IO.Controllers // attenzione! poiché nell'URL il carattere "#" fiene filtrato ci aspettiamo il carattere "|" che poi trasformiamo ora in "#" id = id.Replace("|", "#"); DataLayer DataLayerObj = new DataLayer(); - return DataLayerObj.forceSplitOdl(id); + return DataLayerObj.forceSplitOdl(id, true, true, 100); + } + + /// + /// Chiude ODL precedente ed avvia uno nuovo (duplicandolo e sitemando quantità RIMANENTE), e CONFERMA produzione... + /// + /// GET: IOB/forceSplitOdl/SIMUL_03?newQty=999 + /// + /// + /// macchina + /// Conferma tutti i pezzi prodotti + /// DUPLICA la quantità nel nuovo ODL da quanto PRODOTTO nel vecchio + /// Valore per arrotondamento quantità richeista (eccesso) + /// Json contenente la riga di stato macchina + public string forceSplitOdl(string id, bool doConfirm, bool qtyFromLast, int roundStep = 100) + { + // attenzione! poiché nell'URL il carattere "#" fiene filtrato ci aspettiamo il carattere "|" che poi trasformiamo ora in "#" + id = id.Replace("|", "#"); + DataLayer DataLayerObj = new DataLayer(); + return DataLayerObj.forceSplitOdl(id, doConfirm, qtyFromLast, roundStep); } /// diff --git a/MP-TAB/WebUserControls/mod_ODL.ascx.cs b/MP-TAB/WebUserControls/mod_ODL.ascx.cs index baa0357f..457b7e2f 100644 --- a/MP-TAB/WebUserControls/mod_ODL.ascx.cs +++ b/MP-TAB/WebUserControls/mod_ODL.ascx.cs @@ -819,7 +819,7 @@ namespace MoonProTablet.WebUserControls try { // effettuo split su nuovo ODL - DataLayerObj.taODL.splitODL(idxODL, DataLayerObj.MatrOpr, idxMacchinaFix, TCAssegnato(idxODL), PzPallet, string.Format("Fine Produzione, Sospensione ODL {0}, generato residuo con pari TCiclo: {1}", idxODL, TCAssegnato(idxODL)), false); + DataLayerObj.taODL.splitODL(idxODL, DataLayerObj.MatrOpr, idxMacchinaFix, TCAssegnato(idxODL), PzPallet, string.Format("Fine Produzione, Sospensione ODL {0}, generato residuo con pari TCiclo: {1}", idxODL, TCAssegnato(idxODL)), false, 0); // processo chiusura setup processaEvento(idxMacchinaFix, idxEvento, String.Format("Registrata fine produzione per ODL {0}, nuovo ODL per quantità residua", idxODL), idxODL); @@ -830,7 +830,7 @@ namespace MoonProTablet.WebUserControls string _idxOdl = idxOdlAltraMacc; int.TryParse(_idxOdl, out idxOdlAltra); // effettuo split su nuovo ODL - DataLayerObj.taODL.splitODL(idxOdlAltra, DataLayerObj.MatrOpr, idxMaccAltraTav, TCAssegnato(idxOdlAltra), PzPallet, string.Format("Fine Produzione, Sospensione ODL {0}, generato residuo con pari TCiclo: {1}", idxOdlAltra, TCAssegnato(idxOdlAltra)), false); + DataLayerObj.taODL.splitODL(idxOdlAltra, DataLayerObj.MatrOpr, idxMaccAltraTav, TCAssegnato(idxOdlAltra), PzPallet, string.Format("Fine Produzione, Sospensione ODL {0}, generato residuo con pari TCiclo: {1}", idxOdlAltra, TCAssegnato(idxOdlAltra)), false, 0); // processo chiusura setup processaEvento(idxMaccAltraTav, idxEvento, String.Format("Registrata fine produzione per ODL {0}, nuovo ODL per quantità residua", idxOdlAltra), idxOdlAltra); } @@ -941,7 +941,7 @@ namespace MoonProTablet.WebUserControls confermaProdOdl(false); // effettuo split su nuovo ODL - DataLayerObj.taODL.splitODL(currODL, DataLayerObj.MatrOpr, idxMacchinaFix, TCRichAttr, PzPallet, txtNote.Text, true); + DataLayerObj.taODL.splitODL(currODL, DataLayerObj.MatrOpr, idxMacchinaFix, TCRichAttr, PzPallet, txtNote.Text, true, 0); // resetto ODL su redis... DataLayerObj.emptyCurrODL(idxMacchinaFix); @@ -1037,12 +1037,12 @@ namespace MoonProTablet.WebUserControls try { idxODL = DataLayerObj.taODL.getByMacchina(idxMacchinaFix)[0].IdxODL; - DataLayerObj.taODL.splitODL(idxODL, DataLayerObj.MatrOpr, idxMacchinaFix, TCAssegnato(idxODL), PzPallet, string.Format("inizio attrezzaggio, Sospensione ODL {0}, generato residuo con pari TCiclo: {1}", idxODL, TCAssegnato(idxODL)), false); + DataLayerObj.taODL.splitODL(idxODL, DataLayerObj.MatrOpr, idxMacchinaFix, TCAssegnato(idxODL), PzPallet, string.Format("inizio attrezzaggio, Sospensione ODL {0}, generato residuo con pari TCiclo: {1}", idxODL, TCAssegnato(idxODL)), false, 0); // se è multi processo ANCHE x altra tavola... if (isMulti) { int _idxOdl = DataLayerObj.taODL.getByMacchina(idxMaccAltraTav)[0].IdxODL; - DataLayerObj.taODL.splitODL(_idxOdl, DataLayerObj.MatrOpr, idxMaccAltraTav, TCAssegnato(_idxOdl), PzPallet, string.Format("inizio attrezzaggio, Sospensione ODL {0}, generato residuo con pari TCiclo: {1}", _idxOdl, TCAssegnato(_idxOdl)), false); + DataLayerObj.taODL.splitODL(_idxOdl, DataLayerObj.MatrOpr, idxMaccAltraTav, TCAssegnato(_idxOdl), PzPallet, string.Format("inizio attrezzaggio, Sospensione ODL {0}, generato residuo con pari TCiclo: {1}", _idxOdl, TCAssegnato(_idxOdl)), false, 0); } } catch diff --git a/MapoDb/DS_ProdTempi.xsd b/MapoDb/DS_ProdTempi.xsd index a00d9821..842ea089 100644 --- a/MapoDb/DS_ProdTempi.xsd +++ b/MapoDb/DS_ProdTempi.xsd @@ -290,7 +290,7 @@ ORDER BY idxODL DESC - + dbo.stp_ODL_fixMachineSlave @@ -396,7 +396,7 @@ ORDER BY idxODL DESC - + dbo.stp_ODL_inizioSetup @@ -412,7 +412,7 @@ ORDER BY idxODL DESC - + dbo.stp_ODL_inizioSetupPromessa @@ -428,7 +428,7 @@ ORDER BY idxODL DESC - + dbo.stp_ODL_inizioSetupPromessaPostuma @@ -441,7 +441,7 @@ ORDER BY idxODL DESC - + dbo.stp_ODL_insertProvv @@ -457,7 +457,7 @@ ORDER BY idxODL DESC - + dbo.stp_ODL_insertQuery @@ -475,7 +475,7 @@ ORDER BY idxODL DESC - + dbo.stp_ODL_insPostumo @@ -498,7 +498,7 @@ ORDER BY idxODL DESC - + dbo.stp_ODL_split @@ -511,11 +511,12 @@ ORDER BY idxODL DESC + - + dbo.stp_ODL_updateQta @@ -528,7 +529,7 @@ ORDER BY idxODL DESC - + dbo.stp_ODL_update @@ -548,7 +549,7 @@ ORDER BY idxODL DESC - + dbo.stp_ODL_updateSetup @@ -2886,7 +2887,7 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + @@ -2967,7 +2968,7 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + @@ -2979,7 +2980,7 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + @@ -3004,7 +3005,7 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + @@ -3042,7 +3043,7 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + @@ -3081,7 +3082,7 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + @@ -3147,7 +3148,7 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + @@ -3224,7 +3225,7 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + @@ -3259,7 +3260,7 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + @@ -3281,7 +3282,7 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + diff --git a/MapoDb/DS_ProdTempi.xss b/MapoDb/DS_ProdTempi.xss index c903ecb9..124994b5 100644 --- a/MapoDb/DS_ProdTempi.xss +++ b/MapoDb/DS_ProdTempi.xss @@ -4,32 +4,32 @@ Changes to this file may cause incorrect behavior and will be lost if the code is regenerated. --> - + - - - + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MapoDb/DS_ProdTempi1.Designer.cs b/MapoDb/DS_ProdTempi1.Designer.cs index ab00ab4d..4a928be7 100644 --- a/MapoDb/DS_ProdTempi1.Designer.cs +++ b/MapoDb/DS_ProdTempi1.Designer.cs @@ -17619,6 +17619,7 @@ SELECT IdxMacchina, CodArticolo, DataOraRif, TCMedio, PzProd FROM TempiCicloRile this._commandCollection[21].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@PzPallet", global::System.Data.SqlDbType.Int, 4, global::System.Data.ParameterDirection.Input, 10, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); this._commandCollection[21].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Note", global::System.Data.SqlDbType.NVarChar, 2500, global::System.Data.ParameterDirection.Input, 0, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); this._commandCollection[21].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@StartNewOdl", global::System.Data.SqlDbType.Bit, 1, global::System.Data.ParameterDirection.Input, 1, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._commandCollection[21].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@QtyRich", global::System.Data.SqlDbType.Int, 4, global::System.Data.ParameterDirection.Input, 10, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); this._commandCollection[22] = new global::System.Data.SqlClient.SqlCommand(); this._commandCollection[22].Connection = this.Connection; this._commandCollection[22].CommandText = "dbo.stp_ODL_updateQta"; @@ -18372,7 +18373,7 @@ SELECT IdxMacchina, CodArticolo, DataOraRif, TCMedio, PzProd FROM TempiCicloRile [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] - public virtual int splitODL(global::System.Nullable idxODL, global::System.Nullable MatrOpr, string IdxMacchina, global::System.Nullable TCRichAttr, global::System.Nullable PzPallet, string Note, global::System.Nullable StartNewOdl) { + public virtual int splitODL(global::System.Nullable idxODL, global::System.Nullable MatrOpr, string IdxMacchina, global::System.Nullable TCRichAttr, global::System.Nullable PzPallet, string Note, global::System.Nullable StartNewOdl, global::System.Nullable QtyRich) { global::System.Data.SqlClient.SqlCommand command = this.CommandCollection[21]; if ((idxODL.HasValue == true)) { command.Parameters[1].Value = ((int)(idxODL.Value)); @@ -18416,6 +18417,12 @@ SELECT IdxMacchina, CodArticolo, DataOraRif, TCMedio, PzProd FROM TempiCicloRile else { command.Parameters[7].Value = global::System.DBNull.Value; } + if ((QtyRich.HasValue == true)) { + command.Parameters[8].Value = ((int)(QtyRich.Value)); + } + else { + command.Parameters[8].Value = global::System.DBNull.Value; + } global::System.Data.ConnectionState previousConnectionState = command.Connection.State; if (((command.Connection.State & global::System.Data.ConnectionState.Open) != global::System.Data.ConnectionState.Open)) { diff --git a/MapoDb/DataLayer.cs b/MapoDb/DataLayer.cs index 9b474dcd..76ecde31 100644 --- a/MapoDb/DataLayer.cs +++ b/MapoDb/DataLayer.cs @@ -1441,7 +1441,7 @@ namespace MapoDb /// /// /// - public string forceSplitOdl(string idxMacchina) + public string forceSplitOdl(string idxMacchina, bool doConfirm, bool qtyFromLast, int roundStep = 100) { string answ = "KO"; // verifico NON CI SIA un veto a NUOVI split... 2 min di default... @@ -1451,6 +1451,30 @@ namespace MapoDb { // registro VETO x altri split... 2 minuti memLayer.ML.setRSV(redKey, $"Inizio SPLIT-ODL {DateTime.Now}", 300); + // calcolo la qta da gestire + int qtyConf = 0; + int qtyNew = 0; + if (doConfirm) + { + DS_ProdTempi.stp_PzProd_getByMacchinaRow rigaProd; + try + { + rigaProd = taPzProd2conf.GetData(idxMacchina)[0]; + qtyConf = rigaProd.pezziNonConfermati; + // calcolo nuovi pezzi da confermare + if (qtyFromLast) + { + roundStep = roundStep == 0 ? 1 : roundStep; + double ratio = (double)qtyConf / roundStep; + qtyNew = (int)Math.Round(Math.Ceiling(ratio) * roundStep, 0); + } + } + catch (Exception exc) + { + logger.lg.scriviLog(string.Format("Errore recupero pezzi da confermare per la macchina {0}{1}{2}", idxMacchina, Environment.NewLine, exc), tipoLog.ERROR); + } + } + // proseguo DS_ProdTempi.ODLDataTable currData = null; DateTime adesso = DateTime.Now; @@ -1463,17 +1487,21 @@ namespace MapoDb { // registro un evento di inizio attrezzaggio (idxTipoEv = 2) int idxEvento = 2; - logger.lg.scriviLog($"Invio evento ODL-SPLIT per macchina {idxMacchina}, evento {idxEvento}, articolo {currData[0].CodArticolo}", tipoLog.INFO); + logger.lg.scriviLog($"Invio evento ODL-SPLIT per macchina {idxMacchina}, evento {idxEvento}, articolo {currData[0].CodArticolo}, qty confermata {qtyConf}, nuova qty {qtyNew}", tipoLog.INFO); + inputComandoMapo resCmd = scriviRigaEventoBarcode(idxMacchina, idxEvento, currData[0].CodArticolo, "ODL-SPLIT", 0, "", adesso, adesso); - // attendo 1 sec - Thread.Sleep(1000); - adesso = DateTime.Now; - // chiamo conferma produzione... - taPzProd2conf.stp_ConfermaProduzCompleta(currData[0].IdxMacchina, MatrOpr, DateTime.Now.AddDays(-10), DateTime.Now, 0, 0, 1, DateTime.Now, false); + if (doConfirm) + { + // attendo 1 sec + Thread.Sleep(1000); + adesso = DateTime.Now; + // chiamo conferma produzione... + taPzProd2conf.stp_ConfermaProduzCompleta(currData[0].IdxMacchina, MatrOpr, DateTime.Now.AddDays(-10), DateTime.Now, qtyConf, 0, 1, DateTime.Now, false); + } // attendo 500 msec Thread.Sleep(500); // chiamo splitOdl - MapoDbObj.taODL.splitODL(currData[0].IdxODL, 0, idxMacchina, currData[0].TCRichAttr, currData[0].PzPallet, $"Nuovo ODL da forceSplitOdl", true); + MapoDbObj.taODL.splitODL(currData[0].IdxODL, 0, idxMacchina, currData[0].TCRichAttr, currData[0].PzPallet, $"Nuovo ODL da forceSplitOdl", true, qtyNew); // attendo 1000 msec Thread.Sleep(1000); adesso = DateTime.Now;