diff --git a/MP-TAB3/Components/InsManual.razor b/MP-TAB3/Components/InsManual.razor index c9edf904..d0eb998d 100644 --- a/MP-TAB3/Components/InsManual.razor +++ b/MP-TAB3/Components/InsManual.razor @@ -100,8 +100,13 @@ -
- +
+ +
+
+
+
+
}
diff --git a/MP-TAB3/Components/InsManual.razor.cs b/MP-TAB3/Components/InsManual.razor.cs index 5a0f4089..a9551076 100644 --- a/MP-TAB3/Components/InsManual.razor.cs +++ b/MP-TAB3/Components/InsManual.razor.cs @@ -1,4 +1,5 @@ using Microsoft.AspNetCore.Components; +using Microsoft.JSInterop; using MP.Core.DTO; using MP.Data.DbModels; using MP.Data.Services; @@ -47,7 +48,10 @@ namespace MP_TAB3.Components // filtra dati odierni x tab editabile... if (ListPeriod != null && ListPeriod.Count > 0) { - ListDay = ListPeriod.Where(x => x.InizioStato.Date == dtSel).ToList(); + ListDay = ListPeriod + .Where(x => x.InizioStato.Date == dtSel) + .OrderBy(x => x.IdxInsMan) + .ToList(); } #if false MService.targetDate = dtSel; @@ -138,15 +142,78 @@ namespace MP_TAB3.Components if (EditRecord != null) { // sistemo i dati... + var dayElap = EditRecord.InizioStato.Subtract(EditRecord.InizioStato.Date); + EditRecord.InizioStato = dtCurr.Date.Add(dayElap); EditRecord.MinProd = EditRecord.TCiclo * EditRecord.PzBuoni; EditRecord.FineStato = EditRecord.InizioStato.AddMinutes((double)EditRecord.MinProd); // lancio salvataggio sul DB await TabDServ.InsManUpsert(EditRecord); EditRecord = null; + if (!timeInfoOk()) + { + int numChange = await DoRecalcDay(); + } // rileggo i dati... ReloadData(); } } + [Inject] + protected IJSRuntime JSRuntime { get; set; } = null!; + + private bool timeInfoOk() + { + bool allOk = false; + if (ListDTO != null) + { + var dayDto = ListDTO.FirstOrDefault(x => x.DataRif == dtCurr.Date); + if (dayDto != null && ListDay != null) + { + var firstRec = ListDay.OrderBy(x => x.InizioStato).FirstOrDefault(); + var lastRec = ListDay.OrderByDescending(x => x.InizioStato).FirstOrDefault(); + var deltaMins = lastRec!.FineStato!.Value.Subtract(firstRec!.InizioStato).TotalMinutes; + allOk = Math.Abs(deltaMins - (double)dayDto.MinProdTot) < 1; + } + } + return allOk; + } + + private async Task RecalcDay() + { + if (!await JSRuntime.InvokeAsync("confirm", $"Sicuro di voler ricalcolare i dati della giornata?")) + return 0; + + return await DoRecalcDay(); + } + + private async Task DoRecalcDay() + { + int numChange = 0; + // prendo i dati odierni, e uno x uno ciclo e sistemo... + DateTime lastDate = dtCurr.Date; + List ListChange = new List(); + if (ListDay != null && ListDay.Count > 0) + { + foreach (var item in ListDay) + { + if (item.InizioStato < lastDate) + { + item.InizioStato = lastDate; + } + // controllo se la data fine è ok... + if (!item.FineStato.HasValue || Math.Abs(item.InizioStato.AddMinutes((double)item.MinProd).Subtract(item.FineStato.Value).TotalMinutes) > 1) + { + item.FineStato = item.InizioStato.AddMinutes((double)item.MinProd); + numChange++; + ListChange.Add(item); + } + lastDate = item.FineStato.Value; + } + // salvo tutto + await TabDServ.InsManUpsert(ListChange); + } + return numChange; + } + private double NumGreen = 25; private double NumYellow = 5; diff --git a/MP-TAB3/MP-TAB3.csproj b/MP-TAB3/MP-TAB3.csproj index 1e965623..d2b9dc7f 100644 --- a/MP-TAB3/MP-TAB3.csproj +++ b/MP-TAB3/MP-TAB3.csproj @@ -3,7 +3,7 @@ net6.0 enable - 6.16.2504.112 + 6.16.2504.115 enable MP_TAB3 diff --git a/MP-TAB3/Resources/ChangeLog.html b/MP-TAB3/Resources/ChangeLog.html index c55f2cff..4433f261 100644 --- a/MP-TAB3/Resources/ChangeLog.html +++ b/MP-TAB3/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MAPOSPEC -

