From 82e106a49807546389fd55579c12c6bc03e5d464 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Wed, 8 Nov 2023 10:30:26 +0100 Subject: [PATCH 01/14] fix favicon --- MP-TAB-SERV/Pages/_Layout.cshtml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/MP-TAB-SERV/Pages/_Layout.cshtml b/MP-TAB-SERV/Pages/_Layout.cshtml index e190a339..56edd020 100644 --- a/MP-TAB-SERV/Pages/_Layout.cshtml +++ b/MP-TAB-SERV/Pages/_Layout.cshtml @@ -7,19 +7,21 @@ - + @* *@ + + + + @* *@ - - @* *@ From c382c09d69d74b3462762f5366857a853724f431 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Wed, 8 Nov 2023 18:04:27 +0100 Subject: [PATCH 02/14] Completata gestione start/end setup --- MP-TAB-SERV/Components/OdlMan.razor | 2 +- MP-TAB-SERV/Components/OdlMan.razor.cs | 155 ++++++++++++++++++++- MP-TAB-SERV/MP-TAB-SERV.csproj | 2 +- MP-TAB-SERV/Pages/_Layout.cshtml | 1 - MP-TAB-SERV/Resources/ChangeLog.html | 2 +- MP-TAB-SERV/Resources/VersNum.txt | 2 +- MP-TAB-SERV/Resources/manifest.xml | 2 +- MP-TAB-SERV/appsettings.json | 7 +- MP.Data/Controllers/MpTabController.cs | 59 ++++++++ MP.Data/DatabaseModels/ElencoLottiModel.cs | 48 +++++++ MP.Data/MoonPro_MagContext.cs | 86 ++++++++++++ MP.Data/Services/TabDataService.cs | 47 +++++++ 12 files changed, 399 insertions(+), 14 deletions(-) create mode 100644 MP.Data/DatabaseModels/ElencoLottiModel.cs create mode 100644 MP.Data/MoonPro_MagContext.cs diff --git a/MP-TAB-SERV/Components/OdlMan.razor b/MP-TAB-SERV/Components/OdlMan.razor index 380cd23c..09751adb 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor +++ b/MP-TAB-SERV/Components/OdlMan.razor @@ -182,7 +182,7 @@
- +
diff --git a/MP-TAB-SERV/Components/OdlMan.razor.cs b/MP-TAB-SERV/Components/OdlMan.razor.cs index 1bee710b..f5da1199 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor.cs +++ b/MP-TAB-SERV/Components/OdlMan.razor.cs @@ -1,4 +1,6 @@ using global::Microsoft.AspNetCore.Components; +using Microsoft.JSInterop; +using MP.Data; using MP.Data.DatabaseModels; using MP.Data.Objects; using MP.Data.Services; @@ -25,12 +27,14 @@ namespace MP_TAB_SERV.Components #region Protected Fields - protected bool enableRPO = true; - protected bool forceCloseOdl = true; + private bool enableRPO = true; + private bool enableSchedaTecnica = false; + private bool forceCloseOdl = true; + private List emailAdmDest = new List(); protected PzProdModel? prodMacchina = null; - protected int PzPallet = 1; + private int PzPallet = 1; #endregion Protected Fields @@ -162,6 +166,9 @@ namespace MP_TAB_SERV.Components enableSplitODL = SMServ.GetConfBool("enableSplitODL"); modoConfProd = SMServ.GetConfInt("modoConfProd"); enableRPO = SMServ.GetConfBool("enableRPO"); + enableSchedaTecnica = SMServ.GetConfBool("enableSchedaTecnica"); + string rawEmailDest = SMServ.GetConf("_adminEmail"); + emailAdmDest = rawEmailDest.Split(',').ToList(); if (RecMSE != null) { IdxMaccSel = RecMSE.IdxMacchina; @@ -192,6 +199,119 @@ namespace MP_TAB_SERV.Components await Task.Delay(10); } + [Inject] + protected MailService MailServ { get; set; } = null!; + + protected async Task SendWarnTcChangeReq(int idxOdl, decimal tcAss, decimal tcRich) + { + // carico altri parametri email... + string oggetto = SMServ.GetConf("oggettoChgTc"); + string corpoChgTc = SMServ.GetConf("corpoChgTc"); + string mittente = SMServ.GetConf("_fromEmail"); + string baseUrlAdmin = SMServ.GetConf("baseUrlAdmin"); + string pageUrlApprODL = SMServ.GetConf("pageUrlApprODL"); + string pageUrl = $"{baseUrlAdmin}{pageUrlApprODL}"; + string corpo = $"ODL: {idxOdl} | TC Assegnato: {tcAss} | TC Rich: {tcRich}{Environment.NewLine}{Environment.NewLine}"; + corpo += string.Format(corpoChgTc, Environment.NewLine, pageUrl); + corpo = corpo.Replace($"{Environment.NewLine}", "
"); + MailKitMailData mData = new MailKitMailData() + { + From = mittente, + To = emailAdmDest, + Subject = oggetto, + Body = corpo + }; + bool done = await MailServ.SendAsync(mData); + if (done) + { + Log.Info($"Inviata email notifica TC da approvare per ODL {idxOdl} inviato a {string.Join(",", emailAdmDest)}"); + } + else + { + Log.Error($"Errore in invio email notifica TC da approvare per ODL {idxOdl} | tentato invio a {string.Join(",", emailAdmDest)}"); + } + } + + /// + /// Registrazione Fine Setup / Inizio Produzione + /// + /// + /// + protected async Task EndSetup() + { + await confermaProdOdl(true); + // se vedesse TCRich a zero lo reimposta a quello assegnato... + if (tcRichAttr == 0) + { + tcRichAttr = currPodl.Tcassegnato; + } + // leggo idxOdl da ultimo odl attivo x macchina + var currOdl = await TabDServ.OdlCurrByMacc(IdxMaccSel, false); + int idxODLStart = currOdl.IdxOdl; + int idxEvento = 1; // !!!HARD CODED + + // aggiorno note e tempo setup + await TabDServ.OdlUpdate(idxODLStart, MatrOpr, tcRichAttr, PzPallet, noteAttr); + // controllo se TC Assegnato != TCRichiesto allora invio email x verifiche... + if (currOdl.Tcassegnato != tcRichAttr) + { + // invio email! + await SendWarnTcChangeReq(idxODLStart, currOdl.Tcassegnato, tcRichAttr); + } + // processo chiusura setup + string evText = "Registrata inizio produzione per ODL {0}"; + StringBuilder sb = new StringBuilder(); + sb.AppendLine(String.Format(evText, idxODLStart)); + await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLStart); + // indico INIZIO SETUP su REDIS come EXE della macchina... + string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now); + TabDServ.addTask4Machine(IdxMaccSel, taskType.stopSetup, $"TS:{ts}|MATR:{MatrOpr}|ODL:{idxODLStart}"); + // se è multi processo chiusura setup x altra tavola... + if (isMulti) + { + sb.AppendLine("---"); + var tabOdlAltra = await TabDServ.OdlCurrByMacc(idxMaccAltraTav, true); + int idxOdlAltra = tabOdlAltra.IdxOdl; + sb.AppendLine(String.Format(evText, idxOdlAltra)); + await processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra); + // invio su seconda tavola + TabDServ.addTask4Machine(idxMaccAltraTav, taskType.stopSetup, $"TS:{ts}|MATR: {MatrOpr}| Master Machine: {IdxMaccSel}"); + } + // se è master --> chiamo update child! + if (isMaster) + { + // invio eventi ad IOB slave... + var slaveList = SMServ.ListM2S + .Where(x => x.IdxMacchina.Equals(IdxMaccSel, StringComparison.InvariantCultureIgnoreCase)) + .ToList(); + foreach (var machine in slaveList) + { + // invio chiusura attrezzaggio + ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now); + string outData = $"TS:{ts}|MATR:{MatrOpr}|ODL:{idxODLStart}"; + await processaEvento(machine.IdxMacchinaSlave, idxEvento, sb.ToString(), idxODLStart); + TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.fixStopSetup, outData); + } + + // hard coded 60gg last + await TabDServ.OdlFixMachineSlave(IdxMaccSel, 60, 1); + } + // se c'è gestione SchedaTecnica --> chiamo procedura update x lotti + if (enableSchedaTecnica) + { + await TabDServ.ElencoLottiUpsertByOdl(idxODLStart, true); + } + + // riporto stringa + lblOut = sb.ToString().Replace("---", "
"); + // update buttons... + checkAll(); + // imposto odl... + idxOdl = idxODLStart; + // faccio refresh e riporto + await refreshData(); + } + /// /// Dichiarazione inizio attrezzaggio PODL indicato /// @@ -273,7 +393,7 @@ namespace MP_TAB_SERV.Components string evText = "Registrato inizio attrezzaggio per ODL {0}"; StringBuilder sb = new StringBuilder(); sb.AppendLine(String.Format(evText, idxODL_curr)); - processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODL_curr); + await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODL_curr); // indico INIZIO SETUP su REDIS come EXE della macchina... string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now); string outData = $"TS:{ts}|MATR:{MatrOpr}|ODL:{idxODL_curr}"; @@ -298,7 +418,7 @@ namespace MP_TAB_SERV.Components { // calcolo gli slave... var slaveList = SMServ.ListM2S - .Where(x => x.IdxMacchina.Equals(RecMSE?.IdxMacchina, StringComparison.InvariantCultureIgnoreCase)) + .Where(x => x.IdxMacchina.Equals(IdxMaccSel, StringComparison.InvariantCultureIgnoreCase)) .ToList(); foreach (var machine in slaveList) { @@ -371,6 +491,8 @@ namespace MP_TAB_SERV.Components // refresh finale checkBtnStatus(); fixSplitBtn(false); + // faccio refresh e riporto + await refreshData(); #if false // sollevo evento! if (eh_reqUpdate != null) @@ -380,6 +502,29 @@ namespace MP_TAB_SERV.Components #endif } + [Inject] + protected StatusData MDataService { get; set; } = null!; + + protected async Task refreshData() + { + // refresh tabella dati tablet... + TabDServ.RicalcMse(IdxMaccSel, 0); + // rileggo e salvo.. + var ListMSE = await MDataService.MseGetAll(); + if (ListMSE != null) + { + // salvo in LocalStorage... + await MServ.SaveMse(ListMSE); +#if false + // aggiorno MSE attuale + RecMSE = ListMSE.Find(x => x.IdxMacchina == IdxMaccSel); +#endif + await E_Updated.InvokeAsync(ListMSE); + } + } + + + protected void togOdlDetail() { showOdlDetail = !showOdlDetail; diff --git a/MP-TAB-SERV/MP-TAB-SERV.csproj b/MP-TAB-SERV/MP-TAB-SERV.csproj index 940aadd3..d0a409f7 100644 --- a/MP-TAB-SERV/MP-TAB-SERV.csproj +++ b/MP-TAB-SERV/MP-TAB-SERV.csproj @@ -3,7 +3,7 @@ net6.0 enable - 6.16.2311.810 + 6.16.2311.817 enable MP_TAB_SERV diff --git a/MP-TAB-SERV/Pages/_Layout.cshtml b/MP-TAB-SERV/Pages/_Layout.cshtml index 56edd020..24f41386 100644 --- a/MP-TAB-SERV/Pages/_Layout.cshtml +++ b/MP-TAB-SERV/Pages/_Layout.cshtml @@ -21,7 +21,6 @@ - @* *@ @* *@ diff --git a/MP-TAB-SERV/Resources/ChangeLog.html b/MP-TAB-SERV/Resources/ChangeLog.html index 2715a404..67ba3aa3 100644 --- a/MP-TAB-SERV/Resources/ChangeLog.html +++ b/MP-TAB-SERV/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MAPOSPEC -

Versione: 6.16.2311.810

+

Versione: 6.16.2311.817


Note di rilascio:
  • diff --git a/MP-TAB-SERV/Resources/VersNum.txt b/MP-TAB-SERV/Resources/VersNum.txt index 44006065..6e276880 100644 --- a/MP-TAB-SERV/Resources/VersNum.txt +++ b/MP-TAB-SERV/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2311.810 +6.16.2311.817 diff --git a/MP-TAB-SERV/Resources/manifest.xml b/MP-TAB-SERV/Resources/manifest.xml index 61987369..8078a58a 100644 --- a/MP-TAB-SERV/Resources/manifest.xml +++ b/MP-TAB-SERV/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2311.810 + 6.16.2311.817 https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/MP-TAB-SERV.zip https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/ChangeLog.html false diff --git a/MP-TAB-SERV/appsettings.json b/MP-TAB-SERV/appsettings.json index a1811dec..57300304 100644 --- a/MP-TAB-SERV/appsettings.json +++ b/MP-TAB-SERV/appsettings.json @@ -10,10 +10,11 @@ "ConnectionStrings": { "Redis": "iis01.egalware.com:6379,DefaultDatabase=1,connectTimeout=5000,syncTimeout=5000,asyncTimeout=5000,abortConnect=false,ssl=false", //"Redis": "localhost:6379,DefaultDatabase=1,connectTimeout=5000,syncTimeout=5000,asyncTimeout=5000,abortConnect=false,ssl=false", - "MP.All": "Server=SQL2016DEV;Database=MoonPro; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=Blazor.ServerApp;", - "MP.Mon": "Server=SQL2016DEV;Database=MoonPro; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=Blazor.ServerApp;", + "MP.All": "Server=SQL2016DEV;Database=MoonPro; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.TAB3;", + "MP.Mon": "Server=SQL2016DEV;Database=MoonPro; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.TAB3;", "Mp.IS": "Server=SQL2016DEV;Database=MoonPro_IS_EdilChim; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.INVE;", - "MP.Tab": "Server=SQL2016DEV;Database=MoonPro; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=Blazor.ServerApp;" + "MP.Tab": "Server=SQL2016DEV;Database=MoonPro; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.TAB3;", + "MP.Mag": "Server=SQL2016DEV;Database=MoonPro_MAG; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.TAB3;" }, "OptConf": { "msRefresh": "2000", diff --git a/MP.Data/Controllers/MpTabController.cs b/MP.Data/Controllers/MpTabController.cs index f6210b4a..40800ec6 100644 --- a/MP.Data/Controllers/MpTabController.cs +++ b/MP.Data/Controllers/MpTabController.cs @@ -487,6 +487,34 @@ namespace MP.Data.Controllers _configuration = null; } + /// + /// Fix ODL per Elenco Lotti + /// + /// + /// + /// + public bool ElencoLottiUpsertByOdl(int idxOdl, bool flgStorico) + { + bool fatto = false; + using (var dbCtx = new MoonPro_MagContext(_configuration)) + { + try + { + var IdxOdl = new SqlParameter("@IdxOdl", idxOdl); + var FlgStorico = new SqlParameter("@flgStorico", flgStorico); + var result = dbCtx + .Database + .ExecuteSqlRaw("EXEC stp_EL_UpsertByOdl @IdxMacchina, @flgStorico, @DoInsert", IdxOdl, FlgStorico); + fatto = result != 0; + } + catch (Exception exc) + { + Log.Error($"Eccezione durante ElLottiUpsertByOdl{Environment.NewLine}{exc}"); + } + } + return fatto; + } + //stp_DDB_getNextByMacchinaFrom /// /// Eliminazione record EventList (SE trovato) @@ -1016,6 +1044,37 @@ namespace MP.Data.Controllers return fatto; } + /// + /// Update ODL (es: in setup x chiusura attrezzaggio) + /// + /// + /// + /// + public bool OdlUpdate(int idxODL, int matrOpr, decimal tCRichAttr, int pzPallet, string note) + { + bool answ = false; + using (var dbCtx = new MoonProContext(_configuration)) + { + try + { + var IdxODL = new SqlParameter("@idxODL", idxODL); + var MatrOpr = new SqlParameter("@MatrOpr", matrOpr); + var TCRichAttr = new SqlParameter("@TCRichAttr", tCRichAttr); + var PzPallet = new SqlParameter("@PzPallet", pzPallet); + var Note = new SqlParameter("@Note", note); + var result = dbCtx + .Database + .ExecuteSqlRaw("EXEC stp_ODL_updateSetup @IdxODL, @MatrOpr, @TCRichAttr, @PzPallet, @Note", IdxODL, MatrOpr, TCRichAttr, PzPallet, Note); + answ = result != 0; + } + catch (Exception exc) + { + Log.Error($"Eccezione durante OdlUpdate{Environment.NewLine}{exc}"); + } + } + return answ; + } + /// /// Stato prod macchina /// diff --git a/MP.Data/DatabaseModels/ElencoLottiModel.cs b/MP.Data/DatabaseModels/ElencoLottiModel.cs new file mode 100644 index 00000000..509e8f61 --- /dev/null +++ b/MP.Data/DatabaseModels/ElencoLottiModel.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + + +#nullable disable +// +// This is here so CodeMaid doesn't reorganize this document +// +namespace MP.Data.DatabaseModels +{ + [Table("ElencoLotti")] + public partial class ElencoLottiModel + { + #region Public Properties + + [Key] + public string Lotto { get; set; } = ""; + public int IdxODL { get; set; } = 0; + [MaxLength(50)] + public string RifExt { get; set; } = ""; + [MaxLength(50)] + public string TipoLotto { get; set; } = ""; + [MaxLength(50), Column("CodArt")] + public string CodArticolo { get; set; } = ""; + [MaxLength(50)] + public string CodStato { get; set; } = ""; + [MaxLength(50)] + public string Origine { get; set; } = ""; + public DateTime? DtCrea { get; set; } + [MaxLength(250)] + public string Note { get; set; } = ""; + public decimal QtaOrig { get; set; } = 0; + public int NumUdc { get; set; } = 1; + public decimal QtaCurr { get; set; } = 0; + public DateTime? DtMod { get; set; } + public bool Attivo { get; set; } = false; + [MaxLength(250)] + public string DescrArt { get; set; } = ""; + [MaxLength(50)] + public string CodArtExt { get; set; } = ""; + [MaxLength(50)] + public string DescStato { get; set; } = ""; + + #endregion Public Properties + } +} \ No newline at end of file diff --git a/MP.Data/MoonPro_MagContext.cs b/MP.Data/MoonPro_MagContext.cs new file mode 100644 index 00000000..84436a9a --- /dev/null +++ b/MP.Data/MoonPro_MagContext.cs @@ -0,0 +1,86 @@ +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.Extensions.Configuration; +using MP.Data.DatabaseModels; +using NLog; + +#nullable disable +// +// This is here so CodeMaid doesn't reorganize this document +// +namespace MP.Data +{ + public partial class MoonPro_MagContext : DbContext + { + #region Private Fields + + private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); + + private IConfiguration _configuration; + + #endregion Private Fields + + #region Public Constructors + + /// + /// Indispensabile x prima generazione migrations EFCore + /// + + [Obsolete("This constructor should never be used directly, and is only needed to generate entityframework stuff. Connection string can be adapted as pleased.")] + public MoonPro_MagContext() + { + } + + public MoonPro_MagContext(IConfiguration configuration) + { + _configuration = configuration; + } + + public MoonPro_MagContext(DbContextOptions options) : base(options) + { + } + + #endregion Public Constructors + + #region Public Properties + + + public virtual DbSet DbSetElLotti { get; set; } + + #endregion Public Properties + + #region Private Methods + + partial void OnModelCreatingPartial(ModelBuilder modelBuilder); + + #endregion Private Methods + + #region Protected Methods + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + if (!optionsBuilder.IsConfigured) + { + string connString = _configuration.GetConnectionString("Mp.Mag"); + if (!string.IsNullOrEmpty(connString)) + { + optionsBuilder.UseSqlServer(connString); + } + else + { + optionsBuilder.UseSqlServer("Server=SQL2016DEV;Database=MoonPro_MAG;Trusted_Connection=True;"); + } + } + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.HasAnnotation("Relational:Collation", "SQL_Latin1_General_CP1_CI_AS"); + + OnModelCreatingPartial(modelBuilder); + } + + #endregion Protected Methods + } +} \ No newline at end of file diff --git a/MP.Data/Services/TabDataService.cs b/MP.Data/Services/TabDataService.cs index 5aaec095..53f1539a 100644 --- a/MP.Data/Services/TabDataService.cs +++ b/MP.Data/Services/TabDataService.cs @@ -574,6 +574,29 @@ namespace MP.Data.Services dbInveController.Dispose(); } + /// + /// Fix ODL per Elenco Lotti + /// + /// + /// + /// + public async Task ElencoLottiUpsertByOdl(int idxOdl, bool flgStorico) + { + bool answ = false; + try + { + // inserisco evento + answ = dbTabController.ElencoLottiUpsertByOdl(idxOdl, flgStorico); + await FlushCache("EL"); + } + catch (Exception exc) + { + string logMsg = $"Eccezione in ElencoLottiUpsertByOdl | idxOdl: {idxOdl} | flgStorico: {flgStorico}{Environment.NewLine}{exc}"; + Log.Error(logMsg); + } + return answ; + } + /// /// Elimina una riga in EventList se trovata /// @@ -1298,6 +1321,30 @@ namespace MP.Data.Services return answ; } + /// + /// Update ODL (es: in setup x chiusura attrezzaggio) + /// + /// + /// + /// + public async Task OdlUpdate(int idxODL, int matrOpr, decimal tCRichAttr, int pzPallet, string note) + { + bool answ = false; + try + { + // inserisco evento + answ = dbTabController.OdlUpdate(idxODL, matrOpr, tCRichAttr, pzPallet, note); + await FlushCache("ODL"); + await FlushCache("PODL"); + } + catch (Exception exc) + { + string logMsg = $"Eccezione in OdlUpdate | idxODL: {idxODL} | matrOpr: {matrOpr} | tCRichAttr: {tCRichAttr} | pzPallet: {pzPallet} | note: {note}{Environment.NewLine}{exc}"; + Log.Error(logMsg); + } + return answ; + } + /// /// Stato prod macchina /// From 14266feb5c59c9e9ceda7d0dc1cb250a9b173a03 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Wed, 8 Nov 2023 18:48:52 +0100 Subject: [PATCH 03/14] Altro update avanzamento progress --- MP-TAB-SERV/Components/OdlMan.razor | 420 +++++++++++++------------ MP-TAB-SERV/Components/OdlMan.razor.cs | 339 ++++++++++++++------ MP-TAB-SERV/MP-TAB-SERV.csproj | 2 +- MP-TAB-SERV/Resources/ChangeLog.html | 2 +- MP-TAB-SERV/Resources/VersNum.txt | 2 +- MP-TAB-SERV/Resources/manifest.xml | 2 +- MP-TAB-SERV/_Imports.razor | 1 + 7 files changed, 454 insertions(+), 314 deletions(-) diff --git a/MP-TAB-SERV/Components/OdlMan.razor b/MP-TAB-SERV/Components/OdlMan.razor index 09751adb..94f78ec3 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor +++ b/MP-TAB-SERV/Components/OdlMan.razor @@ -3,231 +3,239 @@
    - @if (needConfProd) + @if (isProcessing) { -
    -
    @lblWarnHead
    -
    @lblWarnBody @numPz2Conf.ToString("N0") pz NC
    -
    - @if (!odlOk) - { -
    - -
    - } + + } else { -
    - Slave machine man -
    -
    - Check articolo in revisione -
    - @if (cancelSetupEnabled) + @if (needConfProd) { -
    - +
    +
    @lblWarnHead
    +
    @lblWarnBody @numPz2Conf.ToString("N0") pz NC
    - } - - @if (showOdlDetail) - { -
    -
    -
    -

    Verifica parametri attrezzaggio

    -
    -
    -
    -
    -
    - P.ODL: -
    -
    - @currPodl.IdxPromessa.ToString("N0") -
    -
    -
    -
    - Rif: -
    -
    - @currPodl.KeyRichiesta -
    -
    -
    -
    - Cod: -
    -
    - @currPodl.CodArticolo -
    -
    -
    -
    -
    -
    - Articolo: -
    -
    - @currPodl.DescArticolo -
    -
    -
    -
    -
    -
    - Pezzi: -
    -
    - @currPodl.NumPezzi.ToString("N0") -
    -
    -
    -
    - TCiclo: -
    -
    - @currPodl.Tcassegnato.ToString("N2") -
    -
    -
    -
    - Pz/pallet: -
    -
    - @currPodl.PzPallet -
    -
    -
    -
    - -
    -
    - } - -
    -
    - - -
    - - -
    -
    -
    -
    - @if (idxPOdlSel > 0) + @if (!odlOk) { - - } - else - { - - } -
    - @if (idxPOdlSel > 0) - { -
    - - -
    -
    - -
    -
    - Pz Pallet -
    - +
    +
    -
    + } } - - -
    -
    -
    - -
    -
    - -
    + else + { +
    + Slave machine man
    -
    -
    -
    -
    - -
    -
    -
    - - -
    -
    +
    + Check articolo in revisione
    -
    -
    -
    + @if (cancelSetupEnabled) + {
    - +
    -
    - - @*
    -
    -
    -
    -
    - <%: lblCreaOdl %> + } + + @if (showOdlDetail) + { +
    +
    +
    +

    Verifica parametri attrezzaggio

    +
    +
    +
    +
    +
    + P.ODL: +
    +
    + @currPodl.IdxPromessa.ToString("N0") +
    +
    +
    +
    + Rif: +
    +
    + @currPodl.KeyRichiesta +
    +
    +
    +
    + Cod: +
    +
    + @currPodl.CodArticolo
    -
    - +
    +
    +
    + Articolo: +
    +
    + @currPodl.DescArticolo +
    +
    +
    +
    +
    +
    + Pezzi: +
    +
    + @currPodl.NumPezzi.ToString("N0") +
    +
    +
    +
    + TCiclo: +
    +
    + @currPodl.Tcassegnato.ToString("N2") +
    +
    +
    +
    + Pz/pallet: +
    +
    + @currPodl.PzPallet +
    +
    -
    *@ + +
    +
    + } + +
    +
    + + +
    + + +
    -
    -
    - @lblOut -
    +
    + @if (idxPOdlSel > 0) + { + + } + else + { + + } +
    + @if (idxPOdlSel > 0) + { +
    + + +
    +
    + +
    +
    + Pz Pallet +
    + +
    +
    + } + + +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + @*
    +
    +
    +
    +
    + <%: lblCreaOdl %> +
    +
    +
    +
    + +
    +
    +
    *@ +
    +
    +
    +
    + @lblOut +
    + } }
    \ No newline at end of file diff --git a/MP-TAB-SERV/Components/OdlMan.razor.cs b/MP-TAB-SERV/Components/OdlMan.razor.cs index f5da1199..c5b1ff62 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor.cs +++ b/MP-TAB-SERV/Components/OdlMan.razor.cs @@ -1,11 +1,12 @@ using global::Microsoft.AspNetCore.Components; -using Microsoft.JSInterop; using MP.Data; using MP.Data.DatabaseModels; using MP.Data.Objects; using MP.Data.Services; +using MP_TAB_SERV.Shared; using NLog; using System.Text; +using System.Threading.Tasks; using static MP.Data.Objects.Enums; namespace MP_TAB_SERV.Components @@ -27,15 +28,8 @@ namespace MP_TAB_SERV.Components #region Protected Fields - private bool enableRPO = true; - private bool enableSchedaTecnica = false; - private bool forceCloseOdl = true; - private List emailAdmDest = new List(); - protected PzProdModel? prodMacchina = null; - private int PzPallet = 1; - #endregion Protected Fields #region Protected Properties @@ -88,6 +82,12 @@ namespace MP_TAB_SERV.Components protected List ListODL { get; set; } = new List(); + [Inject] + protected MailService MailServ { get; set; } = null!; + + [Inject] + protected StatusData MDataService { get; set; } = null!; + [Inject] protected MessageService MServ { get; set; } = null!; @@ -144,7 +144,7 @@ namespace MP_TAB_SERV.Components protected string getIdxMaccParent() { string answ = IdxMaccSel; - // se � multi controllo + // se fosse multi controllo if (isMulti) { // verifico se SIA una tavola (ha char "#") @@ -158,78 +158,127 @@ namespace MP_TAB_SERV.Components return answ; } - protected override async Task OnInitializedAsync() + /// + /// Gestione display avanzamento step + /// + /// + protected void advStep(int currStep) { - //baseLang = SMServ.GetConf("baseLang"); - numDayOdl = SMServ.GetConfInt("numDaySelOdl"); - confRett = SMServ.GetConfBool("confRett"); - enableSplitODL = SMServ.GetConfBool("enableSplitODL"); - modoConfProd = SMServ.GetConfInt("modoConfProd"); - enableRPO = SMServ.GetConfBool("enableRPO"); - enableSchedaTecnica = SMServ.GetConfBool("enableSchedaTecnica"); - string rawEmailDest = SMServ.GetConf("_adminEmail"); - emailAdmDest = rawEmailDest.Split(',').ToList(); - if (RecMSE != null) - { - IdxMaccSel = RecMSE.IdxMacchina; - IdxMaccParent = getIdxMaccParent(); - await ReloadData(true); - } - checkAll(); + currVal = currStep; + nextVal = currVal + 1; } - - protected override async Task OnParametersSetAsync() - { - isMulti = SMServ.DictMacchMulti[RecMSE?.IdxMacchina] == 1; - await ReloadData(false); - } - - protected void SaveTCRich(decimal newTCRich) - { - tcRichAttr = newTCRich; - } - - protected async Task SetMacc(string selIdxMacc) - { - isProcessing = true; - await Task.Delay(10); - IdxMaccSel = selIdxMacc; - await DoUpdate(); - isProcessing = false; - await Task.Delay(10); - } - [Inject] - protected MailService MailServ { get; set; } = null!; + protected NavigationManager NavMan { get; set; } = null!; - protected async Task SendWarnTcChangeReq(int idxOdl, decimal tcAss, decimal tcRich) + protected async Task ProdEnd() { - // carico altri parametri email... - string oggetto = SMServ.GetConf("oggettoChgTc"); - string corpoChgTc = SMServ.GetConf("corpoChgTc"); - string mittente = SMServ.GetConf("_fromEmail"); - string baseUrlAdmin = SMServ.GetConf("baseUrlAdmin"); - string pageUrlApprODL = SMServ.GetConf("pageUrlApprODL"); - string pageUrl = $"{baseUrlAdmin}{pageUrlApprODL}"; - string corpo = $"ODL: {idxOdl} | TC Assegnato: {tcAss} | TC Rich: {tcRich}{Environment.NewLine}{Environment.NewLine}"; - corpo += string.Format(corpoChgTc, Environment.NewLine, pageUrl); - corpo = corpo.Replace($"{Environment.NewLine}", "
    "); - MailKitMailData mData = new MailKitMailData() + // preparo gestione progress display + MaxVal = 6; + int currStep = 0; + advStep(currStep); + isProcessing = true; + // leggo idxOdl da ultimo odl attivo x macchina + var currOdl = await TabDServ.OdlCurrByMacc(IdxMaccSel, false); + int idxODLCurr = currOdl.IdxOdl; + int idxEvento = 7; // !!!HARD CODED + // confermo prod vecchio ODL + await confermaProdOdl(false); + advStep(currStep++); + + // se chk flaggato ovvero richiesta di chiudere ODL procedo come prima (chiudendo ODL senza averne altri...) + if (forceCloseOdl) { - From = mittente, - To = emailAdmDest, - Subject = oggetto, - Body = corpo - }; - bool done = await MailServ.SendAsync(mData); - if (done) - { - Log.Info($"Inviata email notifica TC da approvare per ODL {idxOdl} inviato a {string.Join(",", emailAdmDest)}"); + // aggiungo try/catch x capire se sia qui che si "impasta" in chiusura ODL + try + { + // processo x macchina selezionata + await TabDServ.OdlFineProd(idxODLCurr, IdxMaccSel); + string evText = "Registrata fine produzione per ODL {0}"; + StringBuilder sb = new StringBuilder(); + sb.AppendLine(String.Format(evText, idxODLCurr)); + await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLCurr); + advStep(currStep++); + // se è multi processo ANCHE x altra tavola... + if (isMulti) + { + sb.AppendLine("---"); + var tabOdlAltra = await TabDServ.OdlCurrByMacc(idxMaccAltraTav, true); + int idxOdlAltra = tabOdlAltra.IdxOdl; + await TabDServ.OdlFineProd(idxOdlAltra, idxMaccAltraTav); + sb.AppendLine(String.Format(evText, idxOdlAltra)); + await processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra); + } + advStep(currStep++); + // se è master --> chiamo update child! + if (isMaster) + { + // hard coded 60gg last + await TabDServ.OdlFixMachineSlave(IdxMaccSel, 60, 1); + } + advStep(currStep++); + // riporto stringa + lblOut = sb.ToString().Replace("---", "
    "); + } + catch (Exception exc) + { + Log.Error($"Eccezione in operazione chiusura ODL!{Environment.NewLine}{exc}"); + // navigo! + NavMan.NavigateTo($"machine-detail"); + } } + // altrimenti split ODL x completare IN FUTURO la produzione... else { - Log.Error($"Errore in invio email notifica TC da approvare per ODL {idxOdl} | tentato invio a {string.Join(",", emailAdmDest)}"); + try + { + // effettuo split su nuovo ODL + await TabDServ.OdlSplit(idxODLCurr, MatrOpr, IdxMaccSel, currOdl.Tcassegnato, PzPallet, $"Fine Produzione, Sospensione ODL {idxODLCurr}, generato residuo con pari TCiclo: {currOdl.Tcassegnato}", false, 0); + // processo chiusura setup + await processaEvento(IdxMaccSel, idxEvento, $"Registrata fine produzione per ODL {idxODLCurr}, nuovo ODL per quantità residua", idxODLCurr); + + advStep(currStep++); + // se è multi processo ANCHE x altra tavola... + if (isMulti) + { + var tabOdlAltra = await TabDServ.OdlCurrByMacc(idxMaccAltraTav, true); + int idxOdlAltra = tabOdlAltra.IdxOdl; + // effettuo split su nuovo ODL + await TabDServ.OdlSplit(idxOdlAltra, MatrOpr, idxMaccAltraTav, tabOdlAltra.Tcassegnato, PzPallet, $"Fine Produzione, Sospensione ODL {idxOdlAltra}, generato residuo con pari TCiclo: {tabOdlAltra.Tcassegnato}", false, 0); + // processo chiusura setup + await processaEvento(idxMaccAltraTav, idxEvento, $"Registrata fine produzione per ODL {idxOdlAltra}, nuovo ODL per quantità residua", idxOdlAltra); + } + advStep(currStep++); + // se è master --> chiamo update child! + if (isMaster) + { + // hard coded 60gg last + await TabDServ.OdlFixMachineSlave(IdxMaccSel, 60, 1); + } + // sistemo buttons! + fixSplitBtn(false); + advStep(currStep++); + } + catch (Exception exc) + { + Log.Error($"Eccezione in operazione Chiusura + Split ODL su nuovo! {Environment.NewLine}{exc}"); + // navigo! + NavMan.NavigateTo($"machine-detail"); + } } +#if false + doRemoveCurrOdlData(); + + // refresh finale + checkAll(); + // sollevo evento! + if (eh_reqUpdate != null) + { + eh_reqUpdate(this, new EventArgs()); + } + await Task.Delay(1500); +#endif + + isProcessing = false; } /// @@ -237,9 +286,15 @@ namespace MP_TAB_SERV.Components /// /// /// - protected async Task EndSetup() + protected async Task OdlSetupEnd() { + // preparo gestione progress display + MaxVal = 8; + int currStep = 0; + advStep(currStep); + isProcessing = true; await confermaProdOdl(true); + advStep(currStep++); // se vedesse TCRich a zero lo reimposta a quello assegnato... if (tcRichAttr == 0) { @@ -258,6 +313,8 @@ namespace MP_TAB_SERV.Components // invio email! await SendWarnTcChangeReq(idxODLStart, currOdl.Tcassegnato, tcRichAttr); } + advStep(currStep++); + // processo chiusura setup string evText = "Registrata inizio produzione per ODL {0}"; StringBuilder sb = new StringBuilder(); @@ -266,6 +323,7 @@ namespace MP_TAB_SERV.Components // indico INIZIO SETUP su REDIS come EXE della macchina... string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now); TabDServ.addTask4Machine(IdxMaccSel, taskType.stopSetup, $"TS:{ts}|MATR:{MatrOpr}|ODL:{idxODLStart}"); + advStep(currStep++); // se è multi processo chiusura setup x altra tavola... if (isMulti) { @@ -277,6 +335,7 @@ namespace MP_TAB_SERV.Components // invio su seconda tavola TabDServ.addTask4Machine(idxMaccAltraTav, taskType.stopSetup, $"TS:{ts}|MATR: {MatrOpr}| Master Machine: {IdxMaccSel}"); } + advStep(currStep++); // se è master --> chiamo update child! if (isMaster) { @@ -296,11 +355,13 @@ namespace MP_TAB_SERV.Components // hard coded 60gg last await TabDServ.OdlFixMachineSlave(IdxMaccSel, 60, 1); } + advStep(currStep++); // se c'è gestione SchedaTecnica --> chiamo procedura update x lotti if (enableSchedaTecnica) { await TabDServ.ElencoLottiUpsertByOdl(idxODLStart, true); } + advStep(currStep++); // riporto stringa lblOut = sb.ToString().Replace("---", "
    "); @@ -308,20 +369,29 @@ namespace MP_TAB_SERV.Components checkAll(); // imposto odl... idxOdl = idxODLStart; + advStep(currStep++); // faccio refresh e riporto await refreshData(); + // chiudo update... + isProcessing = false; } /// /// Dichiarazione inizio attrezzaggio PODL indicato /// /// - protected async Task StartSetup() + protected async Task OdlSetupStart() { /*************************************************** - * comprende gestione machineSlave x fix ODL master --> slave - * - ***************************************************/ + * comprende gestione machineSlave x fix ODL master --> slave + * + ***************************************************/ + + // preparo gestione progress display + MaxVal = 11; + int currStep = 0; + advStep(currStep); + isProcessing = true; bool inAttr = false; DateTime adesso = DateTime.Now; @@ -337,9 +407,11 @@ namespace MP_TAB_SERV.Components catch { } } + advStep(currStep++); // proseguo int idxODL_curr = 0; await confermaProdOdl(false); + advStep(currStep++); if (IdxPOdlSel > 0) { // se vedesse TCRich a zero lo reimposta a quello assegnato... @@ -370,6 +442,7 @@ namespace MP_TAB_SERV.Components Log.Error($"Error StartSetup.01{Environment.NewLine}{exc}"); } } + advStep(currStep++); // 2018.07.24 verifico se devo lavorare come ODL classico o come RPO (Richiesta / // Promessa / ODL) if (enableRPO) @@ -388,12 +461,14 @@ namespace MP_TAB_SERV.Components // salvo ODL Current idxODL_curr = IdxPOdlSel; } + advStep(currStep++); // process evento int idxEvento = 2; // !!!HARD CODED string evText = "Registrato inizio attrezzaggio per ODL {0}"; StringBuilder sb = new StringBuilder(); sb.AppendLine(String.Format(evText, idxODL_curr)); await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODL_curr); + advStep(currStep++); // indico INIZIO SETUP su REDIS come EXE della macchina... string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now); string outData = $"TS:{ts}|MATR:{MatrOpr}|ODL:{idxODL_curr}"; @@ -413,6 +488,7 @@ namespace MP_TAB_SERV.Components TabDServ.MachineParamUpdate(IdxMaccSel, "setComm", setCommVal); TabDServ.MachineParamUpdate(IdxMaccSel, "setPzComm", setPzCommVal); TabDServ.addTask4Machine(IdxMaccSel, taskType.setParameter, "ForceUpdate"); + advStep(currStep++); // li aggiungo ANCHE sui PLC slave se ci sono... if (isMaster) { @@ -434,6 +510,7 @@ namespace MP_TAB_SERV.Components TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.setParameter, "ForceUpdate"); } } + advStep(currStep++); } catch (Exception exc) { @@ -470,18 +547,21 @@ namespace MP_TAB_SERV.Components // update buttons... checkAll(); } + advStep(currStep++); // se fosse master --> chiamo update child! if (isMaster) { // hard coded 60gg last await TabDServ.OdlFixMachineSlave(IdxMaccSel, 60, 1); } + advStep(currStep++); // resetto contapezzi redis... await TabDServ.saveCounter(IdxMaccSel, "0"); // imposto ODL su redis... TabDServ.saveCurrODL(IdxMaccSel, idxODL_curr); // salvo odl selezionato idxOdl = idxODL_curr; + advStep(currStep++); } else { @@ -493,17 +573,34 @@ namespace MP_TAB_SERV.Components fixSplitBtn(false); // faccio refresh e riporto await refreshData(); -#if false - // sollevo evento! - if (eh_reqUpdate != null) - { - eh_reqUpdate(this, new EventArgs()); - } -#endif + isProcessing = false; } - [Inject] - protected StatusData MDataService { get; set; } = null!; + protected override async Task OnInitializedAsync() + { + //baseLang = SMServ.GetConf("baseLang"); + numDayOdl = SMServ.GetConfInt("numDaySelOdl"); + confRett = SMServ.GetConfBool("confRett"); + enableSplitODL = SMServ.GetConfBool("enableSplitODL"); + modoConfProd = SMServ.GetConfInt("modoConfProd"); + enableRPO = SMServ.GetConfBool("enableRPO"); + enableSchedaTecnica = SMServ.GetConfBool("enableSchedaTecnica"); + string rawEmailDest = SMServ.GetConf("_adminEmail"); + emailAdmDest = rawEmailDest.Split(',').ToList(); + if (RecMSE != null) + { + IdxMaccSel = RecMSE.IdxMacchina; + IdxMaccParent = getIdxMaccParent(); + await ReloadData(true); + } + checkAll(); + } + + protected override async Task OnParametersSetAsync() + { + isMulti = SMServ.DictMacchMulti[RecMSE?.IdxMacchina] == 1; + await ReloadData(false); + } protected async Task refreshData() { @@ -517,13 +614,56 @@ namespace MP_TAB_SERV.Components await MServ.SaveMse(ListMSE); #if false // aggiorno MSE attuale - RecMSE = ListMSE.Find(x => x.IdxMacchina == IdxMaccSel); + RecMSE = ListMSE.Find(x => x.IdxMacchina == IdxMaccSel); #endif await E_Updated.InvokeAsync(ListMSE); } } + protected void SaveTCRich(decimal newTCRich) + { + tcRichAttr = newTCRich; + } + protected async Task SendWarnTcChangeReq(int idxOdl, decimal tcAss, decimal tcRich) + { + // carico altri parametri email... + string oggetto = SMServ.GetConf("oggettoChgTc"); + string corpoChgTc = SMServ.GetConf("corpoChgTc"); + string mittente = SMServ.GetConf("_fromEmail"); + string baseUrlAdmin = SMServ.GetConf("baseUrlAdmin"); + string pageUrlApprODL = SMServ.GetConf("pageUrlApprODL"); + string pageUrl = $"{baseUrlAdmin}{pageUrlApprODL}"; + string corpo = $"ODL: {idxOdl} | TC Assegnato: {tcAss} | TC Rich: {tcRich}{Environment.NewLine}{Environment.NewLine}"; + corpo += string.Format(corpoChgTc, Environment.NewLine, pageUrl); + corpo = corpo.Replace($"{Environment.NewLine}", "
    "); + MailKitMailData mData = new MailKitMailData() + { + From = mittente, + To = emailAdmDest, + Subject = oggetto, + Body = corpo + }; + bool done = await MailServ.SendAsync(mData); + if (done) + { + Log.Info($"Inviata email notifica TC da approvare per ODL {idxOdl} inviato a {string.Join(",", emailAdmDest)}"); + } + else + { + Log.Error($"Errore in invio email notifica TC da approvare per ODL {idxOdl} | tentato invio a {string.Join(",", emailAdmDest)}"); + } + } + + protected async Task SetMacc(string selIdxMacc) + { + isProcessing = true; + await Task.Delay(10); + IdxMaccSel = selIdxMacc; + await DoUpdate(); + isProcessing = false; + await Task.Delay(10); + } protected void togOdlDetail() { @@ -540,41 +680,32 @@ namespace MP_TAB_SERV.Components #region Private Fields private static Logger Log = LogManager.GetCurrentClassLogger(); - private bool cancelSetupEnabled = false; - private bool confRett = true; - + private double currVal = 0; + private List emailAdmDest = new List(); + private bool enableRPO = true; + private bool enableSchedaTecnica = false; private bool enableSplitODL = false; - + private int expTimeMsec = 2000; + private bool forceCloseOdl = true; private string IdxMaccSel = ""; - private int idxOdl = 0; - private int idxPOdlSel = 0; - private bool isInAttr = false; - private bool isInProd = false; - private bool isMaster = false; - private bool isMulti = false; - private bool isProcessing = false; - private bool isSlave = false; - private int lastIdxPOdl = 0; - private string lblOut = ""; - + private int MaxVal = 10; private int modoConfProd = 0; - + private double nextVal = 0; private string noteAttr = ""; - private int numDayOdl = 5; - + private int PzPallet = 1; private bool showAll = false; private bool showOdlDetail = false; diff --git a/MP-TAB-SERV/MP-TAB-SERV.csproj b/MP-TAB-SERV/MP-TAB-SERV.csproj index d0a409f7..2eff17e0 100644 --- a/MP-TAB-SERV/MP-TAB-SERV.csproj +++ b/MP-TAB-SERV/MP-TAB-SERV.csproj @@ -3,7 +3,7 @@ net6.0 enable - 6.16.2311.817 + 6.16.2311.818 enable MP_TAB_SERV diff --git a/MP-TAB-SERV/Resources/ChangeLog.html b/MP-TAB-SERV/Resources/ChangeLog.html index 67ba3aa3..5bb329c2 100644 --- a/MP-TAB-SERV/Resources/ChangeLog.html +++ b/MP-TAB-SERV/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MAPOSPEC -

    Versione: 6.16.2311.817

    +

    Versione: 6.16.2311.818


    Note di rilascio:
    • diff --git a/MP-TAB-SERV/Resources/VersNum.txt b/MP-TAB-SERV/Resources/VersNum.txt index 6e276880..e96fef11 100644 --- a/MP-TAB-SERV/Resources/VersNum.txt +++ b/MP-TAB-SERV/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2311.817 +6.16.2311.818 diff --git a/MP-TAB-SERV/Resources/manifest.xml b/MP-TAB-SERV/Resources/manifest.xml index 8078a58a..ad991dec 100644 --- a/MP-TAB-SERV/Resources/manifest.xml +++ b/MP-TAB-SERV/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2311.817 + 6.16.2311.818 https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/MP-TAB-SERV.zip https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/ChangeLog.html false diff --git a/MP-TAB-SERV/_Imports.razor b/MP-TAB-SERV/_Imports.razor index 1d557bbf..8e3ed34c 100644 --- a/MP-TAB-SERV/_Imports.razor +++ b/MP-TAB-SERV/_Imports.razor @@ -15,3 +15,4 @@ @using MP.Data.Services @using Newtonsoft.Json @using NLog +@using EgwCoreLib.Razor From e61a51264726eaaf5172e04590287a7892b6ecab Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 9 Nov 2023 10:03:06 +0100 Subject: [PATCH 04/14] Update gestione refresh ODL --- MP-TAB-SERV/Components/OdlMan.razor | 153 +++++----- MP-TAB-SERV/Components/OdlMan.razor.cs | 373 +++++++++++++++---------- MP-TAB-SERV/MP-TAB-SERV.csproj | 2 +- MP-TAB-SERV/Resources/ChangeLog.html | 2 +- MP-TAB-SERV/Resources/VersNum.txt | 2 +- MP-TAB-SERV/Resources/manifest.xml | 2 +- MP.Data/Services/TabDataService.cs | 10 + 7 files changed, 318 insertions(+), 226 deletions(-) diff --git a/MP-TAB-SERV/Components/OdlMan.razor b/MP-TAB-SERV/Components/OdlMan.razor index 94f78ec3..bb2743f1 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor +++ b/MP-TAB-SERV/Components/OdlMan.razor @@ -38,12 +38,27 @@
    } - @if (showOdlDetail) + @if (!inAttr && !showOdlDetail) + { +
    + +
    + } + + @if (showOdlDetail || inAttr) {
    -
    -

    Verifica parametri attrezzaggio

    +
    +
    +

    @titleOdlDetail

    +
    +
    + @if (idxPOdlSel == 0) + { + + } +
    @@ -136,34 +151,36 @@
    } -
    -
    - - -
    - - + @if (!inAttr) + { +
    +
    + + +
    + + +
    -
    -
    - @if (idxPOdlSel > 0) - { - - } - else - { - - } -
    - @if (idxPOdlSel > 0) +
    + @if (idxPOdlSel > 0) + { + + } + else + { + } +
    + } + @if (idxPOdlSel > 0 || inAttr) {
    @@ -185,53 +202,43 @@
    } - -
    -
    -
    - -
    -
    - -
    + @if (inAttr) + { +
    + +
    + } +
    + +
    +
    +
    + +
    -
    -
    -
    - -
    -
    -
    - - -
    -
    -
    +
    +
    -
    -
    -
    - -
    -
    - - @*
    -
    -
    -
    -
    - <%: lblCreaOdl %> -
    -
    -
    -
    - -
    -
    -
    *@ -
    -
    +
    + +
    +
    + + @*
    +
    +
    +
    +
    + <%: lblCreaOdl %> +
    +
    +
    +
    + +
    +
    +
    *@
    @lblOut diff --git a/MP-TAB-SERV/Components/OdlMan.razor.cs b/MP-TAB-SERV/Components/OdlMan.razor.cs index c5b1ff62..b2f03b15 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor.cs +++ b/MP-TAB-SERV/Components/OdlMan.razor.cs @@ -1,12 +1,11 @@ using global::Microsoft.AspNetCore.Components; +using Microsoft.JSInterop; using MP.Data; using MP.Data.DatabaseModels; using MP.Data.Objects; using MP.Data.Services; -using MP_TAB_SERV.Shared; using NLog; using System.Text; -using System.Threading.Tasks; using static MP.Data.Objects.Enums; namespace MP_TAB_SERV.Components @@ -80,6 +79,9 @@ namespace MP_TAB_SERV.Components } } + [Inject] + protected IJSRuntime JSRuntime { get; set; } = null!; + protected List ListODL { get; set; } = new List(); [Inject] @@ -91,6 +93,9 @@ namespace MP_TAB_SERV.Components [Inject] protected MessageService MServ { get; set; } = null!; + [Inject] + protected NavigationManager NavMan { get; set; } = null!; + /// /// Verifica ODL OK (ovvero caricato x macchina...) /// @@ -126,6 +131,32 @@ namespace MP_TAB_SERV.Components #region Protected Methods + /// + /// Gestione display avanzamento step + /// + /// + protected async Task advStep(int currStep) + { + currVal = currStep; + nextVal = currVal + 1; + await InvokeAsync(StateHasChanged); + } + + protected async Task CheckAttr() + { + // verifico attrezzaggio su macchina corrente o se multi su parent + string idxMacc2check = isMulti ? IdxMaccParent : IdxMaccSel; + StatoMacchineModel rigaStato = TabDServ.StatoMacchina(idxMacc2check); + //calcolo stato attrezzaggio, hard coded!!! + inAttr = (rigaStato.IdxStato == 2); + // se in attr --> carico podlCurr... + if (inAttr && RecMSE != null) + { + int currIdxPOdl = RecMSE != null ? RecMSE.IdxPOdl ?? 0 : 0; + currPodl = await TabDServ.PODLExp_getByKey(currIdxPOdl); + } + } + /// /// Aggiorno... /// @@ -158,129 +189,6 @@ namespace MP_TAB_SERV.Components return answ; } - /// - /// Gestione display avanzamento step - /// - /// - protected void advStep(int currStep) - { - currVal = currStep; - nextVal = currVal + 1; - } - [Inject] - protected NavigationManager NavMan { get; set; } = null!; - - protected async Task ProdEnd() - { - // preparo gestione progress display - MaxVal = 6; - int currStep = 0; - advStep(currStep); - isProcessing = true; - // leggo idxOdl da ultimo odl attivo x macchina - var currOdl = await TabDServ.OdlCurrByMacc(IdxMaccSel, false); - int idxODLCurr = currOdl.IdxOdl; - int idxEvento = 7; // !!!HARD CODED - // confermo prod vecchio ODL - await confermaProdOdl(false); - advStep(currStep++); - - // se chk flaggato ovvero richiesta di chiudere ODL procedo come prima (chiudendo ODL senza averne altri...) - if (forceCloseOdl) - { - // aggiungo try/catch x capire se sia qui che si "impasta" in chiusura ODL - try - { - // processo x macchina selezionata - await TabDServ.OdlFineProd(idxODLCurr, IdxMaccSel); - string evText = "Registrata fine produzione per ODL {0}"; - StringBuilder sb = new StringBuilder(); - sb.AppendLine(String.Format(evText, idxODLCurr)); - await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLCurr); - advStep(currStep++); - // se è multi processo ANCHE x altra tavola... - if (isMulti) - { - sb.AppendLine("---"); - var tabOdlAltra = await TabDServ.OdlCurrByMacc(idxMaccAltraTav, true); - int idxOdlAltra = tabOdlAltra.IdxOdl; - await TabDServ.OdlFineProd(idxOdlAltra, idxMaccAltraTav); - sb.AppendLine(String.Format(evText, idxOdlAltra)); - await processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra); - } - advStep(currStep++); - // se è master --> chiamo update child! - if (isMaster) - { - // hard coded 60gg last - await TabDServ.OdlFixMachineSlave(IdxMaccSel, 60, 1); - } - advStep(currStep++); - // riporto stringa - lblOut = sb.ToString().Replace("---", "
    "); - } - catch (Exception exc) - { - Log.Error($"Eccezione in operazione chiusura ODL!{Environment.NewLine}{exc}"); - // navigo! - NavMan.NavigateTo($"machine-detail"); - } - } - // altrimenti split ODL x completare IN FUTURO la produzione... - else - { - try - { - // effettuo split su nuovo ODL - await TabDServ.OdlSplit(idxODLCurr, MatrOpr, IdxMaccSel, currOdl.Tcassegnato, PzPallet, $"Fine Produzione, Sospensione ODL {idxODLCurr}, generato residuo con pari TCiclo: {currOdl.Tcassegnato}", false, 0); - // processo chiusura setup - await processaEvento(IdxMaccSel, idxEvento, $"Registrata fine produzione per ODL {idxODLCurr}, nuovo ODL per quantità residua", idxODLCurr); - - advStep(currStep++); - // se è multi processo ANCHE x altra tavola... - if (isMulti) - { - var tabOdlAltra = await TabDServ.OdlCurrByMacc(idxMaccAltraTav, true); - int idxOdlAltra = tabOdlAltra.IdxOdl; - // effettuo split su nuovo ODL - await TabDServ.OdlSplit(idxOdlAltra, MatrOpr, idxMaccAltraTav, tabOdlAltra.Tcassegnato, PzPallet, $"Fine Produzione, Sospensione ODL {idxOdlAltra}, generato residuo con pari TCiclo: {tabOdlAltra.Tcassegnato}", false, 0); - // processo chiusura setup - await processaEvento(idxMaccAltraTav, idxEvento, $"Registrata fine produzione per ODL {idxOdlAltra}, nuovo ODL per quantità residua", idxOdlAltra); - } - advStep(currStep++); - // se è master --> chiamo update child! - if (isMaster) - { - // hard coded 60gg last - await TabDServ.OdlFixMachineSlave(IdxMaccSel, 60, 1); - } - // sistemo buttons! - fixSplitBtn(false); - advStep(currStep++); - } - catch (Exception exc) - { - Log.Error($"Eccezione in operazione Chiusura + Split ODL su nuovo! {Environment.NewLine}{exc}"); - // navigo! - NavMan.NavigateTo($"machine-detail"); - } - } -#if false - doRemoveCurrOdlData(); - - // refresh finale - checkAll(); - // sollevo evento! - if (eh_reqUpdate != null) - { - eh_reqUpdate(this, new EventArgs()); - } - await Task.Delay(1500); -#endif - - isProcessing = false; - } - /// /// Registrazione Fine Setup / Inizio Produzione /// @@ -288,13 +196,18 @@ namespace MP_TAB_SERV.Components /// protected async Task OdlSetupEnd() { + TimeSpan estDur = TimeSpan.FromMinutes((double)tcRichAttr * currPodl.NumPezzi); + string stima = estDur.TotalHours > 1 ? $"{estDur.TotalHours:N1} ore" : $"{estDur.TotalMinutes:N1} min"; + if (!await JSRuntime.InvokeAsync("confirm", $"PODL: {currPodl.IdxPromessa}{Environment.NewLine}Art: [{currPodl.CodArticolo}] {currPodl.DescArticolo}{Environment.NewLine}Pezzi: {currPodl.NumPezzi:N0} * TCiclo: {tcRichAttr:N3}min{Environment.NewLine}Tempo stimato: {stima}{Environment.NewLine}{Environment.NewLine}Confermi la chiusura della fase di attrezzaggio?")) + return; + // preparo gestione progress display MaxVal = 8; int currStep = 0; - advStep(currStep); + await advStep(currStep); isProcessing = true; await confermaProdOdl(true); - advStep(currStep++); + await advStep(currStep++); // se vedesse TCRich a zero lo reimposta a quello assegnato... if (tcRichAttr == 0) { @@ -313,7 +226,7 @@ namespace MP_TAB_SERV.Components // invio email! await SendWarnTcChangeReq(idxODLStart, currOdl.Tcassegnato, tcRichAttr); } - advStep(currStep++); + await advStep(currStep++); // processo chiusura setup string evText = "Registrata inizio produzione per ODL {0}"; @@ -323,7 +236,7 @@ namespace MP_TAB_SERV.Components // indico INIZIO SETUP su REDIS come EXE della macchina... string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now); TabDServ.addTask4Machine(IdxMaccSel, taskType.stopSetup, $"TS:{ts}|MATR:{MatrOpr}|ODL:{idxODLStart}"); - advStep(currStep++); + await advStep(currStep++); // se è multi processo chiusura setup x altra tavola... if (isMulti) { @@ -335,7 +248,7 @@ namespace MP_TAB_SERV.Components // invio su seconda tavola TabDServ.addTask4Machine(idxMaccAltraTav, taskType.stopSetup, $"TS:{ts}|MATR: {MatrOpr}| Master Machine: {IdxMaccSel}"); } - advStep(currStep++); + await advStep(currStep++); // se è master --> chiamo update child! if (isMaster) { @@ -355,13 +268,13 @@ namespace MP_TAB_SERV.Components // hard coded 60gg last await TabDServ.OdlFixMachineSlave(IdxMaccSel, 60, 1); } - advStep(currStep++); + await advStep(currStep++); // se c'è gestione SchedaTecnica --> chiamo procedura update x lotti if (enableSchedaTecnica) { await TabDServ.ElencoLottiUpsertByOdl(idxODLStart, true); } - advStep(currStep++); + await advStep(currStep++); // riporto stringa lblOut = sb.ToString().Replace("---", "
    "); @@ -369,9 +282,10 @@ namespace MP_TAB_SERV.Components checkAll(); // imposto odl... idxOdl = idxODLStart; - advStep(currStep++); + await advStep(currStep++); // faccio refresh e riporto await refreshData(); + await CheckAttr(); // chiudo update... isProcessing = false; } @@ -382,6 +296,8 @@ namespace MP_TAB_SERV.Components /// protected async Task OdlSetupStart() { + if (!await JSRuntime.InvokeAsync("confirm", $"Confermi inizio della fase di attrezzaggio per l'articolo [{currPodl.CodArticolo}] {currPodl.DescArticolo}?")) + return; /*************************************************** * comprende gestione machineSlave x fix ODL master --> slave * @@ -390,28 +306,29 @@ namespace MP_TAB_SERV.Components // preparo gestione progress display MaxVal = 11; int currStep = 0; - advStep(currStep); + await advStep(currStep); isProcessing = true; - bool inAttr = false; DateTime adesso = DateTime.Now; +#if false // se fosse multi mi chiedo se sia DAVVERO in attrezzaggio... if (isMulti) { try { - // controllo se NON SONO gi� in attrezzaggio... + // controllo se NON SONO gia in attrezzaggio... var rigaStato = TabDServ.StatoMacchina(IdxMaccParent); inAttr = (rigaStato.IdxStato == 2); } catch { } } - advStep(currStep++); +#endif + await advStep(currStep++); // proseguo int idxODL_curr = 0; await confermaProdOdl(false); - advStep(currStep++); + await advStep(currStep++); if (IdxPOdlSel > 0) { // se vedesse TCRich a zero lo reimposta a quello assegnato... @@ -442,7 +359,7 @@ namespace MP_TAB_SERV.Components Log.Error($"Error StartSetup.01{Environment.NewLine}{exc}"); } } - advStep(currStep++); + await advStep(currStep++); // 2018.07.24 verifico se devo lavorare come ODL classico o come RPO (Richiesta / // Promessa / ODL) if (enableRPO) @@ -461,14 +378,14 @@ namespace MP_TAB_SERV.Components // salvo ODL Current idxODL_curr = IdxPOdlSel; } - advStep(currStep++); + await advStep(currStep++); // process evento int idxEvento = 2; // !!!HARD CODED string evText = "Registrato inizio attrezzaggio per ODL {0}"; StringBuilder sb = new StringBuilder(); sb.AppendLine(String.Format(evText, idxODL_curr)); await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODL_curr); - advStep(currStep++); + await advStep(currStep++); // indico INIZIO SETUP su REDIS come EXE della macchina... string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now); string outData = $"TS:{ts}|MATR:{MatrOpr}|ODL:{idxODL_curr}"; @@ -488,7 +405,7 @@ namespace MP_TAB_SERV.Components TabDServ.MachineParamUpdate(IdxMaccSel, "setComm", setCommVal); TabDServ.MachineParamUpdate(IdxMaccSel, "setPzComm", setPzCommVal); TabDServ.addTask4Machine(IdxMaccSel, taskType.setParameter, "ForceUpdate"); - advStep(currStep++); + await advStep(currStep++); // li aggiungo ANCHE sui PLC slave se ci sono... if (isMaster) { @@ -510,7 +427,7 @@ namespace MP_TAB_SERV.Components TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.setParameter, "ForceUpdate"); } } - advStep(currStep++); + await advStep(currStep++); } catch (Exception exc) { @@ -547,21 +464,21 @@ namespace MP_TAB_SERV.Components // update buttons... checkAll(); } - advStep(currStep++); + await advStep(currStep++); // se fosse master --> chiamo update child! if (isMaster) { // hard coded 60gg last await TabDServ.OdlFixMachineSlave(IdxMaccSel, 60, 1); } - advStep(currStep++); + await advStep(currStep++); // resetto contapezzi redis... await TabDServ.saveCounter(IdxMaccSel, "0"); // imposto ODL su redis... TabDServ.saveCurrODL(IdxMaccSel, idxODL_curr); // salvo odl selezionato idxOdl = idxODL_curr; - advStep(currStep++); + await advStep(currStep++); } else { @@ -573,6 +490,7 @@ namespace MP_TAB_SERV.Components fixSplitBtn(false); // faccio refresh e riporto await refreshData(); + await CheckAttr(); isProcessing = false; } @@ -591,6 +509,8 @@ namespace MP_TAB_SERV.Components { IdxMaccSel = RecMSE.IdxMacchina; IdxMaccParent = getIdxMaccParent(); + // verifica stato inAttr + await CheckAttr(); await ReloadData(true); } checkAll(); @@ -602,6 +522,112 @@ namespace MP_TAB_SERV.Components await ReloadData(false); } + protected async Task ProdEnd() + { + if (!await JSRuntime.InvokeAsync("confirm", $"Confermi fine produzione?")) + return; + // preparo gestione progress display + MaxVal = 7; + isProcessing = true; + int currStep = 0; + await advStep(currStep); + // leggo idxOdl da ultimo odl attivo x macchina + var currOdl = await TabDServ.OdlCurrByMacc(IdxMaccSel, false); + int idxODLCurr = currOdl.IdxOdl; + int idxEvento = 7; // !!!HARD CODED + // confermo prod vecchio ODL + await confermaProdOdl(false); + await advStep(currStep++); + + // se chk flaggato ovvero richiesta di chiudere ODL procedo come prima (chiudendo ODL + // senza averne altri...) + if (forceCloseOdl) + { + // aggiungo try/catch x capire se sia qui che si "impasta" in chiusura ODL + try + { + // processo x macchina selezionata + await TabDServ.OdlFineProd(idxODLCurr, IdxMaccSel); + string evText = "Registrata fine produzione per ODL {0}"; + StringBuilder sb = new StringBuilder(); + sb.AppendLine(String.Format(evText, idxODLCurr)); + await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLCurr); + await advStep(currStep++); + // se è multi processo ANCHE x altra tavola... + if (isMulti) + { + sb.AppendLine("---"); + var tabOdlAltra = await TabDServ.OdlCurrByMacc(idxMaccAltraTav, true); + int idxOdlAltra = tabOdlAltra.IdxOdl; + await TabDServ.OdlFineProd(idxOdlAltra, idxMaccAltraTav); + sb.AppendLine(String.Format(evText, idxOdlAltra)); + await processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra); + } + await advStep(currStep++); + // se è master --> chiamo update child! + if (isMaster) + { + // hard coded 60gg last + await TabDServ.OdlFixMachineSlave(IdxMaccSel, 60, 1); + } + await advStep(currStep++); + // riporto stringa + lblOut = sb.ToString().Replace("---", "
    "); + } + catch (Exception exc) + { + Log.Error($"Eccezione in operazione chiusura ODL!{Environment.NewLine}{exc}"); + // navigo! + NavMan.NavigateTo($"machine-detail"); + } + } + // altrimenti split ODL x completare IN FUTURO la produzione... + else + { + try + { + // effettuo split su nuovo ODL + await TabDServ.OdlSplit(idxODLCurr, MatrOpr, IdxMaccSel, currOdl.Tcassegnato, PzPallet, $"Fine Produzione, Sospensione ODL {idxODLCurr}, generato residuo con pari TCiclo: {currOdl.Tcassegnato}", false, 0); + // processo chiusura setup + await processaEvento(IdxMaccSel, idxEvento, $"Registrata fine produzione per ODL {idxODLCurr}, nuovo ODL per quantità residua", idxODLCurr); + + await advStep(currStep++); + // se è multi processo ANCHE x altra tavola... + if (isMulti) + { + var tabOdlAltra = await TabDServ.OdlCurrByMacc(idxMaccAltraTav, true); + int idxOdlAltra = tabOdlAltra.IdxOdl; + // effettuo split su nuovo ODL + await TabDServ.OdlSplit(idxOdlAltra, MatrOpr, idxMaccAltraTav, tabOdlAltra.Tcassegnato, PzPallet, $"Fine Produzione, Sospensione ODL {idxOdlAltra}, generato residuo con pari TCiclo: {tabOdlAltra.Tcassegnato}", false, 0); + // processo chiusura setup + await processaEvento(idxMaccAltraTav, idxEvento, $"Registrata fine produzione per ODL {idxOdlAltra}, nuovo ODL per quantità residua", idxOdlAltra); + } + await advStep(currStep++); + // se è master --> chiamo update child! + if (isMaster) + { + // hard coded 60gg last + await TabDServ.OdlFixMachineSlave(IdxMaccSel, 60, 1); + } + // sistemo buttons! + fixSplitBtn(false); + await advStep(currStep++); + } + catch (Exception exc) + { + Log.Error($"Eccezione in operazione Chiusura + Split ODL su nuovo! {Environment.NewLine}{exc}"); + // navigo! + NavMan.NavigateTo($"machine-detail"); + } + } + await advStep(currStep++); + // faccio refresh e riporto + await refreshData(); + await CheckAttr(); + await advStep(currStep++); + isProcessing = false; + } + protected async Task refreshData() { // refresh tabella dati tablet... @@ -618,6 +644,8 @@ namespace MP_TAB_SERV.Components #endif await E_Updated.InvokeAsync(ListMSE); } + // update dati liste ODL + await ReloadData(true); } protected void SaveTCRich(decimal newTCRich) @@ -665,9 +693,15 @@ namespace MP_TAB_SERV.Components await Task.Delay(10); } - protected void togOdlDetail() + protected async Task ToggleOdlDetail() { showOdlDetail = !showOdlDetail; + // se devo mostrare, carico dati ODL! + if (showOdlDetail && RecMSE != null) + { + int currIdxPOdl = RecMSE != null ? RecMSE.IdxPOdl ?? 0 : 0; + currPodl = await TabDServ.PODLExp_getByKey(currIdxPOdl); + } } protected string Traduci(string lemma) @@ -680,32 +714,59 @@ namespace MP_TAB_SERV.Components #region Private Fields private static Logger Log = LogManager.GetCurrentClassLogger(); + private bool cancelSetupEnabled = false; + private bool confRett = true; + private double currVal = 0; + private List emailAdmDest = new List(); + private bool enableRPO = true; + private bool enableSchedaTecnica = false; + private bool enableSplitODL = false; - private int expTimeMsec = 2000; + + private int expTimeMsec = 500; + private bool forceCloseOdl = true; + private string IdxMaccSel = ""; + private int idxOdl = 0; + private int idxPOdlSel = 0; - private bool isInAttr = false; + + private bool inAttr = false; + private bool isInProd = false; + private bool isMaster = false; + private bool isMulti = false; + private bool isProcessing = false; + private bool isSlave = false; + private int lastIdxPOdl = 0; + private string lblOut = ""; + private int MaxVal = 10; + private int modoConfProd = 0; + private double nextVal = 0; + private string noteAttr = ""; + private int numDayOdl = 5; + private int PzPallet = 1; + private bool showAll = false; private bool showOdlDetail = false; @@ -781,6 +842,20 @@ namespace MP_TAB_SERV.Components } } + private string txtBtnOdlDetail + { + get => showOdlDetail ? "Nascondi Dettaglio ODL" : "MOSTRA Dettaglio ODL Corrente"; + } + private string titleOdlDetail + { + get => IdxPOdlSel > 0 ? "Verifica parametri attrezzaggio NUOVO PODL" : "Parametri ODL Corrente"; + } + + private string cssDetailOdl + { + get => IdxPOdlSel > 0 ? "bg-primary text-light" : "bg-warning"; + } + #endregion Private Properties #region Private Methods diff --git a/MP-TAB-SERV/MP-TAB-SERV.csproj b/MP-TAB-SERV/MP-TAB-SERV.csproj index 2eff17e0..fd8b09d0 100644 --- a/MP-TAB-SERV/MP-TAB-SERV.csproj +++ b/MP-TAB-SERV/MP-TAB-SERV.csproj @@ -3,7 +3,7 @@ net6.0 enable - 6.16.2311.818 + 6.16.2311.909 enable MP_TAB_SERV diff --git a/MP-TAB-SERV/Resources/ChangeLog.html b/MP-TAB-SERV/Resources/ChangeLog.html index 5bb329c2..514eae7a 100644 --- a/MP-TAB-SERV/Resources/ChangeLog.html +++ b/MP-TAB-SERV/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MAPOSPEC -

    Versione: 6.16.2311.818

    +

    Versione: 6.16.2311.909


    Note di rilascio:
    • diff --git a/MP-TAB-SERV/Resources/VersNum.txt b/MP-TAB-SERV/Resources/VersNum.txt index e96fef11..c3aa4abd 100644 --- a/MP-TAB-SERV/Resources/VersNum.txt +++ b/MP-TAB-SERV/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2311.818 +6.16.2311.909 diff --git a/MP-TAB-SERV/Resources/manifest.xml b/MP-TAB-SERV/Resources/manifest.xml index ad991dec..5ea45187 100644 --- a/MP-TAB-SERV/Resources/manifest.xml +++ b/MP-TAB-SERV/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2311.818 + 6.16.2311.909 https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/MP-TAB-SERV.zip https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/ChangeLog.html false diff --git a/MP.Data/Services/TabDataService.cs b/MP.Data/Services/TabDataService.cs index 53f1539a..8489419e 100644 --- a/MP.Data/Services/TabDataService.cs +++ b/MP.Data/Services/TabDataService.cs @@ -1144,6 +1144,7 @@ namespace MP.Data.Services answ = dbTabController.OdlFineProd(idxODL, idxMacchina); await FlushCache("ODL"); await FlushCache("PODL"); + await FlushCache("VSODL"); } catch (Exception exc) { @@ -1169,6 +1170,7 @@ namespace MP.Data.Services answ = dbTabController.OdlFixMachineSlave(idxMacchina, numDayPrev, doInsert); await FlushCache("ODL"); await FlushCache("PODL"); + await FlushCache("VSODL"); } catch (Exception exc) { @@ -1197,6 +1199,7 @@ namespace MP.Data.Services answ = dbTabController.OdlInizioSetup(idxODL, matrOpr, idxMacchina, tcRich, pzPallet, note); await FlushCache("ODL"); await FlushCache("PODL"); + await FlushCache("VSODL"); } catch (Exception exc) { @@ -1259,6 +1262,8 @@ namespace MP.Data.Services // inserisco evento answ = dbTabController.OdlSetupPostumo(idxODL, idxMacchina); await FlushCache("ODL"); + await FlushCache("PODL"); + await FlushCache("VSODL"); } catch (Exception exc) { @@ -1283,6 +1288,8 @@ namespace MP.Data.Services // inserisco evento answ = dbTabController.OdlSetupPromPostuma(idxPromOdl, matrOpr, idxMacchina); await FlushCache("ODL"); + await FlushCache("PODL"); + await FlushCache("VSODL"); } catch (Exception exc) { @@ -1312,6 +1319,8 @@ namespace MP.Data.Services // inserisco evento answ = dbTabController.OdlSplit(idxODL, matrOpr, idxMacchina, TCRich, pzPallet, note, startNewOdl, qtyRich); await FlushCache("ODL"); + await FlushCache("PODL"); + await FlushCache("VSODL"); } catch (Exception exc) { @@ -1336,6 +1345,7 @@ namespace MP.Data.Services answ = dbTabController.OdlUpdate(idxODL, matrOpr, tCRichAttr, pzPallet, note); await FlushCache("ODL"); await FlushCache("PODL"); + await FlushCache("VSODL"); } catch (Exception exc) { From e32600f6d39d9d017bb6df340cc5f8f15a93d325 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 9 Nov 2023 15:41:10 +0100 Subject: [PATCH 05/14] Fix refresh display status --- MP-TAB-SERV/Components/MachineBlock.razor.cs | 12 +-- MP-TAB-SERV/Components/OdlMan.razor | 66 +++++++++------- MP-TAB-SERV/Components/OdlMan.razor.cs | 81 ++++++++++++++++---- MP-TAB-SERV/Components/SelTempoMSMC.razor | 2 +- MP-TAB-SERV/Components/SelTempoMSMC.razor.cs | 2 +- MP-TAB-SERV/MP-TAB-SERV.csproj | 2 +- MP-TAB-SERV/Pages/StatusMap.razor | 10 +-- MP-TAB-SERV/Pages/StatusMap.razor.cs | 11 +-- MP-TAB-SERV/Resources/ChangeLog.html | 2 +- MP-TAB-SERV/Resources/VersNum.txt | 2 +- MP-TAB-SERV/Resources/manifest.xml | 2 +- MP.Data/Controllers/MpTabController.cs | 2 +- MP.Data/DatabaseModels/PODLExpModel.cs | 14 +++- 13 files changed, 135 insertions(+), 73 deletions(-) diff --git a/MP-TAB-SERV/Components/MachineBlock.razor.cs b/MP-TAB-SERV/Components/MachineBlock.razor.cs index ce34dee6..08617025 100644 --- a/MP-TAB-SERV/Components/MachineBlock.razor.cs +++ b/MP-TAB-SERV/Components/MachineBlock.razor.cs @@ -158,20 +158,16 @@ namespace MP_TAB_SERV.Components } } - protected override async Task OnParametersSetAsync() + protected override void OnParametersSet() { isLoading = RecMSE == null; - await setGaugeVals(); - await Task.Delay(1); + setGaugeVals(); } - protected async Task setGaugeVals() + protected void setGaugeVals() { - await Task.Delay(1); - Log.Info("MBlock 01"); if (RecMSE != null) { - Log.Info("MBlock 02"); innerCircleVals.Clear(); outerCircleVals.Clear(); currMaxVal = int.Parse(RecMSE.NumPezzi.ToString()!); @@ -184,7 +180,7 @@ namespace MP_TAB_SERV.Components { outerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#1367FD", Value = RecMSE.extraVal }); } - Log.Info("MBlock 03"); + //Log.Trace($"MBlock | {RecMSE.IdxMacchina} | 03"); } else { diff --git a/MP-TAB-SERV/Components/OdlMan.razor b/MP-TAB-SERV/Components/OdlMan.razor index bb2743f1..af703efc 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor +++ b/MP-TAB-SERV/Components/OdlMan.razor @@ -33,7 +33,7 @@
    @if (cancelSetupEnabled) { -
    +
    } @@ -54,9 +54,9 @@

    @titleOdlDetail

    - @if (idxPOdlSel == 0) + @if (idxPOdlSel == 0 && !inAttr) { - + }
    @@ -111,7 +111,14 @@ TCiclo:
    - @currPodl.Tcassegnato.ToString("N2") + @if (currOdl != null && currOdl.Tcassegnato > 0) + { + @currOdl.Tcassegnato.ToString("N2") + } + else + { + @currPodl.Tcassegnato.ToString("N2") + }
    @@ -153,6 +160,16 @@ @if (!inAttr) { +
    + @if (idxPOdlSel > 0) + { + + } + else + { + + } +
    @@ -170,21 +187,14 @@
    -
    - @if (idxPOdlSel > 0) - { - - } - else - { - } -
    } @if (idxPOdlSel > 0 || inAttr) {
    - - +
    + + +
    @@ -204,26 +214,26 @@ @if (inAttr) { -
    +
    } -
    - -
    -
    -
    - - + else + { +
    +
    + + +
    + } +
    +
    -
    +
    -
    - -
    -
    +
    @*
    diff --git a/MP-TAB-SERV/Components/OdlMan.razor.cs b/MP-TAB-SERV/Components/OdlMan.razor.cs index b2f03b15..3e2cf2d3 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor.cs +++ b/MP-TAB-SERV/Components/OdlMan.razor.cs @@ -152,8 +152,7 @@ namespace MP_TAB_SERV.Components // se in attr --> carico podlCurr... if (inAttr && RecMSE != null) { - int currIdxPOdl = RecMSE != null ? RecMSE.IdxPOdl ?? 0 : 0; - currPodl = await TabDServ.PODLExp_getByKey(currIdxPOdl); + await ReloadXDL(false); } } @@ -284,7 +283,7 @@ namespace MP_TAB_SERV.Components idxOdl = idxODLStart; await advStep(currStep++); // faccio refresh e riporto - await refreshData(); + await RefreshData(); await CheckAttr(); // chiudo update... isProcessing = false; @@ -296,8 +295,13 @@ namespace MP_TAB_SERV.Components /// protected async Task OdlSetupStart() { - if (!await JSRuntime.InvokeAsync("confirm", $"Confermi inizio della fase di attrezzaggio per l'articolo [{currPodl.CodArticolo}] {currPodl.DescArticolo}?")) + TimeSpan estDur = TimeSpan.FromMinutes((double)tcRichAttr * currPodl.NumPezzi); + string stima = estDur.TotalHours > 1 ? $"{estDur.TotalHours:N1} ore" : $"{estDur.TotalMinutes:N1} min"; + if (!await JSRuntime.InvokeAsync("confirm", $"PODL: {currPodl.IdxPromessa}{Environment.NewLine}Art: [{currPodl.CodArticolo}] {currPodl.DescArticolo}{Environment.NewLine}Pezzi: {currPodl.NumPezzi:N0} * TCiclo: {tcRichAttr:N3}min{Environment.NewLine}Tempo stimato: {stima}{Environment.NewLine}{Environment.NewLine}Confermi inizio della fase di attrezzaggio?")) return; + + //if (!await JSRuntime.InvokeAsync("confirm", $"Confermi inizio della fase di attrezzaggio per l'articolo [{currPodl.CodArticolo}] {currPodl.DescArticolo}?")) + // return; /*************************************************** * comprende gestione machineSlave x fix ODL master --> slave * @@ -489,7 +493,7 @@ namespace MP_TAB_SERV.Components checkBtnStatus(); fixSplitBtn(false); // faccio refresh e riporto - await refreshData(); + await RefreshData(); await CheckAttr(); isProcessing = false; } @@ -622,13 +626,13 @@ namespace MP_TAB_SERV.Components } await advStep(currStep++); // faccio refresh e riporto - await refreshData(); + await RefreshData(); await CheckAttr(); await advStep(currStep++); isProcessing = false; } - protected async Task refreshData() + protected async Task RefreshData() { // refresh tabella dati tablet... TabDServ.RicalcMse(IdxMaccSel, 0); @@ -638,10 +642,8 @@ namespace MP_TAB_SERV.Components { // salvo in LocalStorage... await MServ.SaveMse(ListMSE); -#if false // aggiorno MSE attuale RecMSE = ListMSE.Find(x => x.IdxMacchina == IdxMaccSel); -#endif await E_Updated.InvokeAsync(ListMSE); } // update dati liste ODL @@ -662,7 +664,7 @@ namespace MP_TAB_SERV.Components string baseUrlAdmin = SMServ.GetConf("baseUrlAdmin"); string pageUrlApprODL = SMServ.GetConf("pageUrlApprODL"); string pageUrl = $"{baseUrlAdmin}{pageUrlApprODL}"; - string corpo = $"ODL: {idxOdl} | TC Assegnato: {tcAss} | TC Rich: {tcRich}{Environment.NewLine}{Environment.NewLine}"; + string corpo = $"ODL: {idxOdl} | TC Assegnato: {tcAss:N3} | TC Rich: {tcRich}{Environment.NewLine}{Environment.NewLine}"; corpo += string.Format(corpoChgTc, Environment.NewLine, pageUrl); corpo = corpo.Replace($"{Environment.NewLine}", "
    "); MailKitMailData mData = new MailKitMailData() @@ -699,8 +701,22 @@ namespace MP_TAB_SERV.Components // se devo mostrare, carico dati ODL! if (showOdlDetail && RecMSE != null) { - int currIdxPOdl = RecMSE != null ? RecMSE.IdxPOdl ?? 0 : 0; - currPodl = await TabDServ.PODLExp_getByKey(currIdxPOdl); + await ReloadXDL(true); + } + } + + private async Task ReloadXDL(bool reloadFromOdl) + { + int currIdxPOdl = IdxPOdlSel; + if (reloadFromOdl) + { + currIdxPOdl = RecMSE != null ? RecMSE.IdxPOdl ?? 0 : 0; + } + currPodl = await TabDServ.PODLExp_getByKey(currIdxPOdl); + // update a runtime dati ODL se assegnato + if (currPodl.IdxOdl > 0) + { + currOdl = await TabDServ.OdlByIdx(currPodl.IdxOdl, false); } } @@ -709,6 +725,32 @@ namespace MP_TAB_SERV.Components return SMServ.Traduci($"{baseLang}_{lemma}".ToUpper()); } + protected async Task SendFixEndSetup() + { + if (!await JSRuntime.InvokeAsync("confirm", $"Confermi invio FIX chiusura atrtezzaggio ad impianto?")) + return; + + string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now); + string outData = $"TS:{ts}|MATR:{MatrOpr}|ODL:{IdxOdl}"; + TabDServ.addTask4Machine(IdxMaccSel, taskType.fixStopSetup, outData); + outData = "Inserita richiesta invio Fix chiusura attrezzaggio " + outData; + lblOut = outData; + // se è master --> chiamo update child! + if (isMaster) + { + // invio eventi ad IOB slave... + var slaveList = SMServ.ListM2S + .Where(x => x.IdxMacchina.Equals(IdxMaccSel, StringComparison.InvariantCultureIgnoreCase)) + .ToList(); + foreach (var machine in slaveList) + { + // invio chiusura attrezzaggio + outData = $"TS:{ts}|MATR:{MatrOpr}|ODL:{idxOdl}|master machine:{IdxMaccSel}"; + TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.fixStopSetup, outData); + } + } + } + #endregion Protected Methods #region Private Fields @@ -786,6 +828,7 @@ namespace MP_TAB_SERV.Components } private PODLExpModel currPodl { get; set; } = new PODLExpModel(); + private ODLExpModel currOdl { get; set; } = new ODLExpModel(); /// /// Variabile idxMacc parent x selezione ODL @@ -825,6 +868,11 @@ namespace MP_TAB_SERV.Components } } + private bool endProdDisabled + { + get => !odlOk || needConfProd; + } + private int numPz2Conf { get @@ -848,7 +896,7 @@ namespace MP_TAB_SERV.Components } private string titleOdlDetail { - get => IdxPOdlSel > 0 ? "Verifica parametri attrezzaggio NUOVO PODL" : "Parametri ODL Corrente"; + get => IdxPOdlSel > 0 ? "Verifica parametri attrezzaggio NUOVO PODL" : inAttr ? "Parametri PODL in Attrezzaggio" : "Parametri ODL Corrente"; } private string cssDetailOdl @@ -1174,13 +1222,18 @@ namespace MP_TAB_SERV.Components prodMacchina = rawData.FirstOrDefault() ?? new PzProdModel(); } } + // imposto tcRichAttr in base allo stato... + if (odlOk) + { + tcRichAttr = currPodl.Tcassegnato; ; + } } private async Task ReloadPOdlDetailData() { if (IdxPOdlSel > 0) { - currPodl = await TabDServ.PODLExp_getByKey(IdxPOdlSel); + await ReloadXDL(false); // controllo se � cambiato PODL if (IdxPOdlSel != lastIdxPOdl) { diff --git a/MP-TAB-SERV/Components/SelTempoMSMC.razor b/MP-TAB-SERV/Components/SelTempoMSMC.razor index 380f5379..76a84cea 100644 --- a/MP-TAB-SERV/Components/SelTempoMSMC.razor +++ b/MP-TAB-SERV/Components/SelTempoMSMC.razor @@ -23,6 +23,6 @@ }
    - @lblTempo + → @lblTempo
    diff --git a/MP-TAB-SERV/Components/SelTempoMSMC.razor.cs b/MP-TAB-SERV/Components/SelTempoMSMC.razor.cs index 11a1b619..19fdc160 100644 --- a/MP-TAB-SERV/Components/SelTempoMSMC.razor.cs +++ b/MP-TAB-SERV/Components/SelTempoMSMC.razor.cs @@ -218,7 +218,7 @@ namespace MP_TAB_SERV.Components { get { - string answ = tcMode == "mc" ? $"--> {TempoMS.TotalMinutes:N0}:{TempoMS:ss} (min:sec)" : $"--> {TempoMC:0.000} (min.cent)"; + string answ = tcMode == "mc" ? $"{TempoMS.TotalMinutes:N0}:{TempoMS:ss} (min:sec)" : $"{TempoMC:0.000} (min.cent)"; return answ; } } diff --git a/MP-TAB-SERV/MP-TAB-SERV.csproj b/MP-TAB-SERV/MP-TAB-SERV.csproj index fd8b09d0..56514f72 100644 --- a/MP-TAB-SERV/MP-TAB-SERV.csproj +++ b/MP-TAB-SERV/MP-TAB-SERV.csproj @@ -3,7 +3,7 @@ net6.0 enable - 6.16.2311.909 + 6.16.2311.915 enable MP_TAB_SERV diff --git a/MP-TAB-SERV/Pages/StatusMap.razor b/MP-TAB-SERV/Pages/StatusMap.razor index 72bf0725..250dd569 100644 --- a/MP-TAB-SERV/Pages/StatusMap.razor +++ b/MP-TAB-SERV/Pages/StatusMap.razor @@ -2,17 +2,11 @@ @page "/home" @page "/status-map" - +
    @if (ListMSE == null || ListMSE.Count == 0 || isCalcSize) { - @*@for (int i = 0; i < 10; i++) - { -
    - @* -
    - }*@ - + } else { diff --git a/MP-TAB-SERV/Pages/StatusMap.razor.cs b/MP-TAB-SERV/Pages/StatusMap.razor.cs index de20447a..49cfeb7b 100644 --- a/MP-TAB-SERV/Pages/StatusMap.razor.cs +++ b/MP-TAB-SERV/Pages/StatusMap.razor.cs @@ -96,6 +96,8 @@ namespace MP_TAB_SERV.Pages { await getWDim(); isCalcSize = false; + ListMSE = await MDataService.MseGetAll(); + await InvokeAsync(StateHasChanged); } if (ListMSE != null) { @@ -104,21 +106,20 @@ namespace MP_TAB_SERV.Pages } } - protected override async Task OnInitializedAsync() + protected override void OnInitialized() { var df = MServ.UserPrefGet("DefCardMode"); ShowCard = df == "shrink" ? false : true; isCalcSize = true; ListMSE = null; SetupConf(); - ListMSE = await MDataService.MseGetAll(); } - protected async Task RefreshData(List newList) + protected void SaveData(List newList) { + //await Task.Delay(1); ListMSE = newList; - await InvokeAsync(StateHasChanged); - //Log.Trace("StatusMap | RefreshData"); + //await InvokeAsync(StateHasChanged); } #endregion Protected Methods diff --git a/MP-TAB-SERV/Resources/ChangeLog.html b/MP-TAB-SERV/Resources/ChangeLog.html index 514eae7a..ffefa68b 100644 --- a/MP-TAB-SERV/Resources/ChangeLog.html +++ b/MP-TAB-SERV/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MAPOSPEC -

    Versione: 6.16.2311.909

    +

    Versione: 6.16.2311.915


    Note di rilascio:
    • diff --git a/MP-TAB-SERV/Resources/VersNum.txt b/MP-TAB-SERV/Resources/VersNum.txt index c3aa4abd..8fd925f8 100644 --- a/MP-TAB-SERV/Resources/VersNum.txt +++ b/MP-TAB-SERV/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2311.909 +6.16.2311.915 diff --git a/MP-TAB-SERV/Resources/manifest.xml b/MP-TAB-SERV/Resources/manifest.xml index 5ea45187..cb13f8ba 100644 --- a/MP-TAB-SERV/Resources/manifest.xml +++ b/MP-TAB-SERV/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2311.909 + 6.16.2311.915 https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/MP-TAB-SERV.zip https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/ChangeLog.html false diff --git a/MP.Data/Controllers/MpTabController.cs b/MP.Data/Controllers/MpTabController.cs index 40800ec6..58d01c22 100644 --- a/MP.Data/Controllers/MpTabController.cs +++ b/MP.Data/Controllers/MpTabController.cs @@ -782,7 +782,7 @@ namespace MP.Data.Controllers var OnlyUnused = new SqlParameter("@onlyUnused", onlyUnused); dbResult = dbCtx .DbSetODLExp - .FromSqlRaw("EXEC stp_ODL_getByIdx @IdxOdl, @onlyUnused", IdxOdl, onlyUnused) + .FromSqlRaw("EXEC stp_ODL_getByIdx @IdxOdl, @onlyUnused", IdxOdl, OnlyUnused) .AsNoTracking() .ToList(); } diff --git a/MP.Data/DatabaseModels/PODLExpModel.cs b/MP.Data/DatabaseModels/PODLExpModel.cs index ff1c3cfc..018da8b1 100644 --- a/MP.Data/DatabaseModels/PODLExpModel.cs +++ b/MP.Data/DatabaseModels/PODLExpModel.cs @@ -47,10 +47,18 @@ namespace MP.Data.DatabaseModels get { string answ = "*"; - var allData = KeyRichiesta.Split('_'); - if (allData.Length > 0) + if (!string.IsNullOrEmpty(KeyRichiesta)) { - answ = allData[0]; + try + { + var allData = KeyRichiesta.Split('_'); + if (allData.Length > 0) + { + answ = allData[0]; + } + } + catch + { } } return answ; } From 8f072b5f8e14b6543de8dcd2b7341bd75df78bd2 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 9 Nov 2023 18:35:59 +0100 Subject: [PATCH 06/14] Ancora fix gestione ODL --- MP-TAB-SERV/Components/OdlMan.razor | 29 ++++--- MP-TAB-SERV/Components/OdlMan.razor.cs | 92 +++++++++++++++------ MP-TAB-SERV/Components/ProdConfirm.razor.cs | 4 +- MP-TAB-SERV/MP-TAB-SERV.csproj | 2 +- MP-TAB-SERV/Pages/ProdStop.razor.cs | 26 +++--- MP-TAB-SERV/Pages/StatusMap.razor.cs | 2 +- MP-TAB-SERV/Resources/ChangeLog.html | 2 +- MP-TAB-SERV/Resources/VersNum.txt | 2 +- MP-TAB-SERV/Resources/manifest.xml | 2 +- MP.Data/Constants.cs | 4 + MP.Data/Controllers/MpTabController.cs | 2 +- MP.Data/DatabaseModels/ODLExpModel.cs | 1 + MP.Data/Services/StatusData.cs | 8 +- MP.Data/Services/TabDataService.cs | 5 +- 14 files changed, 117 insertions(+), 64 deletions(-) diff --git a/MP-TAB-SERV/Components/OdlMan.razor b/MP-TAB-SERV/Components/OdlMan.razor index af703efc..e7f4f399 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor +++ b/MP-TAB-SERV/Components/OdlMan.razor @@ -6,15 +6,17 @@ @if (isProcessing) { - + } else { @if (needConfProd) { -
      -
      @lblWarnHead
      -
      @lblWarnBody @numPz2Conf.ToString("N0") pz NC
      +
      +
      +
      @lblWarnHead
      +
      @lblWarnBody @numPz2Conf.ToString("N0") pz NC
      +
      @if (!odlOk) { @@ -41,7 +43,7 @@ @if (!inAttr && !showOdlDetail) {
      - +
      } @@ -56,7 +58,7 @@
      @if (idxPOdlSel == 0 && !inAttr) { - + }
      @@ -220,15 +222,18 @@ } else { -
      -
      - - + if (odlOk) + { +
      +
      + + +
      -
      + } }
      - +
      diff --git a/MP-TAB-SERV/Components/OdlMan.razor.cs b/MP-TAB-SERV/Components/OdlMan.razor.cs index 3e2cf2d3..c08f2941 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor.cs +++ b/MP-TAB-SERV/Components/OdlMan.razor.cs @@ -5,6 +5,7 @@ using MP.Data.DatabaseModels; using MP.Data.Objects; using MP.Data.Services; using NLog; +using System; using System.Text; using static MP.Data.Objects.Enums; @@ -281,12 +282,19 @@ namespace MP_TAB_SERV.Components checkAll(); // imposto odl... idxOdl = idxODLStart; + IdxPOdlSel = 0; + inAttr = false; + IdxPOdlSel = 0; + RecMSE = null; await advStep(currStep++); // faccio refresh e riporto await RefreshData(); await CheckAttr(); // chiudo update... isProcessing = false; + //await InvokeAsync(StateHasChanged); + // qui rimando a pag principale... + NavMan.NavigateTo("/", true); } /// @@ -312,22 +320,7 @@ namespace MP_TAB_SERV.Components int currStep = 0; await advStep(currStep); isProcessing = true; - DateTime adesso = DateTime.Now; -#if false - // se fosse multi mi chiedo se sia DAVVERO in attrezzaggio... - if (isMulti) - { - try - { - // controllo se NON SONO gia in attrezzaggio... - var rigaStato = TabDServ.StatoMacchina(IdxMaccParent); - inAttr = (rigaStato.IdxStato == 2); - } - catch - { } - } -#endif await advStep(currStep++); // proseguo int idxODL_curr = 0; @@ -340,7 +333,7 @@ namespace MP_TAB_SERV.Components { tcRichAttr = currPodl.Tcassegnato; } - if (enableSplitODL) + if (enableSplitODL && !forceCloseOdl) { // splitto VECCHIO ODL (se fosse rimasto qualcosa da produrre e ne sia rimasto uno.......) try @@ -480,8 +473,6 @@ namespace MP_TAB_SERV.Components await TabDServ.saveCounter(IdxMaccSel, "0"); // imposto ODL su redis... TabDServ.saveCurrODL(IdxMaccSel, idxODL_curr); - // salvo odl selezionato - idxOdl = idxODL_curr; await advStep(currStep++); } else @@ -490,12 +481,19 @@ namespace MP_TAB_SERV.Components } // refresh finale + var tmpTCR = tcRichAttr; checkBtnStatus(); fixSplitBtn(false); // faccio refresh e riporto + idxOdl = idxODL_curr; + IdxPOdlSel = 0; + RecMSE = null; await RefreshData(); await CheckAttr(); + inAttr = true; + tcRichAttr = tmpTCR; isProcessing = false; + await InvokeAsync(StateHasChanged); } protected override async Task OnInitializedAsync() @@ -530,6 +528,7 @@ namespace MP_TAB_SERV.Components { if (!await JSRuntime.InvokeAsync("confirm", $"Confermi fine produzione?")) return; + // preparo gestione progress display MaxVal = 7; isProcessing = true; @@ -626,18 +625,27 @@ namespace MP_TAB_SERV.Components } await advStep(currStep++); // faccio refresh e riporto + IdxPOdlSel = 0; + RecMSE = null; + currOdl = new ODLExpModel(); + inAttr = false; + IdxPOdlSel = 0; + forceCloseOdl = true; + //await Task.Delay(250); await RefreshData(); await CheckAttr(); await advStep(currStep++); isProcessing = false; + await InvokeAsync(StateHasChanged); + //NavMan.NavigateTo(NavMan.Uri, true); } protected async Task RefreshData() { // refresh tabella dati tablet... - TabDServ.RicalcMse(IdxMaccSel, 0); + RecMSE = null; // rileggo e salvo.. - var ListMSE = await MDataService.MseGetAll(); + var ListMSE = await MDataService.MseGetAll(true); if (ListMSE != null) { // salvo in LocalStorage... @@ -699,20 +707,44 @@ namespace MP_TAB_SERV.Components { showOdlDetail = !showOdlDetail; // se devo mostrare, carico dati ODL! - if (showOdlDetail && RecMSE != null) + if (showOdlDetail) { await ReloadXDL(true); } } + private string txtForceCloseOdl + { + get => forceCloseOdl ? Traduci("ForceCloseODL") : Traduci("SplitCurrODL"); + } + private async Task ReloadXDL(bool reloadFromOdl) { int currIdxPOdl = IdxPOdlSel; - if (reloadFromOdl) + if (RecMSE != null) { - currIdxPOdl = RecMSE != null ? RecMSE.IdxPOdl ?? 0 : 0; + if (reloadFromOdl) + { + currIdxPOdl = RecMSE.IdxPOdl ?? 0; + } + // se ho PODL valido... + if (currIdxPOdl > 0) + { + currPodl = await TabDServ.PODLExp_getByKey(currIdxPOdl); + } + else + { + currPodl = new PODLExpModel() + { + IdxOdl = RecMSE.IdxOdl ?? 0, + KeyRichiesta = "-", + CodArticolo = RecMSE.CodArticolo, + DescArticolo = RecMSE.CodArticolo, + NumPezzi = RecMSE.NumPezzi, + Tcassegnato = RecMSE.TCAssegnato + }; + } } - currPodl = await TabDServ.PODLExp_getByKey(currIdxPOdl); // update a runtime dati ODL se assegnato if (currPodl.IdxOdl > 0) { @@ -1193,7 +1225,7 @@ namespace MP_TAB_SERV.Components inCmd2 = await TabDServ.EvListInsert(newRecParent, Enums.tipoInputEvento.barcode); } // chiamo refresh MSE - TabDServ.RicalcMse(idxMaccCurr, 0); + await TabDServ.RicalcMse(idxMaccCurr, 0); lblOut = userMsg; // loggo USR MSG Log.Info(userMsg); @@ -1225,7 +1257,15 @@ namespace MP_TAB_SERV.Components // imposto tcRichAttr in base allo stato... if (odlOk) { - tcRichAttr = currPodl.Tcassegnato; ; + // prendo TCRich da ODL... + if (IdxOdl > 0) + { + tcRichAttr = currOdl.TCRichAttr; + } + else + { + tcRichAttr = currPodl.Tcassegnato; + } } } diff --git a/MP-TAB-SERV/Components/ProdConfirm.razor.cs b/MP-TAB-SERV/Components/ProdConfirm.razor.cs index 0206570d..b9867dc0 100644 --- a/MP-TAB-SERV/Components/ProdConfirm.razor.cs +++ b/MP-TAB-SERV/Components/ProdConfirm.razor.cs @@ -165,9 +165,9 @@ namespace MP_TAB_SERV.Components // effettua conferma con conf da DB del tipo (giorni / turni / periodo bool fatto = effettuaConfermaProd(); // refresh tabella dati tablet... - TabDServ.RicalcMse(IdxMaccSel, 0); + await TabDServ.RicalcMse(IdxMaccSel, 0); // rileggo e salvo.. - var ListMSE = await MDataService.MseGetAll(); + var ListMSE = await MDataService.MseGetAll(true); if (ListMSE != null) { // salvo in LocalStorage... diff --git a/MP-TAB-SERV/MP-TAB-SERV.csproj b/MP-TAB-SERV/MP-TAB-SERV.csproj index 56514f72..85516259 100644 --- a/MP-TAB-SERV/MP-TAB-SERV.csproj +++ b/MP-TAB-SERV/MP-TAB-SERV.csproj @@ -3,7 +3,7 @@ net6.0 enable - 6.16.2311.915 + 6.16.2311.918 enable MP_TAB_SERV diff --git a/MP-TAB-SERV/Pages/ProdStop.razor.cs b/MP-TAB-SERV/Pages/ProdStop.razor.cs index 3715eb4f..e76ce62c 100644 --- a/MP-TAB-SERV/Pages/ProdStop.razor.cs +++ b/MP-TAB-SERV/Pages/ProdStop.razor.cs @@ -66,7 +66,7 @@ namespace MP_TAB_SERV.Pages protected SharedMemService SMServ { get; set; } = null!; [Inject] - protected TabDataService TabServ { get; set; } = null!; + protected TabDataService TabDServ { get; set; } = null!; #endregion Protected Properties @@ -87,7 +87,7 @@ namespace MP_TAB_SERV.Pages var rigaEvento = SMServ.GetEventRow(IdxEv); if (rigaEvento != null) { - var rigaStato = TabServ.StatoMacchina(IdxMacc); + var rigaStato = TabDServ.StatoMacchina(IdxMacc); // processo evento... if (insRealtime) { @@ -103,14 +103,14 @@ namespace MP_TAB_SERV.Pages pallet = rigaStato.pallet }; // se realtime - await TabServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.barcode); + await TabDServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.barcode); // resetta il microstato in modo da ricevere successive info HW - TabServ.resetMicrostatoMacchina(IdxMacc); + TabDServ.resetMicrostatoMacchina(IdxMacc); } else { // in primis disabilito insert... - TabServ.MacchinaSetInsEnab(IdxMacc, false); + TabDServ.MacchinaSetInsEnab(IdxMacc, false); // calcolo evento string evento = $"{IdxEv}"; @@ -128,7 +128,7 @@ namespace MP_TAB_SERV.Pages try { // cerco da 1 sec DOPO evento... - var tabNext = TabServ.DDB_getNext(IdxMacc, DtRif.AddSeconds(1)); + var tabNext = TabDServ.DDB_getNext(IdxMacc, DtRif.AddSeconds(1)); DateTime nextEvDT = tabNext != null ? tabNext.InizioStato : DateTime.Now.AddMinutes(-1); @@ -145,7 +145,7 @@ namespace MP_TAB_SERV.Pages MatrOpr = MatrOpr, pallet = rigaStato.pallet }; - await TabServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.barcode); + await TabDServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.barcode); // update commento apertura! commento = $"999 - Dich StartEvt: {evento} [{codRich}]"; @@ -159,11 +159,11 @@ namespace MP_TAB_SERV.Pages MatrOpr = MatrOpr, pallet = rigaStato.pallet }; - await TabServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.barcode); + await TabDServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.barcode); // eseguo ricalcolo! DateTime startRicalcolo = DtRif.AddMinutes(minAnticipoRicalcolo); // eseguo ricalcolo periodo.. - await TabServ.DDB_DoRecalc(IdxMacc, startRicalcolo, 1, rdm_nEvStep, rdm_nEvCheck, rdm_ChkOnly); + await TabDServ.DDB_DoRecalc(IdxMacc, startRicalcolo, 1, rdm_nEvStep, rdm_nEvCheck, rdm_ChkOnly); // chiamo registrazione commento... if (noteEdit != null) { @@ -177,7 +177,7 @@ namespace MP_TAB_SERV.Pages } // riabilito insert... anche se non dovrebbe servire x stored ricalcolo precedente... - TabServ.MacchinaSetInsEnab(IdxMacc, true); + TabDServ.MacchinaSetInsEnab(IdxMacc, true); } // mostro esito alertCss = "alert-succes"; @@ -190,9 +190,9 @@ namespace MP_TAB_SERV.Pages } } // faccio refresh x singola macchina 2019.03.26 - TabServ.RicalcMse(IdxMacc, 0); + await TabDServ.RicalcMse(IdxMacc, 0); // rileggo e salvo.. - var ListMSE = await MDataService.MseGetAll(); + var ListMSE = await MDataService.MseGetAll(true); if (ListMSE != null) { // salvo in LocalStorage... @@ -268,7 +268,7 @@ namespace MP_TAB_SERV.Pages { CurrMSE = await MServ.GetMachineMse(IdxMacc); } - var eventsAll = await TabServ.AnagEventiGetByMacch(IdxMacc); + var eventsAll = await TabDServ.AnagEventiGetByMacch(IdxMacc); if (eventsAll != null) { events2show = eventsAll.Where(x => x.EventoTablet).OrderBy(x => x.Label).ToList(); diff --git a/MP-TAB-SERV/Pages/StatusMap.razor.cs b/MP-TAB-SERV/Pages/StatusMap.razor.cs index 49cfeb7b..cbc1c392 100644 --- a/MP-TAB-SERV/Pages/StatusMap.razor.cs +++ b/MP-TAB-SERV/Pages/StatusMap.razor.cs @@ -96,7 +96,7 @@ namespace MP_TAB_SERV.Pages { await getWDim(); isCalcSize = false; - ListMSE = await MDataService.MseGetAll(); + ListMSE = await MDataService.MseGetAll(true); await InvokeAsync(StateHasChanged); } if (ListMSE != null) diff --git a/MP-TAB-SERV/Resources/ChangeLog.html b/MP-TAB-SERV/Resources/ChangeLog.html index ffefa68b..02639326 100644 --- a/MP-TAB-SERV/Resources/ChangeLog.html +++ b/MP-TAB-SERV/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MAPOSPEC -

      Versione: 6.16.2311.915

      +

      Versione: 6.16.2311.918


      Note di rilascio:
      • diff --git a/MP-TAB-SERV/Resources/VersNum.txt b/MP-TAB-SERV/Resources/VersNum.txt index 8fd925f8..98e1300d 100644 --- a/MP-TAB-SERV/Resources/VersNum.txt +++ b/MP-TAB-SERV/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2311.915 +6.16.2311.918 diff --git a/MP-TAB-SERV/Resources/manifest.xml b/MP-TAB-SERV/Resources/manifest.xml index cb13f8ba..70263c9f 100644 --- a/MP-TAB-SERV/Resources/manifest.xml +++ b/MP-TAB-SERV/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2311.915 + 6.16.2311.918 https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/MP-TAB-SERV.zip https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/ChangeLog.html false diff --git a/MP.Data/Constants.cs b/MP.Data/Constants.cs index 0fde3879..9f43bd5b 100644 --- a/MP.Data/Constants.cs +++ b/MP.Data/Constants.cs @@ -17,6 +17,10 @@ // REDIS KEY Dati correnti public static readonly string CONF_MON_KEY = $"{BASE_HASH}:Conf:MonDispData"; + + + public static string redisMseKey = "MP:MON:Cache:MSE"; + #endregion Public Fields } } \ No newline at end of file diff --git a/MP.Data/Controllers/MpTabController.cs b/MP.Data/Controllers/MpTabController.cs index 58d01c22..a3190441 100644 --- a/MP.Data/Controllers/MpTabController.cs +++ b/MP.Data/Controllers/MpTabController.cs @@ -504,7 +504,7 @@ namespace MP.Data.Controllers var FlgStorico = new SqlParameter("@flgStorico", flgStorico); var result = dbCtx .Database - .ExecuteSqlRaw("EXEC stp_EL_UpsertByOdl @IdxMacchina, @flgStorico, @DoInsert", IdxOdl, FlgStorico); + .ExecuteSqlRaw("EXEC stp_EL_UpsertByOdl @IdxODL, @flgStorico", IdxOdl, FlgStorico); fatto = result != 0; } catch (Exception exc) diff --git a/MP.Data/DatabaseModels/ODLExpModel.cs b/MP.Data/DatabaseModels/ODLExpModel.cs index dbfd429e..e2ed9a4b 100644 --- a/MP.Data/DatabaseModels/ODLExpModel.cs +++ b/MP.Data/DatabaseModels/ODLExpModel.cs @@ -21,6 +21,7 @@ namespace MP.Data.DatabaseModels public string IdxMacchina { get; set; } public int NumPezzi { get; set; } public decimal Tcassegnato { get; set; } + public decimal TCRichAttr { get; set; } public DateTime? DataInizio { get; set; } public DateTime? DataFine { get; set; } [MaxLength(2500)] diff --git a/MP.Data/Services/StatusData.cs b/MP.Data/Services/StatusData.cs index 5eb81cec..3c1782c9 100644 --- a/MP.Data/Services/StatusData.cs +++ b/MP.Data/Services/StatusData.cs @@ -118,7 +118,7 @@ namespace MP.Data.Services stopWatch.Start(); List? result = new List(); // cerco in redis... - RedisValue rawData = redisDb.StringGet(redisMseKey); + RedisValue rawData = redisDb.StringGet(Constants.redisMseKey); if (rawData.HasValue && !forceDb) { result = JsonConvert.DeserializeObject>($"{rawData}"); @@ -131,7 +131,7 @@ namespace MP.Data.Services result = await Task.FromResult(dbController.MseGetAll(maxAge)); // serializzp e salvo... rawData = JsonConvert.SerializeObject(result); - await redisDb.StringSetAsync(redisMseKey, rawData, TimeSpan.FromMilliseconds(maxAge)); + await redisDb.StringSetAsync(Constants.redisMseKey, rawData, TimeSpan.FromMilliseconds(maxAge)); stopWatch.Stop(); TimeSpan ts = stopWatch.Elapsed; Log.Debug($"Read from DB: {ts.TotalMilliseconds}ms"); @@ -165,7 +165,9 @@ namespace MP.Data.Services private static IConfiguration _configuration = null!; private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); private int maxAge = 2000; - private string redisMseKey = "MP:MON:Cache:MSE"; +#if false + private string redisMseKey = "MP:MON:Cache:MSE"; +#endif #endregion Private Fields diff --git a/MP.Data/Services/TabDataService.cs b/MP.Data/Services/TabDataService.cs index 8489419e..191de962 100644 --- a/MP.Data/Services/TabDataService.cs +++ b/MP.Data/Services/TabDataService.cs @@ -1199,7 +1199,7 @@ namespace MP.Data.Services answ = dbTabController.OdlInizioSetup(idxODL, matrOpr, idxMacchina, tcRich, pzPallet, note); await FlushCache("ODL"); await FlushCache("PODL"); - await FlushCache("VSODL"); + await FlushCache("VSODL"); } catch (Exception exc) { @@ -1893,10 +1893,11 @@ namespace MP.Data.Services /// idx macchina da confermare /// Num massimo secondi di "vecchiaia" del dato /// - public bool RicalcMse(string idxMacchina, int maxAgeSec) + public async Task RicalcMse(string idxMacchina, int maxAgeSec) { bool answ = false; answ = dbTabController.RicalcMse(idxMacchina, maxAgeSec); + await FlushCache(Constants.redisMseKey); return answ; } From df5dca973ae03f37b2c66ddba97f58066ebf6433 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 10 Nov 2023 09:06:03 +0100 Subject: [PATCH 07/14] Refresh errore "isSlave" --- MP-TAB-SERV/Components/OdlMan.razor | 456 +++++++++++++------------ MP-TAB-SERV/Components/OdlMan.razor.cs | 1 + MP-TAB-SERV/MP-TAB-SERV.csproj | 2 +- MP-TAB-SERV/Resources/ChangeLog.html | 2 +- MP-TAB-SERV/Resources/VersNum.txt | 2 +- MP-TAB-SERV/Resources/manifest.xml | 2 +- 6 files changed, 239 insertions(+), 226 deletions(-) diff --git a/MP-TAB-SERV/Components/OdlMan.razor b/MP-TAB-SERV/Components/OdlMan.razor index e7f4f399..4e8f6fae 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor +++ b/MP-TAB-SERV/Components/OdlMan.razor @@ -10,237 +10,248 @@ } else { - @if (needConfProd) + @if (isSlave) { -
        -
        -
        @lblWarnHead
        -
        @lblWarnBody @numPz2Conf.ToString("N0") pz NC
        +
        +
        +
        @(Traduci("lblWarnHeadSlave"))
        +
        @(Traduci("lblWarnBodySlave"))
        - @if (!odlOk) - { -
        - -
        - } } else { -
        - Slave machine man -
        -
        - Check articolo in revisione -
        - @if (cancelSetupEnabled) + @if (needConfProd) { -
        - -
        - } - - @if (!inAttr && !showOdlDetail) - { -
        - -
        - } - - @if (showOdlDetail || inAttr) - { -
        -
        -
        -
        -

        @titleOdlDetail

        -
        -
        - @if (idxPOdlSel == 0 && !inAttr) - { - - } -
        -
        -
        -
        -
        -
        - P.ODL: -
        -
        - @currPodl.IdxPromessa.ToString("N0") -
        -
        -
        -
        - Rif: -
        -
        - @currPodl.KeyRichiesta -
        -
        -
        -
        - Cod: -
        -
        - @currPodl.CodArticolo -
        -
        -
        -
        -
        -
        - Articolo: -
        -
        - @currPodl.DescArticolo -
        -
        -
        -
        -
        -
        - Pezzi: -
        -
        - @currPodl.NumPezzi.ToString("N0") -
        -
        -
        -
        - TCiclo: -
        -
        - @if (currOdl != null && currOdl.Tcassegnato > 0) - { - @currOdl.Tcassegnato.ToString("N2") - } - else - { - @currPodl.Tcassegnato.ToString("N2") - } -
        -
        -
        -
        - Pz/pallet: -
        -
        - @currPodl.PzPallet -
        -
        -
        -
        - +
        +
        +
        @lblWarnHead
        +
        @lblWarnBody @numPz2Conf.ToString("N0") pz NC
        - } - - @if (!inAttr) - { -
        - @if (idxPOdlSel > 0) - { - - } - else - { - - } -
        -
        -
        - - -
        - - -
        -
        -
        - } - @if (idxPOdlSel > 0 || inAttr) - { -
        -
        - - -
        -
        -
        - -
        -
        - Pz Pallet -
        - -
        -
        - } - - @if (inAttr) - { -
        - -
        - } - else - { - if (odlOk) + @if (!odlOk) { -
        -
        - - -
        +
        +
        } } -
        - -
        -
        - -
        -
        - - @*
        + else + { +
        + Slave machine man +
        +
        + Check articolo in revisione +
        + @if (cancelSetupEnabled) + { +
        + +
        + } + + @if (!inAttr && !showOdlDetail) + { +
        + +
        + } + + @if (showOdlDetail || inAttr) + { +
        +
        +
        +
        +

        @titleOdlDetail

        +
        +
        + @if (idxPOdlSel == 0 && !inAttr) + { + + } +
        +
        +
        +
        +
        +
        + P.ODL: +
        +
        + @currPodl.IdxPromessa.ToString("N0") +
        +
        +
        +
        + Rif: +
        +
        + @currPodl.KeyRichiesta +
        +
        +
        +
        + Cod: +
        +
        + @currPodl.CodArticolo +
        +
        +
        +
        +
        +
        + Articolo: +
        +
        + @currPodl.DescArticolo +
        +
        +
        +
        +
        +
        + Pezzi: +
        +
        + @currPodl.NumPezzi.ToString("N0") +
        +
        +
        +
        + TCiclo: +
        +
        + @if (currOdl != null && currOdl.Tcassegnato > 0) + { + @currOdl.Tcassegnato.ToString("N2") + } + else + { + @currPodl.Tcassegnato.ToString("N2") + } +
        +
        +
        +
        + Pz/pallet: +
        +
        + @currPodl.PzPallet +
        +
        +
        +
        + +
        +
        + } + + @if (!inAttr) + { +
        + @if (idxPOdlSel > 0) + { + + } + else + { + + } +
        +
        +
        + + +
        + + +
        +
        +
        + } + @if (idxPOdlSel > 0 || inAttr) + { +
        +
        + + +
        +
        +
        + +
        +
        + Pz Pallet +
        + +
        +
        + } + + @if (inAttr) + { +
        + +
        + } + else + { + if (odlOk) + { +
        +
        + + +
        +
        + } + } +
        + +
        +
        + +
        +
        + + @*
        @@ -254,10 +265,11 @@
        *@ -
        -
        - @lblOut -
        +
        +
        + @lblOut +
        + } } }
        \ No newline at end of file diff --git a/MP-TAB-SERV/Components/OdlMan.razor.cs b/MP-TAB-SERV/Components/OdlMan.razor.cs index c08f2941..c081fda9 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor.cs +++ b/MP-TAB-SERV/Components/OdlMan.razor.cs @@ -882,6 +882,7 @@ namespace MP_TAB_SERV.Components get => odlOk ? Traduci("ConfProdBeforeContinueHead") : Traduci("setOdlBeforeContinueHead"); } + private int MatrOpr { get => MServ.MatrOpr; diff --git a/MP-TAB-SERV/MP-TAB-SERV.csproj b/MP-TAB-SERV/MP-TAB-SERV.csproj index 85516259..2a4052df 100644 --- a/MP-TAB-SERV/MP-TAB-SERV.csproj +++ b/MP-TAB-SERV/MP-TAB-SERV.csproj @@ -3,7 +3,7 @@ net6.0 enable - 6.16.2311.918 + 6.16.2311.919 enable MP_TAB_SERV diff --git a/MP-TAB-SERV/Resources/ChangeLog.html b/MP-TAB-SERV/Resources/ChangeLog.html index 02639326..cc1f4884 100644 --- a/MP-TAB-SERV/Resources/ChangeLog.html +++ b/MP-TAB-SERV/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MAPOSPEC -

        Versione: 6.16.2311.918

        +

        Versione: 6.16.2311.919


        Note di rilascio:
        • diff --git a/MP-TAB-SERV/Resources/VersNum.txt b/MP-TAB-SERV/Resources/VersNum.txt index 98e1300d..07056f18 100644 --- a/MP-TAB-SERV/Resources/VersNum.txt +++ b/MP-TAB-SERV/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2311.918 +6.16.2311.919 diff --git a/MP-TAB-SERV/Resources/manifest.xml b/MP-TAB-SERV/Resources/manifest.xml index 70263c9f..ab8d78fe 100644 --- a/MP-TAB-SERV/Resources/manifest.xml +++ b/MP-TAB-SERV/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2311.918 + 6.16.2311.919 https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/MP-TAB-SERV.zip https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/ChangeLog.html false From d63613b84cbc84a557ea379fe411c4d88e7b4365 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 10 Nov 2023 09:06:10 +0100 Subject: [PATCH 08/14] Refresh versioni programmi CORE --- MP.INVE/MP.INVE.csproj | 2 +- MP.INVE/Resources/ChangeLog.html | 2 +- MP.INVE/Resources/VersNum.txt | 2 +- MP.INVE/Resources/manifest.xml | 2 +- MP.Land/MP.Land.csproj | 2 +- MP.Land/Resources/ChangeLog.html | 2 +- MP.Land/Resources/VersNum.txt | 2 +- MP.Land/Resources/manifest.xml | 2 +- MP.Mon/MP.Mon.csproj | 2 +- MP.Mon/Resources/ChangeLog.html | 2 +- MP.Mon/Resources/VersNum.txt | 2 +- MP.Mon/Resources/manifest.xml | 2 +- MP.Prog/MP.Prog.csproj | 2 +- MP.Prog/Resources/ChangeLog.html | 2 +- MP.Prog/Resources/VersNum.txt | 2 +- MP.Prog/Resources/manifest.xml | 2 +- MP.Stats/MP.Stats.csproj | 4 ++-- MP.Stats/Resources/ChangeLog.html | 2 +- MP.Stats/Resources/VersNum.txt | 2 +- MP.Stats/Resources/manifest.xml | 2 +- 20 files changed, 21 insertions(+), 21 deletions(-) diff --git a/MP.INVE/MP.INVE.csproj b/MP.INVE/MP.INVE.csproj index c3d99f3d..5baf9457 100644 --- a/MP.INVE/MP.INVE.csproj +++ b/MP.INVE/MP.INVE.csproj @@ -5,7 +5,7 @@ enable enable MP.INVE - 6.16.2310.308 + 6.16.2311.1009 diff --git a/MP.INVE/Resources/ChangeLog.html b/MP.INVE/Resources/ChangeLog.html index 70a2d92f..7e65988e 100644 --- a/MP.INVE/Resources/ChangeLog.html +++ b/MP.INVE/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MAPOINVE -

          Versione: 6.16.2310.308

          +

          Versione: 6.16.2311.1009


          Note di rilascio:
          • diff --git a/MP.INVE/Resources/VersNum.txt b/MP.INVE/Resources/VersNum.txt index f08bb28c..cf39a0ed 100644 --- a/MP.INVE/Resources/VersNum.txt +++ b/MP.INVE/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2310.308 +6.16.2311.1009 diff --git a/MP.INVE/Resources/manifest.xml b/MP.INVE/Resources/manifest.xml index ac1073d8..17c95f0b 100644 --- a/MP.INVE/Resources/manifest.xml +++ b/MP.INVE/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2310.308 + 6.16.2311.1009 https://nexus.steamware.net/repository/SWS/MP-INVE/stable/LAST/MP.INVE.zip https://nexus.steamware.net/repository/SWS/MP-INVE/stable/LAST/ChangeLog.html false diff --git a/MP.Land/MP.Land.csproj b/MP.Land/MP.Land.csproj index 33bbb0e9..2cc99106 100644 --- a/MP.Land/MP.Land.csproj +++ b/MP.Land/MP.Land.csproj @@ -3,7 +3,7 @@ net6.0 MP.Land - 6.16.2310.1615 + 6.16.2311.1009 diff --git a/MP.Land/Resources/ChangeLog.html b/MP.Land/Resources/ChangeLog.html index 5fb28cd2..2076f49f 100644 --- a/MP.Land/Resources/ChangeLog.html +++ b/MP.Land/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo gestione Programmi MAPO -

            Versione: 6.16.2310.1615

            +

            Versione: 6.16.2311.1009


            Note di rilascio:
              diff --git a/MP.Land/Resources/VersNum.txt b/MP.Land/Resources/VersNum.txt index 1dd72699..cf39a0ed 100644 --- a/MP.Land/Resources/VersNum.txt +++ b/MP.Land/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2310.1615 +6.16.2311.1009 diff --git a/MP.Land/Resources/manifest.xml b/MP.Land/Resources/manifest.xml index fd7a9843..e09e8ed5 100644 --- a/MP.Land/Resources/manifest.xml +++ b/MP.Land/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2310.1615 + 6.16.2311.1009 https://nexus.steamware.net/repository/SWS/MP-LAND/stable/LAST/MP.Land.zip https://nexus.steamware.net/repository/SWS/MP-LAND/stable/LAST/ChangeLog.html false diff --git a/MP.Mon/MP.Mon.csproj b/MP.Mon/MP.Mon.csproj index 6a6c7d78..da0d3b9d 100644 --- a/MP.Mon/MP.Mon.csproj +++ b/MP.Mon/MP.Mon.csproj @@ -4,7 +4,7 @@ net6.0 enable enable - 6.16.2309.2613 + 6.16.2311.1009 diff --git a/MP.Mon/Resources/ChangeLog.html b/MP.Mon/Resources/ChangeLog.html index b01f63a6..84b1ad62 100644 --- a/MP.Mon/Resources/ChangeLog.html +++ b/MP.Mon/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MON MAPO -

              Versione: 6.16.2309.2613

              +

              Versione: 6.16.2311.1009


              Note di rilascio:
              • diff --git a/MP.Mon/Resources/VersNum.txt b/MP.Mon/Resources/VersNum.txt index 1ab5b9e0..cf39a0ed 100644 --- a/MP.Mon/Resources/VersNum.txt +++ b/MP.Mon/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2309.2613 +6.16.2311.1009 diff --git a/MP.Mon/Resources/manifest.xml b/MP.Mon/Resources/manifest.xml index 0848489c..7f9f2b8b 100644 --- a/MP.Mon/Resources/manifest.xml +++ b/MP.Mon/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2309.2613 + 6.16.2311.1009 https://nexus.steamware.net/repository/SWS/MP-MON/stable/LAST/MP.Mon.zip https://nexus.steamware.net/repository/SWS/MP-MON/stable/LAST/ChangeLog.html false diff --git a/MP.Prog/MP.Prog.csproj b/MP.Prog/MP.Prog.csproj index b14be2a3..b174b88b 100644 --- a/MP.Prog/MP.Prog.csproj +++ b/MP.Prog/MP.Prog.csproj @@ -3,7 +3,7 @@ net6.0 MP.Prog - 6.16.2304.0419 + 6.16.2311.1009 diff --git a/MP.Prog/Resources/ChangeLog.html b/MP.Prog/Resources/ChangeLog.html index efe63704..2076f49f 100644 --- a/MP.Prog/Resources/ChangeLog.html +++ b/MP.Prog/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo gestione Programmi MAPO -

                Versione: 6.16.2304.0419

                +

                Versione: 6.16.2311.1009


                Note di rilascio:
                  diff --git a/MP.Prog/Resources/VersNum.txt b/MP.Prog/Resources/VersNum.txt index 4bc5312b..cf39a0ed 100644 --- a/MP.Prog/Resources/VersNum.txt +++ b/MP.Prog/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2306.0612 +6.16.2311.1009 diff --git a/MP.Prog/Resources/manifest.xml b/MP.Prog/Resources/manifest.xml index 1ffe0627..c58eb5ec 100644 --- a/MP.Prog/Resources/manifest.xml +++ b/MP.Prog/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2304.0419 + 6.16.2311.1009 https://nexus.steamware.net/repository/SWS/MP-PROG/stable/LAST/MP.Prog.zip https://nexus.steamware.net/repository/SWS/MP-PROG/stable/LAST/ChangeLog.html false diff --git a/MP.Stats/MP.Stats.csproj b/MP.Stats/MP.Stats.csproj index 467d18d6..c653bf46 100644 --- a/MP.Stats/MP.Stats.csproj +++ b/MP.Stats/MP.Stats.csproj @@ -4,8 +4,8 @@ net6.0 MP.Stats 826e877c-ba70-4253-84cb-d0b1cafd4440 - 6.16.2307.0515 - 6.16.2307.0515 + 6.16.2311.1009 + 6.16.2311.1009 diff --git a/MP.Stats/Resources/ChangeLog.html b/MP.Stats/Resources/ChangeLog.html index 9c312fc0..fc337935 100644 --- a/MP.Stats/Resources/ChangeLog.html +++ b/MP.Stats/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo statistiche MAPO -

                  Versione: 6.16.2307.0515

                  +

                  Versione: 6.16.2311.1009


                  Note di rilascio:
                    diff --git a/MP.Stats/Resources/VersNum.txt b/MP.Stats/Resources/VersNum.txt index b889c064..cf39a0ed 100644 --- a/MP.Stats/Resources/VersNum.txt +++ b/MP.Stats/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2307.0515 +6.16.2311.1009 diff --git a/MP.Stats/Resources/manifest.xml b/MP.Stats/Resources/manifest.xml index b31b6727..39ed393f 100644 --- a/MP.Stats/Resources/manifest.xml +++ b/MP.Stats/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2307.0515 + 6.16.2311.1009 https://nexus.steamware.net/repository/SWS/MP-STATS/stable/LAST/MP.Stats.zip https://nexus.steamware.net/repository/SWS/MP-STATS/stable/LAST/ChangeLog.html false From ac367a7ac3e012a96afc47d70bc4bfe6a17f0ab6 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 10 Nov 2023 11:29:01 +0100 Subject: [PATCH 09/14] fix reload pagina post fine attr --- MP-TAB-SERV/Components/OdlMan.razor.cs | 3 ++- MP.Data/Controllers/MpSpecController.cs | 2 ++ MP.SPEC/MP.SPEC.csproj | 2 +- MP.SPEC/Resources/ChangeLog.html | 2 +- MP.SPEC/Resources/VersNum.txt | 2 +- MP.SPEC/Resources/manifest.xml | 2 +- 6 files changed, 8 insertions(+), 5 deletions(-) diff --git a/MP-TAB-SERV/Components/OdlMan.razor.cs b/MP-TAB-SERV/Components/OdlMan.razor.cs index c081fda9..33c1d0af 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor.cs +++ b/MP-TAB-SERV/Components/OdlMan.razor.cs @@ -294,7 +294,8 @@ namespace MP_TAB_SERV.Components isProcessing = false; //await InvokeAsync(StateHasChanged); // qui rimando a pag principale... - NavMan.NavigateTo("/", true); + //NavMan.NavigateTo("/", true); + NavMan.NavigateTo(NavMan.Uri, true); } /// diff --git a/MP.Data/Controllers/MpSpecController.cs b/MP.Data/Controllers/MpSpecController.cs index 2bb17d59..4f55e404 100644 --- a/MP.Data/Controllers/MpSpecController.cs +++ b/MP.Data/Controllers/MpSpecController.cs @@ -595,6 +595,8 @@ namespace MP.Data.Controllers // dbContext x ogni singolo flusso using (var dbCtx = new MoonProContext(_configuration)) { + // opzionalmente timeout comandi a 2 minuti... NON usato x ora e da testare + //dbCtx.Database.SetCommandTimeout(TimeSpan.FromMinutes(2)); // li processo per intervallo richiesto, cercando dati nel periodo e // selezionando VC while (!setCompleted) diff --git a/MP.SPEC/MP.SPEC.csproj b/MP.SPEC/MP.SPEC.csproj index f3196714..af75c182 100644 --- a/MP.SPEC/MP.SPEC.csproj +++ b/MP.SPEC/MP.SPEC.csproj @@ -5,7 +5,7 @@ enable enable MP.SPEC - 6.16.2310.2609 + 6.16.2311.1009 diff --git a/MP.SPEC/Resources/ChangeLog.html b/MP.SPEC/Resources/ChangeLog.html index 4dc4e658..ced67f1c 100644 --- a/MP.SPEC/Resources/ChangeLog.html +++ b/MP.SPEC/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MAPOSPEC -

                    Versione: 6.16.2310.2609

                    +

                    Versione: 6.16.2311.1009


                    Note di rilascio:
                    • diff --git a/MP.SPEC/Resources/VersNum.txt b/MP.SPEC/Resources/VersNum.txt index 2468fb4d..cf39a0ed 100644 --- a/MP.SPEC/Resources/VersNum.txt +++ b/MP.SPEC/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2310.2609 +6.16.2311.1009 diff --git a/MP.SPEC/Resources/manifest.xml b/MP.SPEC/Resources/manifest.xml index 78903994..36ce1d4c 100644 --- a/MP.SPEC/Resources/manifest.xml +++ b/MP.SPEC/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2310.2609 + 6.16.2311.1009 https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/MP.SPEC.zip https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/ChangeLog.html false From d8c30d194661076a2bb44a5d47b7d3f67bb4fd4c Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 10 Nov 2023 11:32:41 +0100 Subject: [PATCH 10/14] reload status map --- MP-TAB-SERV/Components/OdlMan.razor.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/MP-TAB-SERV/Components/OdlMan.razor.cs b/MP-TAB-SERV/Components/OdlMan.razor.cs index 33c1d0af..7392b525 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor.cs +++ b/MP-TAB-SERV/Components/OdlMan.razor.cs @@ -294,8 +294,7 @@ namespace MP_TAB_SERV.Components isProcessing = false; //await InvokeAsync(StateHasChanged); // qui rimando a pag principale... - //NavMan.NavigateTo("/", true); - NavMan.NavigateTo(NavMan.Uri, true); + NavMan.NavigateTo("status-map", true); } /// From 771f9067559aa7571cedac83997498b447680e55 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 10 Nov 2023 16:47:51 +0100 Subject: [PATCH 11/14] Update spec x cancellazioni fluxLog --- MP.Data/Controllers/MpSpecController.cs | 10 ++++------ MP.SPEC/MP.SPEC.csproj | 2 +- MP.SPEC/Pages/FluxLogStatus.razor.cs | 5 +++++ MP.SPEC/Resources/ChangeLog.html | 2 +- MP.SPEC/Resources/VersNum.txt | 2 +- MP.SPEC/Resources/manifest.xml | 2 +- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/MP.Data/Controllers/MpSpecController.cs b/MP.Data/Controllers/MpSpecController.cs index 4f55e404..0b7b7aaa 100644 --- a/MP.Data/Controllers/MpSpecController.cs +++ b/MP.Data/Controllers/MpSpecController.cs @@ -555,7 +555,7 @@ namespace MP.Data.Controllers public async Task> FluxLogDataRedux(string idxMaccSel, List fluxList, Periodo currPeriodo, Enums.ValSelection valMode, Enums.DataInterval intReq, int maxItem) { List procStats = new List(); - Log.Info($"Inizio FluxLogDataRedux | idxMaccSel: {idxMaccSel} | periodo: {currPeriodo.Inizio} --> {currPeriodo.Fine}"); + Log.Info($"Inizio FluxLogDataRedux | idxMaccSel: {idxMaccSel} | periodo: {currPeriodo.Inizio:yyyy-MM-dd} --> {currPeriodo.Fine:yyyy-MM-dd}"); TimeSpan step = TimeSpan.FromHours(1); switch (intReq) { @@ -611,10 +611,7 @@ namespace MP.Data.Controllers numRecProc += numRec; if (numRec > maxItem) { - if (dtCursStart > currPeriodo.Fine) - { - setCompleted = true; - } + List listPeriodi = new List(); switch (valMode) @@ -671,6 +668,7 @@ namespace MP.Data.Controllers // incremento dt fine periodo dtCursStart = dtCursEnd; dtCursEnd = dtCursStart.Add(step); + setCompleted = dtCursStart >= currPeriodo.Fine; } } // fermo cronometro e salvo su DB... @@ -686,7 +684,7 @@ namespace MP.Data.Controllers }; procStats.Add(currStat); } - Log.Info($"FINE FluxLogDataRedux | idxMaccSel: {idxMaccSel} | periodo: {currPeriodo.Inizio} --> {currPeriodo.Fine}"); + Log.Info($"FINE FluxLogDataRedux | idxMaccSel: {idxMaccSel} | periodo: {currPeriodo.Inizio:yyyy-MM-dd} --> {currPeriodo.Fine:yyyy-MM-dd}"); return procStats; } diff --git a/MP.SPEC/MP.SPEC.csproj b/MP.SPEC/MP.SPEC.csproj index af75c182..e5ed1dd8 100644 --- a/MP.SPEC/MP.SPEC.csproj +++ b/MP.SPEC/MP.SPEC.csproj @@ -5,7 +5,7 @@ enable enable MP.SPEC - 6.16.2311.1009 + 6.16.2311.1016 diff --git a/MP.SPEC/Pages/FluxLogStatus.razor.cs b/MP.SPEC/Pages/FluxLogStatus.razor.cs index 54fa4511..dd2233f6 100644 --- a/MP.SPEC/Pages/FluxLogStatus.razor.cs +++ b/MP.SPEC/Pages/FluxLogStatus.razor.cs @@ -85,6 +85,11 @@ namespace MP.SPEC.Pages currVal = (currStep - 1) * stepVal; nextVal = currStep * stepVal; await InvokeAsync(StateHasChanged); + // periodo: fix per imporre fine alla mezzanotte di oggi (= processo tutto ieri) + if (CurrPeriodo.Fine > DateTime.Today) + { + CurrPeriodo.Fine = DateTime.Today; + } // processo i flussi 1:1 x mandare update ad avanzamento await MDataServ.FluxLogDataRedux(idxMaccSel, new List { item }, CurrPeriodo, ValMode, IntReq, NumItem); currStep++; diff --git a/MP.SPEC/Resources/ChangeLog.html b/MP.SPEC/Resources/ChangeLog.html index ced67f1c..8d44feee 100644 --- a/MP.SPEC/Resources/ChangeLog.html +++ b/MP.SPEC/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MAPOSPEC -

                      Versione: 6.16.2311.1009

                      +

                      Versione: 6.16.2311.1016


                      Note di rilascio:
                      • diff --git a/MP.SPEC/Resources/VersNum.txt b/MP.SPEC/Resources/VersNum.txt index cf39a0ed..e1f886bd 100644 --- a/MP.SPEC/Resources/VersNum.txt +++ b/MP.SPEC/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2311.1009 +6.16.2311.1016 diff --git a/MP.SPEC/Resources/manifest.xml b/MP.SPEC/Resources/manifest.xml index 36ce1d4c..a93e69cf 100644 --- a/MP.SPEC/Resources/manifest.xml +++ b/MP.SPEC/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2311.1009 + 6.16.2311.1016 https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/MP.SPEC.zip https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/ChangeLog.html false From a05b275fe97b06d618b320f333f6106ef24bb4e0 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 10 Nov 2023 16:47:59 +0100 Subject: [PATCH 12/14] update test ODL x TAB3 --- MP-TAB-SERV/Components/OdlMan.razor | 31 ++- MP-TAB-SERV/Components/OdlMan.razor.cs | 357 +++++++++++++++++++------ MP-TAB-SERV/MP-TAB-SERV.csproj | 2 +- MP-TAB-SERV/Resources/ChangeLog.html | 2 +- MP-TAB-SERV/Resources/VersNum.txt | 2 +- MP-TAB-SERV/Resources/manifest.xml | 2 +- MP.Data/Controllers/MpTabController.cs | 88 ++++++ MP.Data/Services/TabDataService.cs | 104 ++++++- 8 files changed, 490 insertions(+), 98 deletions(-) diff --git a/MP-TAB-SERV/Components/OdlMan.razor b/MP-TAB-SERV/Components/OdlMan.razor index 4e8f6fae..355f0de0 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor +++ b/MP-TAB-SERV/Components/OdlMan.razor @@ -38,9 +38,25 @@ } else { -
                        - Slave machine man -
                        + @if (showSplitOdlOnTavVal || showReopOdlTav) + { +
                        +
                        +
                        + @if (showSplitOdlOnTavVal) + { + + } +
                        +
                        + @if (showReopOdlTav) + { + + } +
                        +
                        +
                        + }
                        Check articolo in revisione
                        @@ -243,9 +259,12 @@
        } } -
        - -
        + @if (!inAttr && enableFixSetup) + { +
        + +
        + }
        diff --git a/MP-TAB-SERV/Components/OdlMan.razor.cs b/MP-TAB-SERV/Components/OdlMan.razor.cs index 7392b525..62ccc4c5 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor.cs +++ b/MP-TAB-SERV/Components/OdlMan.razor.cs @@ -5,7 +5,6 @@ using MP.Data.DatabaseModels; using MP.Data.Objects; using MP.Data.Services; using NLog; -using System; using System.Text; using static MP.Data.Objects.Enums; @@ -102,7 +101,7 @@ namespace MP_TAB_SERV.Components ///
      protected bool odlOk { - get => (RecMSE != null && RecMSE.IdxOdl > 0); + get => IdxOdl > 0; } protected bool ShowAll @@ -189,6 +188,70 @@ namespace MP_TAB_SERV.Components return answ; } + /// + /// Effettua ripresa ODL su tavola + /// + /// + /// + protected async Task OdlReopenTav() + { + MaxVal = 3; + int currStep = 0; + await advStep(currStep); + isProcessing = true; + // chiamo stored x riprendere ODL (toglie data chiusura...) + var rowRes = TabDServ.OdlReopenOdlMacc(IdxMaccSel); + if (rowRes != null && rowRes.IdxOdl > 0) + { + // messaggio utente + string evText = "Registrato riapertura ODL {0} | art {1}"; + StringBuilder sb = new StringBuilder(); + sb.AppendLine(String.Format(evText, rowRes.IdxOdl, rowRes.CodArticolo)); + lblOut = sb.ToString(); + } + await advStep(currStep++); + // update button x setup da altra tavola... + checkAll(); + // faccio refresh e riporto + await RefreshData(); + await CheckAttr(); + await advStep(currStep++); + // chiudo update... + isProcessing = false; + } + + /// + /// Effettua split ODL da ALTRA tavola su tav corrente + /// + /// + /// + protected async Task OdlSetSameAsOtherTav() + { + MaxVal = 3; + int currStep = 0; + await advStep(currStep); + isProcessing = true; + // se ho ODL su altra macchina... + if (IdxOdlAltra > 0) + { + await TabDServ.OdlDividiDaAltraTavola(IdxOdlAltra, MatrOpr, IdxMaccSel); + // messaggio utente + string evText = "Registrata inizio attrezzaggio da split ODL {0} (come da altra tavola)"; + StringBuilder sb = new StringBuilder(); + sb.AppendLine(String.Format(evText, IdxOdlAltra)); + lblOut = sb.ToString(); + } + await advStep(currStep++); + // update button x setup da altra tavola... + checkAll(); + // faccio refresh e riporto + await RefreshData(); + await CheckAttr(); + await advStep(currStep++); + // chiudo update... + isProcessing = false; + } + /// /// Registrazione Fine Setup / Inizio Produzione /// @@ -280,8 +343,7 @@ namespace MP_TAB_SERV.Components lblOut = sb.ToString().Replace("---", "
      "); // update buttons... checkAll(); - // imposto odl... - idxOdl = idxODLStart; + // reset vari IdxPOdlSel = 0; inAttr = false; IdxPOdlSel = 0; @@ -485,7 +547,7 @@ namespace MP_TAB_SERV.Components checkBtnStatus(); fixSplitBtn(false); // faccio refresh e riporto - idxOdl = idxODL_curr; + await TabDServ.FlushCache("ODL"); IdxPOdlSel = 0; RecMSE = null; await RefreshData(); @@ -505,6 +567,10 @@ namespace MP_TAB_SERV.Components modoConfProd = SMServ.GetConfInt("modoConfProd"); enableRPO = SMServ.GetConfBool("enableRPO"); enableSchedaTecnica = SMServ.GetConfBool("enableSchedaTecnica"); + enableFixSetup = SMServ.GetConfBool("OptEnableFixSetup"); + showSplitOdlOnTav = SMServ.GetConfBool("showSplitOdlOnTav"); + showReopenOdlTav = SMServ.GetConfBool("showReopenOdlTav"); + gPeriodReopenOdlTav = SMServ.GetConfInt("gPeriodReopenOdlTav"); string rawEmailDest = SMServ.GetConf("_adminEmail"); emailAdmDest = rawEmailDest.Split(',').ToList(); if (RecMSE != null) @@ -663,6 +729,32 @@ namespace MP_TAB_SERV.Components tcRichAttr = newTCRich; } + protected async Task SendFixEndSetup() + { + if (!await JSRuntime.InvokeAsync("confirm", $"Confermi invio FIX chiusura atrtezzaggio ad impianto?")) + return; + + string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now); + string outData = $"TS:{ts}|MATR:{MatrOpr}|ODL:{IdxOdl}"; + TabDServ.addTask4Machine(IdxMaccSel, taskType.fixStopSetup, outData); + outData = "Inserita richiesta invio Fix chiusura attrezzaggio " + outData; + lblOut = outData; + // se è master --> chiamo update child! + if (isMaster) + { + // invio eventi ad IOB slave... + var slaveList = SMServ.ListM2S + .Where(x => x.IdxMacchina.Equals(IdxMaccSel, StringComparison.InvariantCultureIgnoreCase)) + .ToList(); + foreach (var machine in slaveList) + { + // invio chiusura attrezzaggio + outData = $"TS:{ts}|MATR:{MatrOpr}|ODL:{IdxOdl}|master machine:{IdxMaccSel}"; + TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.fixStopSetup, outData); + } + } + } + protected async Task SendWarnTcChangeReq(int idxOdl, decimal tcAss, decimal tcRich) { // carico altri parametri email... @@ -713,76 +805,11 @@ namespace MP_TAB_SERV.Components } } - private string txtForceCloseOdl - { - get => forceCloseOdl ? Traduci("ForceCloseODL") : Traduci("SplitCurrODL"); - } - - private async Task ReloadXDL(bool reloadFromOdl) - { - int currIdxPOdl = IdxPOdlSel; - if (RecMSE != null) - { - if (reloadFromOdl) - { - currIdxPOdl = RecMSE.IdxPOdl ?? 0; - } - // se ho PODL valido... - if (currIdxPOdl > 0) - { - currPodl = await TabDServ.PODLExp_getByKey(currIdxPOdl); - } - else - { - currPodl = new PODLExpModel() - { - IdxOdl = RecMSE.IdxOdl ?? 0, - KeyRichiesta = "-", - CodArticolo = RecMSE.CodArticolo, - DescArticolo = RecMSE.CodArticolo, - NumPezzi = RecMSE.NumPezzi, - Tcassegnato = RecMSE.TCAssegnato - }; - } - } - // update a runtime dati ODL se assegnato - if (currPodl.IdxOdl > 0) - { - currOdl = await TabDServ.OdlByIdx(currPodl.IdxOdl, false); - } - } - protected string Traduci(string lemma) { return SMServ.Traduci($"{baseLang}_{lemma}".ToUpper()); } - protected async Task SendFixEndSetup() - { - if (!await JSRuntime.InvokeAsync("confirm", $"Confermi invio FIX chiusura atrtezzaggio ad impianto?")) - return; - - string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now); - string outData = $"TS:{ts}|MATR:{MatrOpr}|ODL:{IdxOdl}"; - TabDServ.addTask4Machine(IdxMaccSel, taskType.fixStopSetup, outData); - outData = "Inserita richiesta invio Fix chiusura attrezzaggio " + outData; - lblOut = outData; - // se è master --> chiamo update child! - if (isMaster) - { - // invio eventi ad IOB slave... - var slaveList = SMServ.ListM2S - .Where(x => x.IdxMacchina.Equals(IdxMaccSel, StringComparison.InvariantCultureIgnoreCase)) - .ToList(); - foreach (var machine in slaveList) - { - // invio chiusura attrezzaggio - outData = $"TS:{ts}|MATR:{MatrOpr}|ODL:{idxOdl}|master machine:{IdxMaccSel}"; - TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.fixStopSetup, outData); - } - } - } - #endregion Protected Methods #region Private Fields @@ -797,6 +824,8 @@ namespace MP_TAB_SERV.Components private List emailAdmDest = new List(); + private bool enableFixSetup = false; + private bool enableRPO = true; private bool enableSchedaTecnica = false; @@ -807,9 +836,9 @@ namespace MP_TAB_SERV.Components private bool forceCloseOdl = true; - private string IdxMaccSel = ""; + private int gPeriodReopenOdlTav = 1; - private int idxOdl = 0; + private string IdxMaccSel = ""; private int idxPOdlSel = 0; @@ -845,6 +874,10 @@ namespace MP_TAB_SERV.Components private bool showOdlDetail = false; + private bool showReopenOdlTav = false; + + private bool showSplitOdlOnTav = false; + private decimal tcRichAttr = 1; #endregion Private Fields @@ -859,19 +892,67 @@ namespace MP_TAB_SERV.Components set { MServ.UserPrefGet("Lang"); } } - private PODLExpModel currPodl { get; set; } = new PODLExpModel(); + private string cssDetailOdl + { + get => IdxPOdlSel > 0 ? "bg-primary text-light" : "bg-warning"; + } + private ODLExpModel currOdl { get; set; } = new ODLExpModel(); + private PODLExpModel currPodl { get; set; } = new PODLExpModel(); + + /// + /// Verifica se l'ALTRA macchina NON abbia ODL valido (== 0) + /// + private bool emptyOdlAltraMacc + { + get => IdxOdlAltra == 0; + } + + /// + /// Verifica se la macchina NON abbia ODL valido (== 0) + /// + private bool emptyOdlMacc + { + get => IdxOdl == 0; + } + + private bool endProdDisabled + { + get => !odlOk || needConfProd; + } + /// /// Variabile idxMacc parent x selezione ODL /// private string IdxMaccParent { get; set; } = ""; + /// + /// Valore calcolato key ODL corrente... + /// private int IdxOdl { get => RecMSE != null ? RecMSE.IdxOdl ?? 0 : 0; } + /// + /// Valore calcolato key ODL altra tavola attivo... + /// + private int IdxOdlAltra + { + get + { + int answ = 0; + var pUpd = Task.Run(async () => + { + var tabOdlAltra = await TabDServ.OdlCurrByMacc(idxMaccAltraTav, false); + answ = tabOdlAltra.IdxOdl; + }); + pUpd.Wait(); + return answ; + } + } + private string lblWarnBody { get => odlOk ? Traduci("ConfProdBeforeContinueBody") : Traduci("setOdlBeforeContinueBody"); @@ -882,7 +963,6 @@ namespace MP_TAB_SERV.Components get => odlOk ? Traduci("ConfProdBeforeContinueHead") : Traduci("setOdlBeforeContinueHead"); } - private int MatrOpr { get => MServ.MatrOpr; @@ -901,11 +981,6 @@ namespace MP_TAB_SERV.Components } } - private bool endProdDisabled - { - get => !odlOk || needConfProd; - } - private int numPz2Conf { get @@ -923,18 +998,100 @@ namespace MP_TAB_SERV.Components } } - private string txtBtnOdlDetail + /// + /// Verifica visibilità btn riprendi ODL su 2° tavola SE: + /// - sia un impianto MULTI (= con + tavole) + /// - sia disattrezzata la tavola + /// - in tab congif: se sia abilitato la ripresa ODL sulla seconda tavola + /// - in tab config: sia il grace period + /// - NON SIANO passati i minuti indicati dalla chiusura + /// + private bool showReopOdlTav { - get => showOdlDetail ? "Nascondi Dettaglio ODL" : "MOSTRA Dettaglio ODL Corrente"; + get + { + bool answ = false; + // se è multi controllo + if (isMulti) + { + // verifico se NON HA ODL... + if (emptyOdlMacc) + { + // verifico SE siamo nel gracePeriod... chiuso da meno di 1h + DateTime adesso = DateTime.Now; + DateTime dtChiusura = DateTime.Now.AddHours(-1); + try + { + var lastOdl = TabDServ.OdlLastByMacc(IdxMaccSel, true); + if (lastOdl != null) + { + dtChiusura = lastOdl.DataFine ?? DateTime.Now.AddHours(-1); + } + } + catch + { } + + // ora verifico SE E SOLO SE è ANCORA in attrezzaggio + if (inAttr) + { + // ora verifico SE ALTRA TAVOLA ha ODL... + if (dtChiusura.AddMinutes(gPeriodReopenOdlTav) > adesso) + { + answ = showReopenOdlTav; + } + } + } + } + return answ; + } } + + /// + /// Verifica visibilità btn split ODL su 2° tavola SE: + /// - sia un impianto MULTI (= con + tavole) + /// - sia già attrezzata la prima tavola + /// - in tab Congif: se sia abilitato lo split ODL sulla seconda tavola + /// - la macchina SIA ANCORA in attrezzaggio (2019.07.08) = 2 + /// + private bool showSplitOdlOnTavVal + { + get + { + bool answ = false; + // se è multi controllo + if (isMulti) + { + // verifico se NON HA ODL ma ce l'ha altra tavola... + if (emptyOdlMacc) + { + // ora verifico SE ALTRA TAVOLA ha ODL... + if (!emptyOdlAltraMacc) + { + // ora verifico SE E SOLO SE è ANCORA in attrezzaggio + if (inAttr) + { + answ = showSplitOdlOnTav; + } + } + } + } + return answ; + } + } + private string titleOdlDetail { get => IdxPOdlSel > 0 ? "Verifica parametri attrezzaggio NUOVO PODL" : inAttr ? "Parametri PODL in Attrezzaggio" : "Parametri ODL Corrente"; } - private string cssDetailOdl + private string txtBtnOdlDetail { - get => IdxPOdlSel > 0 ? "bg-primary text-light" : "bg-warning"; + get => showOdlDetail ? "Nascondi Dettaglio ODL" : "MOSTRA Dettaglio ODL Corrente"; + } + + private string txtForceCloseOdl + { + get => forceCloseOdl ? Traduci("ForceCloseODL") : Traduci("SplitCurrODL"); } #endregion Private Properties @@ -1284,6 +1441,40 @@ namespace MP_TAB_SERV.Components } } + private async Task ReloadXDL(bool reloadFromOdl) + { + int currIdxPOdl = IdxPOdlSel; + if (RecMSE != null) + { + if (reloadFromOdl) + { + currIdxPOdl = RecMSE.IdxPOdl ?? 0; + } + // se ho PODL valido... + if (currIdxPOdl > 0) + { + currPodl = await TabDServ.PODLExp_getByKey(currIdxPOdl); + } + else + { + currPodl = new PODLExpModel() + { + IdxOdl = RecMSE.IdxOdl ?? 0, + KeyRichiesta = "-", + CodArticolo = RecMSE.CodArticolo, + DescArticolo = RecMSE.CodArticolo, + NumPezzi = RecMSE.NumPezzi, + Tcassegnato = RecMSE.TCAssegnato + }; + } + } + // update a runtime dati ODL se assegnato + if (currPodl.IdxOdl > 0) + { + currOdl = await TabDServ.OdlByIdx(currPodl.IdxOdl, false); + } + } + #endregion Private Methods } } \ No newline at end of file diff --git a/MP-TAB-SERV/MP-TAB-SERV.csproj b/MP-TAB-SERV/MP-TAB-SERV.csproj index 2a4052df..c93c3d22 100644 --- a/MP-TAB-SERV/MP-TAB-SERV.csproj +++ b/MP-TAB-SERV/MP-TAB-SERV.csproj @@ -3,7 +3,7 @@ net6.0 enable - 6.16.2311.919 + 6.16.2311.1016 enable MP_TAB_SERV diff --git a/MP-TAB-SERV/Resources/ChangeLog.html b/MP-TAB-SERV/Resources/ChangeLog.html index cc1f4884..8d44feee 100644 --- a/MP-TAB-SERV/Resources/ChangeLog.html +++ b/MP-TAB-SERV/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MAPOSPEC -

      Versione: 6.16.2311.919

      +

      Versione: 6.16.2311.1016


      Note di rilascio:
      • diff --git a/MP-TAB-SERV/Resources/VersNum.txt b/MP-TAB-SERV/Resources/VersNum.txt index 07056f18..e1f886bd 100644 --- a/MP-TAB-SERV/Resources/VersNum.txt +++ b/MP-TAB-SERV/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2311.919 +6.16.2311.1016 diff --git a/MP-TAB-SERV/Resources/manifest.xml b/MP-TAB-SERV/Resources/manifest.xml index ab8d78fe..e8dda042 100644 --- a/MP-TAB-SERV/Resources/manifest.xml +++ b/MP-TAB-SERV/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2311.919 + 6.16.2311.1016 https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/MP-TAB-SERV.zip https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/ChangeLog.html false diff --git a/MP.Data/Controllers/MpTabController.cs b/MP.Data/Controllers/MpTabController.cs index a3190441..ef4d23f9 100644 --- a/MP.Data/Controllers/MpTabController.cs +++ b/MP.Data/Controllers/MpTabController.cs @@ -848,6 +848,37 @@ namespace MP.Data.Controllers } return fatto; } + /// + /// Attrezzo stesso ODL dell'altra tavola + /// + /// + /// + /// + /// + public bool OdlDividiDaAltraTavola(int idxODL, int matrOpr, string idxMacchinaTo) + { + bool fatto = false; + using (var dbCtx = new MoonProContext(_configuration)) + { + try + { + var IdxODL = new SqlParameter("@idxODL", idxODL); + var MatrOpr = new SqlParameter("@MatrOpr", matrOpr); + var IdxMaccTo = new SqlParameter("@IdxMacchinaTo", idxMacchinaTo); + var result = dbCtx + .Database + .ExecuteSqlRaw("EXEC stp_ODL_dividiDaAltraTav @idxODL, @MatrOpr, @IdxMacchinaTo", IdxODL, MatrOpr, IdxMaccTo); + fatto = result != 0; + } + catch (Exception exc) + { + Log.Error($"Eccezione durante OdlDividiDaAltraTavola{Environment.NewLine}{exc}"); + } + } + return fatto; + } + + /// /// Fix ODL per macchine SLAVE @@ -946,6 +977,63 @@ namespace MP.Data.Controllers return dbResult; } + /// + /// Ultimo ODL data macchina + /// + /// + /// + public List OdlLastByMacc(string idxMacchina) + { + List dbResult = new List(); + using (var dbCtx = new MoonProContext(_configuration)) + { + try + { + var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); + dbResult = dbCtx + .DbSetODL + .FromSqlRaw("EXEC stp_ODL_getLastByMacchina @IdxMacchina", IdxMacchina) + .AsNoTracking() + .ToList(); + } + catch (Exception exc) + { + Log.Error($"Eccezione durante OdlLastByMacc{Environment.NewLine}{exc}"); + } + } + return dbResult; + } + + + /// + /// Riapertura ULTIMO ODL data macchina + /// + /// + /// + public List OdlReopenOdlMacc(string idxMacchina) + { + List dbResult = new List(); + using (var dbCtx = new MoonProContext(_configuration)) + { + try + { + var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); + dbResult = dbCtx + .DbSetODL + .FromSqlRaw("EXEC stp_ODL_reopenOdlMacc @IdxMacchina", IdxMacchina) + .AsNoTracking() + .ToList(); + } + catch (Exception exc) + { + Log.Error($"Eccezione durante OdlReopenOdlMacc{Environment.NewLine}{exc}"); + } + } + return dbResult; + } + + + /// /// Setup ODL Postumo /// diff --git a/MP.Data/Services/TabDataService.cs b/MP.Data/Services/TabDataService.cs index 191de962..d73c08cc 100644 --- a/MP.Data/Services/TabDataService.cs +++ b/MP.Data/Services/TabDataService.cs @@ -10,6 +10,7 @@ using System; using System.Collections.Generic; using System.Data; using System.Diagnostics; +using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -1154,14 +1155,41 @@ namespace MP.Data.Services return answ; } + /// - /// Fix ODL per macchine SLAVE + /// Attrezzo stesso ODL dell'altra tavola /// - /// - /// - /// + /// + /// + /// /// - public async Task OdlFixMachineSlave(string idxMacchina, int numDayPrev, int doInsert) + public async Task OdlDividiDaAltraTavola(int idxODL, int matrOpr, string idxMacchinaTo) + { + bool answ = false; + try + { + // inserisco evento + answ = dbTabController.OdlDividiDaAltraTavola(idxODL, matrOpr, idxMacchinaTo); + await FlushCache("ODL"); + await FlushCache("PODL"); + await FlushCache("VSODL"); + } + catch (Exception exc) + { + string logMsg = $"Eccezione in OdlDividiDaAltraTavola | idxODL: {idxODL} | matrOpr: {matrOpr} | idxMacchinaTo: {idxMacchinaTo}{Environment.NewLine}{exc}"; + Log.Error(logMsg); + } + return answ; + } + + /// + /// Fix ODL per macchine SLAVE + /// + /// + /// + /// + /// + public async Task OdlFixMachineSlave(string idxMacchina, int numDayPrev, int doInsert) { bool answ = false; try @@ -1209,6 +1237,72 @@ namespace MP.Data.Services return answ; } + /// + /// Ultimo ODL data macchina + /// + /// + /// + /// + public ODLModel OdlLastByMacc(string idxMacchina, bool forceDb) + { + string source = "DB"; + Stopwatch sw = new Stopwatch(); + sw.Start(); + ODLModel result = new ODLModel(); + // cerco in redis... + string currKey = $"{redisBaseKey}:ODL:{idxMacchina}:LAST"; + RedisValue rawData = redisDb.StringGet(currKey); + if (rawData.HasValue && !forceDb) + { + result = JsonConvert.DeserializeObject($"{rawData}"); + source = "REDIS"; + } + else + { + var results = dbTabController.OdlLastByMacc(idxMacchina); + // riordino + result = results.FirstOrDefault(); + // serializzp e salvo... + rawData = JsonConvert.SerializeObject(result); + redisDb.StringSet(currKey, rawData, UltraLongCache); + } + if (result == null) + { + result = new ODLModel(); + } + sw.Stop(); + Log.Debug($"OdlLastByMacc | {source} | {sw.Elapsed.TotalMilliseconds}ms"); + return result; + } + + /// + /// Riapertura ULTIMO ODL data macchina + /// + /// + /// + public ODLModel OdlReopenOdlMacc(string idxMacchina) + { + string source = "DB"; + Stopwatch sw = new Stopwatch(); + sw.Start(); + ODLModel result = new ODLModel(); + // cerco in redis... + string currKey = $"{redisBaseKey}:ODL:{idxMacchina}:LAST"; + var results = dbTabController.OdlReopenOdlMacc(idxMacchina); + // riordino + result = results.FirstOrDefault(); + // serializzp e salvo... + var rawData = JsonConvert.SerializeObject(result); + redisDb.StringSet(currKey, rawData, UltraLongCache); + if (result == null) + { + result = new ODLModel(); + } + sw.Stop(); + Log.Debug($"OdlReopenOdlMacc | {source} | {sw.Elapsed.TotalMilliseconds}ms"); + return result; + } + /// /// Elenco ODL data macchina e periodo /// From f74e3980eb1b28080b732accfb33b941b4bda831 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 10 Nov 2023 17:30:19 +0100 Subject: [PATCH 13/14] Inizio test modifica sel macchine 2 tav --- MP-TAB-SERV/Components/MachineBlock.razor.cs | 24 ++-- MP-TAB-SERV/Components/OdlMan.razor.cs | 4 + MP-TAB-SERV/MP-TAB-SERV.csproj | 2 +- MP-TAB-SERV/Pages/ODL.razor | 2 +- MP-TAB-SERV/Pages/ODL.razor.cs | 47 ++++--- MP-TAB-SERV/Resources/ChangeLog.html | 2 +- MP-TAB-SERV/Resources/VersNum.txt | 2 +- MP-TAB-SERV/Resources/manifest.xml | 2 +- MP.Data/Constants.cs | 1 + MP.Data/Controllers/MpTabController.cs | 141 +++++++++++-------- MP.Data/Services/TabDataService.cs | 59 ++++++-- 11 files changed, 188 insertions(+), 98 deletions(-) diff --git a/MP-TAB-SERV/Components/MachineBlock.razor.cs b/MP-TAB-SERV/Components/MachineBlock.razor.cs index 08617025..a9723242 100644 --- a/MP-TAB-SERV/Components/MachineBlock.razor.cs +++ b/MP-TAB-SERV/Components/MachineBlock.razor.cs @@ -4,7 +4,6 @@ using Microsoft.JSInterop; using MP.Data.DatabaseModels; using MP.Data.Services; using NLog; -using static Org.BouncyCastle.Math.EC.ECCurve; namespace MP_TAB_SERV.Components { @@ -17,6 +16,11 @@ namespace MP_TAB_SERV.Components [Parameter] public bool FullMode { get; set; } = true; + [Parameter] + public int Height { get; set; } = 0; + + [Parameter] + public string IdxMacchSub { get; set; } = ""; [Parameter] public int keepAliveMin { get; set; } = 5; @@ -30,9 +34,6 @@ namespace MP_TAB_SERV.Components [Parameter] public int Width { get; set; } = 0; - [Parameter] - public int Height { get; set; } = 0; - #endregion Public Properties #region Public Methods @@ -96,6 +97,9 @@ namespace MP_TAB_SERV.Components #region Protected Properties + [Inject] + protected IConfiguration config { get; set; } = null!; + protected ProdAdvDispl.ProdCounter CurrCount { get @@ -123,14 +127,13 @@ namespace MP_TAB_SERV.Components [Inject] protected NavigationManager NavMan { get; set; } = null!; + [Inject] + protected TabDataService TabDServ { get; set; } = null!; + #endregion Protected Properties #region Protected Methods - - [Inject] - protected IConfiguration config { get; set; } = null!; - protected override async Task OnAfterRenderAsync(bool firstRender) {//await Task.Delay(500); if (firstRender) @@ -161,6 +164,11 @@ namespace MP_TAB_SERV.Components protected override void OnParametersSet() { isLoading = RecMSE == null; + //// controllo SE avessi idxMacchSub --> rileggo! + //if (!string.IsNullOrEmpty(IdxMacchSub) && RecMSE != null) + //{ + // RecMSE = TabDServ.MseGetSub(RecMSE.IdxMacchina, IdxMacchSub, true); + //} setGaugeVals(); } diff --git a/MP-TAB-SERV/Components/OdlMan.razor.cs b/MP-TAB-SERV/Components/OdlMan.razor.cs index 62ccc4c5..20cff024 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor.cs +++ b/MP-TAB-SERV/Components/OdlMan.razor.cs @@ -755,6 +755,9 @@ namespace MP_TAB_SERV.Components } } + [Parameter] + public EventCallback E_MachSel { get; set; } + protected async Task SendWarnTcChangeReq(int idxOdl, decimal tcAss, decimal tcRich) { // carico altri parametri email... @@ -792,6 +795,7 @@ namespace MP_TAB_SERV.Components IdxMaccSel = selIdxMacc; await DoUpdate(); isProcessing = false; + await E_MachSel.InvokeAsync(selIdxMacc); await Task.Delay(10); } diff --git a/MP-TAB-SERV/MP-TAB-SERV.csproj b/MP-TAB-SERV/MP-TAB-SERV.csproj index c93c3d22..a7bdcc19 100644 --- a/MP-TAB-SERV/MP-TAB-SERV.csproj +++ b/MP-TAB-SERV/MP-TAB-SERV.csproj @@ -3,7 +3,7 @@ net6.0 enable - 6.16.2311.1016 + 6.16.2311.1017 enable MP_TAB_SERV diff --git a/MP-TAB-SERV/Pages/ODL.razor b/MP-TAB-SERV/Pages/ODL.razor index 8fdeb1fa..8f141d37 100644 --- a/MP-TAB-SERV/Pages/ODL.razor +++ b/MP-TAB-SERV/Pages/ODL.razor @@ -8,5 +8,5 @@ else { - + } diff --git a/MP-TAB-SERV/Pages/ODL.razor.cs b/MP-TAB-SERV/Pages/ODL.razor.cs index 6e382c7d..016371db 100644 --- a/MP-TAB-SERV/Pages/ODL.razor.cs +++ b/MP-TAB-SERV/Pages/ODL.razor.cs @@ -23,25 +23,6 @@ namespace MP_TAB_SERV.Pages await ReloadData(); } - #endregion Protected Methods - - #region Private Methods - - private async Task ReloadData() - { - if (string.IsNullOrEmpty(IdxMacc)) - { - IdxMacc = await MsgServ.IdxMaccGet(); - // recupero MSE macchina.... - if (!string.IsNullOrEmpty(IdxMacc)) - { - CurrMSE = await MsgServ.GetMachineMse(IdxMacc); - } - } - } - - - protected async Task RefreshData(List newList) { var ListMSE = newList; @@ -69,6 +50,34 @@ namespace MP_TAB_SERV.Pages } } + protected async Task SetMacc(string selIdxMacc) + { + CurrMSE = null; + await Task.Delay(1); + IdxMacc = selIdxMacc; + await MsgServ.IdxMaccSet(selIdxMacc); + // recupero MSE macchina.... + CurrMSE = await MsgServ.GetMachineMse(IdxMacc); + await InvokeAsync(StateHasChanged); + } + + #endregion Protected Methods + + #region Private Methods + + private async Task ReloadData() + { + if (string.IsNullOrEmpty(IdxMacc)) + { + IdxMacc = await MsgServ.IdxMaccGet(); + // recupero MSE macchina.... + if (!string.IsNullOrEmpty(IdxMacc)) + { + CurrMSE = await MsgServ.GetMachineMse(IdxMacc); + } + } + } + #endregion Private Methods } } \ No newline at end of file diff --git a/MP-TAB-SERV/Resources/ChangeLog.html b/MP-TAB-SERV/Resources/ChangeLog.html index 8d44feee..dcb3afed 100644 --- a/MP-TAB-SERV/Resources/ChangeLog.html +++ b/MP-TAB-SERV/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MAPOSPEC -

        Versione: 6.16.2311.1016

        +

        Versione: 6.16.2311.1017


        Note di rilascio:
        • diff --git a/MP-TAB-SERV/Resources/VersNum.txt b/MP-TAB-SERV/Resources/VersNum.txt index e1f886bd..8b8eb08c 100644 --- a/MP-TAB-SERV/Resources/VersNum.txt +++ b/MP-TAB-SERV/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2311.1016 +6.16.2311.1017 diff --git a/MP-TAB-SERV/Resources/manifest.xml b/MP-TAB-SERV/Resources/manifest.xml index e8dda042..998f69ad 100644 --- a/MP-TAB-SERV/Resources/manifest.xml +++ b/MP-TAB-SERV/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2311.1016 + 6.16.2311.1017 https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/MP-TAB-SERV.zip https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/ChangeLog.html false diff --git a/MP.Data/Constants.cs b/MP.Data/Constants.cs index 9f43bd5b..ea73a57c 100644 --- a/MP.Data/Constants.cs +++ b/MP.Data/Constants.cs @@ -20,6 +20,7 @@ public static string redisMseKey = "MP:MON:Cache:MSE"; + public static string redisMseKeySingle = "MP:MON:Cache:MseSingle"; #endregion Public Fields } diff --git a/MP.Data/Controllers/MpTabController.cs b/MP.Data/Controllers/MpTabController.cs index ef4d23f9..6224c7ac 100644 --- a/MP.Data/Controllers/MpTabController.cs +++ b/MP.Data/Controllers/MpTabController.cs @@ -765,6 +765,35 @@ namespace MP.Data.Controllers return fatto; } + /// + /// Dati MSE x singola macchina SUB (tipicamente TAV) + /// + /// + /// + /// + public List MseGetSub(string idxMacc, string idxMacchSub) + { + List dbResult = new List(); + using (var dbCtx = new MoonProContext(_configuration)) + { + try + { + var IdxMacc = new SqlParameter("@IdxMacchina", idxMacc); + var IdxMacchSub = new SqlParameter("@IdxMacchSub", idxMacchSub); + dbResult = dbCtx + .DbSetMSE + .FromSqlRaw("EXEC stp_ODL_fineProd @IdxMacchina, @IdxMacchSub", IdxMacc, IdxMacchSub) + .AsNoTracking() + .ToList(); + } + catch (Exception exc) + { + Log.Error($"Eccezione durante MseGetSub{Environment.NewLine}{exc}"); + } + } + return dbResult; + } + /// /// ODL da key /// @@ -821,33 +850,6 @@ namespace MP.Data.Controllers return dbResult; } - /// - /// Registro fine prod ODL - /// - /// - /// - /// - public bool OdlFineProd(int idxODL, string idxMacchina) - { - bool fatto = false; - using (var dbCtx = new MoonProContext(_configuration)) - { - try - { - var IdxODL = new SqlParameter("@IdxODL", idxODL); - var IdxMacc = new SqlParameter("@IdxMacchina", idxMacchina); - var result = dbCtx - .Database - .ExecuteSqlRaw("EXEC stp_ODL_fineProd @IdxODL, @IdxMacchina", IdxODL, IdxMacc); - fatto = result != 0; - } - catch (Exception exc) - { - Log.Error($"Eccezione durante OdlFineProd{Environment.NewLine}{exc}"); - } - } - return fatto; - } /// /// Attrezzo stesso ODL dell'altra tavola /// @@ -878,7 +880,33 @@ namespace MP.Data.Controllers return fatto; } - + /// + /// Registro fine prod ODL + /// + /// + /// + /// + public bool OdlFineProd(int idxODL, string idxMacchina) + { + bool fatto = false; + using (var dbCtx = new MoonProContext(_configuration)) + { + try + { + var IdxODL = new SqlParameter("@IdxODL", idxODL); + var IdxMacc = new SqlParameter("@IdxMacchina", idxMacchina); + var result = dbCtx + .Database + .ExecuteSqlRaw("EXEC stp_ODL_fineProd @IdxODL, @IdxMacchina", IdxODL, IdxMacc); + fatto = result != 0; + } + catch (Exception exc) + { + Log.Error($"Eccezione durante OdlFineProd{Environment.NewLine}{exc}"); + } + } + return fatto; + } /// /// Fix ODL per macchine SLAVE @@ -946,6 +974,33 @@ namespace MP.Data.Controllers return fatto; } + /// + /// Ultimo ODL data macchina + /// + /// + /// + public List OdlLastByMacc(string idxMacchina) + { + List dbResult = new List(); + using (var dbCtx = new MoonProContext(_configuration)) + { + try + { + var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); + dbResult = dbCtx + .DbSetODL + .FromSqlRaw("EXEC stp_ODL_getLastByMacchina @IdxMacchina", IdxMacchina) + .AsNoTracking() + .ToList(); + } + catch (Exception exc) + { + Log.Error($"Eccezione durante OdlLastByMacc{Environment.NewLine}{exc}"); + } + } + return dbResult; + } + /// /// Elenco ODL data macchina e periodo /// @@ -977,34 +1032,6 @@ namespace MP.Data.Controllers return dbResult; } - /// - /// Ultimo ODL data macchina - /// - /// - /// - public List OdlLastByMacc(string idxMacchina) - { - List dbResult = new List(); - using (var dbCtx = new MoonProContext(_configuration)) - { - try - { - var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); - dbResult = dbCtx - .DbSetODL - .FromSqlRaw("EXEC stp_ODL_getLastByMacchina @IdxMacchina", IdxMacchina) - .AsNoTracking() - .ToList(); - } - catch (Exception exc) - { - Log.Error($"Eccezione durante OdlLastByMacc{Environment.NewLine}{exc}"); - } - } - return dbResult; - } - - /// /// Riapertura ULTIMO ODL data macchina /// @@ -1032,8 +1059,6 @@ namespace MP.Data.Controllers return dbResult; } - - /// /// Setup ODL Postumo /// diff --git a/MP.Data/Services/TabDataService.cs b/MP.Data/Services/TabDataService.cs index d73c08cc..fa9b90de 100644 --- a/MP.Data/Services/TabDataService.cs +++ b/MP.Data/Services/TabDataService.cs @@ -1182,14 +1182,14 @@ namespace MP.Data.Services return answ; } - /// - /// Fix ODL per macchine SLAVE - /// - /// - /// - /// - /// - public async Task OdlFixMachineSlave(string idxMacchina, int numDayPrev, int doInsert) + /// + /// Fix ODL per macchine SLAVE + /// + /// + /// + /// + /// + public async Task OdlFixMachineSlave(string idxMacchina, int numDayPrev, int doInsert) { bool answ = false; try @@ -1994,6 +1994,49 @@ namespace MP.Data.Services await FlushCache(Constants.redisMseKey); return answ; } + /// + /// Recupera un valore MSE x una macchina sub specifica + /// + /// + /// + /// + /// + public MappaStatoExpl MseGetSub(string idxMacc, string idxMacchSub, bool forceDb) + { + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); + MappaStatoExpl result = new MappaStatoExpl(); + // cerco in redis... + string currKey = $"{Constants.redisMseKeySingle}:{idxMacchSub}"; + RedisValue rawData = redisDb.StringGet(currKey); + if (rawData.HasValue && !forceDb) + { + result = JsonConvert.DeserializeObject($"{rawData}"); + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Debug($"Read from REDIS: {ts.TotalMilliseconds}ms"); + } + else + { + var rawResult = dbTabController.MseGetSub(idxMacc, idxMacchSub); + if (rawResult != null && rawResult.Count > 0) + { + result = rawResult.FirstOrDefault(); + } + // serializzp e salvo... + rawData = JsonConvert.SerializeObject(result); + redisDb.StringSet(currKey, rawData, UltraLongCache); + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Debug($"Read from DB: {ts.TotalMilliseconds}ms"); + } + if (result == null) + { + result = new MappaStatoExpl(); + } + return result; + } + /// /// Processa registrazione di un counter x una data macchina IOB From 7470e8a768bcab48703a9c5afec8344671e827f0 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 10 Nov 2023 19:26:51 +0100 Subject: [PATCH 14/14] Fix catena update ODL in doppia tavola --- MP-TAB-SERV/Components/MachineBlock.razor.cs | 10 +++++----- MP-TAB-SERV/Components/OdlMan.razor.cs | 4 ---- MP-TAB-SERV/MP-TAB-SERV.csproj | 2 +- MP-TAB-SERV/Pages/ODL.razor | 2 +- MP-TAB-SERV/Pages/ODL.razor.cs | 12 ++++-------- MP-TAB-SERV/Resources/ChangeLog.html | 2 +- MP-TAB-SERV/Resources/VersNum.txt | 2 +- MP-TAB-SERV/Resources/manifest.xml | 2 +- MP.Data/Controllers/MpTabController.cs | 2 +- 9 files changed, 15 insertions(+), 23 deletions(-) diff --git a/MP-TAB-SERV/Components/MachineBlock.razor.cs b/MP-TAB-SERV/Components/MachineBlock.razor.cs index a9723242..3ede46ee 100644 --- a/MP-TAB-SERV/Components/MachineBlock.razor.cs +++ b/MP-TAB-SERV/Components/MachineBlock.razor.cs @@ -164,11 +164,11 @@ namespace MP_TAB_SERV.Components protected override void OnParametersSet() { isLoading = RecMSE == null; - //// controllo SE avessi idxMacchSub --> rileggo! - //if (!string.IsNullOrEmpty(IdxMacchSub) && RecMSE != null) - //{ - // RecMSE = TabDServ.MseGetSub(RecMSE.IdxMacchina, IdxMacchSub, true); - //} + // controllo SE avessi idxMacchSub --> rileggo! + if (!string.IsNullOrEmpty(IdxMacchSub) && RecMSE != null) + { + RecMSE = TabDServ.MseGetSub(RecMSE.IdxMacchina, IdxMacchSub, true); + } setGaugeVals(); } diff --git a/MP-TAB-SERV/Components/OdlMan.razor.cs b/MP-TAB-SERV/Components/OdlMan.razor.cs index 20cff024..c166639a 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor.cs +++ b/MP-TAB-SERV/Components/OdlMan.razor.cs @@ -790,13 +790,9 @@ namespace MP_TAB_SERV.Components protected async Task SetMacc(string selIdxMacc) { - isProcessing = true; - await Task.Delay(10); IdxMaccSel = selIdxMacc; await DoUpdate(); - isProcessing = false; await E_MachSel.InvokeAsync(selIdxMacc); - await Task.Delay(10); } protected async Task ToggleOdlDetail() diff --git a/MP-TAB-SERV/MP-TAB-SERV.csproj b/MP-TAB-SERV/MP-TAB-SERV.csproj index a7bdcc19..4fc13f95 100644 --- a/MP-TAB-SERV/MP-TAB-SERV.csproj +++ b/MP-TAB-SERV/MP-TAB-SERV.csproj @@ -3,7 +3,7 @@ net6.0 enable - 6.16.2311.1017 + 6.16.2311.1019 enable MP_TAB_SERV diff --git a/MP-TAB-SERV/Pages/ODL.razor b/MP-TAB-SERV/Pages/ODL.razor index 8f141d37..cea8d71f 100644 --- a/MP-TAB-SERV/Pages/ODL.razor +++ b/MP-TAB-SERV/Pages/ODL.razor @@ -7,6 +7,6 @@ } else { - + } diff --git a/MP-TAB-SERV/Pages/ODL.razor.cs b/MP-TAB-SERV/Pages/ODL.razor.cs index 016371db..fd99ee58 100644 --- a/MP-TAB-SERV/Pages/ODL.razor.cs +++ b/MP-TAB-SERV/Pages/ODL.razor.cs @@ -50,15 +50,11 @@ namespace MP_TAB_SERV.Pages } } - protected async Task SetMacc(string selIdxMacc) + private string IdxMaccSubSel = ""; + + protected void SetMacc(string selIdxMacc) { - CurrMSE = null; - await Task.Delay(1); - IdxMacc = selIdxMacc; - await MsgServ.IdxMaccSet(selIdxMacc); - // recupero MSE macchina.... - CurrMSE = await MsgServ.GetMachineMse(IdxMacc); - await InvokeAsync(StateHasChanged); + IdxMaccSubSel = selIdxMacc; } #endregion Protected Methods diff --git a/MP-TAB-SERV/Resources/ChangeLog.html b/MP-TAB-SERV/Resources/ChangeLog.html index dcb3afed..84db16e8 100644 --- a/MP-TAB-SERV/Resources/ChangeLog.html +++ b/MP-TAB-SERV/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MAPOSPEC -

          Versione: 6.16.2311.1017

          +

          Versione: 6.16.2311.1019


          Note di rilascio:
          • diff --git a/MP-TAB-SERV/Resources/VersNum.txt b/MP-TAB-SERV/Resources/VersNum.txt index 8b8eb08c..0c7d7816 100644 --- a/MP-TAB-SERV/Resources/VersNum.txt +++ b/MP-TAB-SERV/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2311.1017 +6.16.2311.1019 diff --git a/MP-TAB-SERV/Resources/manifest.xml b/MP-TAB-SERV/Resources/manifest.xml index 998f69ad..d91e2e95 100644 --- a/MP-TAB-SERV/Resources/manifest.xml +++ b/MP-TAB-SERV/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2311.1017 + 6.16.2311.1019 https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/MP-TAB-SERV.zip https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/ChangeLog.html false diff --git a/MP.Data/Controllers/MpTabController.cs b/MP.Data/Controllers/MpTabController.cs index 6224c7ac..50a5b34f 100644 --- a/MP.Data/Controllers/MpTabController.cs +++ b/MP.Data/Controllers/MpTabController.cs @@ -782,7 +782,7 @@ namespace MP.Data.Controllers var IdxMacchSub = new SqlParameter("@IdxMacchSub", idxMacchSub); dbResult = dbCtx .DbSetMSE - .FromSqlRaw("EXEC stp_ODL_fineProd @IdxMacchina, @IdxMacchSub", IdxMacc, IdxMacchSub) + .FromSqlRaw("EXEC stp_MSE_getByIdxMacchAndSub @IdxMacchina, @IdxMacchSub", IdxMacc, IdxMacchSub) .AsNoTracking() .ToList(); }