Versione: 6.16.2504.112

+

Versione: 6.16.2504.115


Note di rilascio:
  • diff --git a/MP-TAB3/Resources/VersNum.txt b/MP-TAB3/Resources/VersNum.txt index 2db9470f..6c9ce85a 100644 --- a/MP-TAB3/Resources/VersNum.txt +++ b/MP-TAB3/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2504.112 +6.16.2504.115 diff --git a/MP-TAB3/Resources/manifest.xml b/MP-TAB3/Resources/manifest.xml index 54716764..2b7e9360 100644 --- a/MP-TAB3/Resources/manifest.xml +++ b/MP-TAB3/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2504.112 + 6.16.2504.115 https://nexus.steamware.net/repository/SWS/MP-TAB3/stable/LAST/MP-TAB3.zip https://nexus.steamware.net/repository/SWS/MP-TAB3/stable/LAST/ChangeLog.html false diff --git a/MP.Data/Controllers/MpTabController.cs b/MP.Data/Controllers/MpTabController.cs index 909f3985..2ffc4f39 100644 --- a/MP.Data/Controllers/MpTabController.cs +++ b/MP.Data/Controllers/MpTabController.cs @@ -708,6 +708,50 @@ namespace MP.Data.Controllers return fatto; } + /// + /// Esegue salvataggio lista records + svuotamento cache + /// + /// + public bool InsManUpsert(List listRecord) + { + bool fatto = false; + using (var dbCtx = new MoonProContext(_configuration)) + { + foreach (var currRecord in listRecord) + { + var actRec = dbCtx + .DbSetInsManuali + .Where(x => currRecord.IdxInsMan > 0 && x.IdxInsMan == currRecord.IdxInsMan) + .FirstOrDefault(); + // se ci fosse aggiorno... + if (actRec == null) + { + dbCtx + .DbSetInsManuali + .Add(currRecord); + } + else + { + actRec.CodArticolo = currRecord.CodArticolo; + actRec.FineStato = currRecord.FineStato; + actRec.IdxMacchina = currRecord.IdxMacchina; + actRec.IdxTipoEv = currRecord.IdxTipoEv; + actRec.Imported = currRecord.Imported; + actRec.InizioStato = currRecord.InizioStato; + actRec.KeyRichiesta = currRecord.KeyRichiesta; + actRec.MatrOpr = currRecord.MatrOpr; + actRec.MinProd = currRecord.MinProd; + actRec.PzBuoni = currRecord.PzBuoni; + actRec.TCiclo = currRecord.TCiclo; + dbCtx.Entry(actRec).State = EntityState.Modified; + } + } + var res = dbCtx.SaveChanges(); + fatto = res != 0; + } + return fatto; + } + /// /// Elenco PODL macchina /// diff --git a/MP.Data/Services/TabDataService.cs b/MP.Data/Services/TabDataService.cs index 9f6c614c..729148a8 100644 --- a/MP.Data/Services/TabDataService.cs +++ b/MP.Data/Services/TabDataService.cs @@ -970,6 +970,20 @@ namespace MP.Data.Services await ExecFlushRedisPattern(pattern); return fatto; } + /// + /// Esegue salvataggio record + svuotamento cache + /// + /// + public async Task InsManUpsert(List listRecord) + { + bool fatto = false; + // salvo + fatto = dbTabController.InsManUpsert(listRecord); + // svuoto cache + RedisValue pattern = $"{redisBaseKey}:InsMan"; + await ExecFlushRedisPattern(pattern); + return fatto; + } /// /// Recupero info IOB x TAB (da info registrate IOB-WIN--> MP-IO)