From 07ed5c7632fe4efda7ac90b4ed2cf33126a01e4a Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Wed, 2 Apr 2025 18:48:12 +0200 Subject: [PATCH] Update editing insMan --- MP-TAB3/Components/InsManual.razor | 161 ++++++++-------- MP-TAB3/Components/InsManual.razor.cs | 32 +++- MP-TAB3/MP-TAB3.csproj | 2 +- MP-TAB3/Resources/ChangeLog.html | 2 +- MP-TAB3/Resources/VersNum.txt | 2 +- MP-TAB3/Resources/manifest.xml | 2 +- MP.Data/Controllers/MpTabController.cs | 28 ++- MP.Data/Services/TabDataService.cs | 253 +++++++++++++------------ 8 files changed, 279 insertions(+), 203 deletions(-) diff --git a/MP-TAB3/Components/InsManual.razor b/MP-TAB3/Components/InsManual.razor index bf6504f7..7a7e5067 100644 --- a/MP-TAB3/Components/InsManual.razor +++ b/MP-TAB3/Components/InsManual.razor @@ -5,31 +5,31 @@ @if (showDetail) {
-
- @if (DayMinTot < 1440) - { -
- -
-
- -
-
- -
- } - else - { -
-
- } -
- -
-
@if (EditRecord == null) { - if (SeqStatus != null && SeqStatus.Count() > 0) +
+ @if (DayMinTot < 1440) + { +
+ +
+
+ +
+
+ +
+ } + else + { +
+
+ } +
+ +
+
+ @if (SeqStatus != null && SeqStatus.Count() > 0) {
@@ -54,61 +54,66 @@ } else { -
- @if(EditRecord.IsWork) - { -
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
- } - else - { -
-
- - -
-
-
-
- - -
-
- } - -
- +
+
+
-
- +
+ +
+
+ @if (EditRecord.IsWork) + { +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ } + else + { +
+
+
+ + +
+
+
+
+ + +
+
+
+ }
} @@ -142,7 +147,7 @@ @item.PzBuoni @($"{item.TCiclo:f2}") @($"{item.MinProd:f2}") - + } diff --git a/MP-TAB3/Components/InsManual.razor.cs b/MP-TAB3/Components/InsManual.razor.cs index 422d588d..5c689748 100644 --- a/MP-TAB3/Components/InsManual.razor.cs +++ b/MP-TAB3/Components/InsManual.razor.cs @@ -75,12 +75,31 @@ namespace MP_TAB3.Components }; } } - + /// + /// imposta record x editing + /// + /// protected void DoEdit(InsManualiModel? selRec) { EditRecord = selRec; } + /// + /// impossta record x eliminazione + /// + /// + protected async Task DoDelete(InsManualiModel selRec) + { + if (!await JSRuntime.InvokeAsync("confirm", $"Sicuro di voler eliminare il record tipo {selRec.IdxTipoEv} | {selRec.InizioStato:yyyy.MM.dd HH:mm} per {selRec.MinProd:N2} min?")) + return; + // esegue eliminazione del record... + await TabDServ.InsManDelete(selRec); + + // rileggo i dati... + ReloadData(); + RecalcDayData(dtCurr); + } + protected async Task DoSave() { // solo se ho record... @@ -90,7 +109,16 @@ namespace MP_TAB3.Components var dayElap = EditRecord.InizioStato.Subtract(EditRecord.InizioStato.Date); EditRecord.MatrOpr = MServ.MatrOpr; EditRecord.InizioStato = dtCurr.Date.Add(dayElap); - EditRecord.MinProd = EditRecord.TCiclo * EditRecord.PzBuoni; + // imposto altri campi secondo il TIPO di record... + if (EditRecord.IsWork) + { + EditRecord.MinProd = EditRecord.TCiclo * EditRecord.PzBuoni; + } + else + { + EditRecord.PzBuoni = 0; + EditRecord.TCiclo = 0; + } EditRecord.FineStato = EditRecord.InizioStato.AddMinutes((double)EditRecord.MinProd); // lancio salvataggio sul DB await TabDServ.InsManUpsert(EditRecord); diff --git a/MP-TAB3/MP-TAB3.csproj b/MP-TAB3/MP-TAB3.csproj index d297c1a3..cfebd9aa 100644 --- a/MP-TAB3/MP-TAB3.csproj +++ b/MP-TAB3/MP-TAB3.csproj @@ -3,7 +3,7 @@ net6.0 enable - 6.16.2504.217 + 6.16.2504.218 enable MP_TAB3 diff --git a/MP-TAB3/Resources/ChangeLog.html b/MP-TAB3/Resources/ChangeLog.html index ee15a13d..752cadc2 100644 --- a/MP-TAB3/Resources/ChangeLog.html +++ b/MP-TAB3/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MAPOSPEC -

Versione: 6.16.2504.217

+

Versione: 6.16.2504.218


Note di rilascio:
  • diff --git a/MP-TAB3/Resources/VersNum.txt b/MP-TAB3/Resources/VersNum.txt index 88839317..ed23e05c 100644 --- a/MP-TAB3/Resources/VersNum.txt +++ b/MP-TAB3/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2504.217 +6.16.2504.218 diff --git a/MP-TAB3/Resources/manifest.xml b/MP-TAB3/Resources/manifest.xml index 8275e382..077a120b 100644 --- a/MP-TAB3/Resources/manifest.xml +++ b/MP-TAB3/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2504.217 + 6.16.2504.218 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 2ffc4f39..e2b89f6f 100644 --- a/MP.Data/Controllers/MpTabController.cs +++ b/MP.Data/Controllers/MpTabController.cs @@ -646,6 +646,32 @@ namespace MP.Data.Controllers return dbResult; } + /// + /// Elimina record + /// + /// + public bool InsManDelete(InsManualiModel currRecord) + { + bool fatto = false; + using (var dbCtx = new MoonProContext(_configuration)) + { + var actRec = dbCtx + .DbSetInsManuali + .Where(x => currRecord.IdxInsMan > 0 && x.IdxInsMan == currRecord.IdxInsMan) + .FirstOrDefault(); + // se ci fosse aggiorno... + if (actRec != null) + { + dbCtx + .DbSetInsManuali + .Remove(actRec); + } + var res = dbCtx.SaveChanges(); + fatto = res != 0; + } + return fatto; + } + /// /// Elenco insert manuali dato /// @@ -668,7 +694,7 @@ namespace MP.Data.Controllers } /// - /// Esegue salvataggio record + svuotamento cache + /// Esegue upsert record /// /// public bool InsManUpsert(InsManualiModel currRecord) diff --git a/MP.Data/Services/TabDataService.cs b/MP.Data/Services/TabDataService.cs index ce52b9fb..0abccbde 100644 --- a/MP.Data/Services/TabDataService.cs +++ b/MP.Data/Services/TabDataService.cs @@ -918,99 +918,20 @@ namespace MP.Data.Services } return result; } + /// - /// Elenco DTO x plotting seq stati giornaliero + /// Elimina record + svuotamento cache /// - /// Record dettaglio giornata - /// - public List InsManSeqDayStatus(List listDetail) + /// + public async Task InsManDelete(InsManualiModel currRecord) { - List? result = new List(); - // per sicurezza RIORDINO! - listDetail = listDetail - .OrderBy(x => x.InizioStato) - .ToList(); - if (listDetail.Count > 0) - { - DateTime periodStart = listDetail.FirstOrDefault().InizioStato; - DateTime periodEnd = listDetail.FirstOrDefault().FineStato.Value; - double duration = 0; - int lastIdxTipo = -1; - ManualStatusDTO currRec = new ManualStatusDTO(); - // se NON parte da mezzanotte metto un "pad iniziale"... - if (periodStart.TimeOfDay > new TimeSpan(0)) - { - lastIdxTipo = 0; - currRec = new ManualStatusDTO - { - IdxTipo = lastIdxTipo, - CssBlock = "bg-light text-dark", - Title = "missing", - Value = periodStart.TimeOfDay.TotalMinutes, - ValueMax = 1440 - }; - } - // ciclo tutti i record, verificando idxTipo... - foreach (var item in listDetail) - { - if (item.IdxTipoEv != lastIdxTipo) - { - // aggiungo rec precedente... se > 0 - if (currRec.Value > 0) - { - result.Add(currRec); - } - lastIdxTipo = item.IdxTipoEv; - periodStart = item.InizioStato; - periodEnd = item.FineStato.Value; - duration = (double)item.MinProd; - currRec = new ManualStatusDTO - { - IdxTipo = lastIdxTipo, - // fare da DB --> anagEventi - CssBlock = item.IdxTipoEv == 1 ? "bg-success text-light" : "bg-secondary text-light", - Title = $"{periodStart:HH:mm}-{periodEnd:HH:mm}", - Value = duration, - ValueMax = 1440 - }; - } - else - { - duration += (double)item.MinProd; - periodEnd = item.FineStato.Value; - currRec = new ManualStatusDTO - { - IdxTipo = lastIdxTipo, - // fare da DB --> anagEventi - CssBlock = item.IdxTipoEv == 1 ? "bg-success text-light" : "bg-secondary text-light", - Title = $"{periodStart:HH:mm}-{periodEnd:HH:mm}", - Value = duration, - ValueMax = 1440 - }; - } - } - // aggiungo rec precedente... se > 0 - if (currRec.Value > 0) - { - result.Add(currRec); - } - // se non arrivo a mezzanotte aggiungo "pad finale" - var deltaFin = TimeSpan.FromHours(24).Subtract(periodEnd.TimeOfDay); - if (deltaFin.TotalMinutes > 1) - { - lastIdxTipo = 0; - currRec = new ManualStatusDTO - { - IdxTipo = lastIdxTipo, - CssBlock = "bg-light text-dark", - Title = "missing", - Value = deltaFin.TotalMinutes, - ValueMax = 1440 - }; - result.Add(currRec); - } - } - return result; + bool fatto = false; + // salvo + fatto = dbTabController.InsManDelete(currRecord); + // svuoto cache + RedisValue pattern = $"{redisBaseKey}:InsMan:*"; + await ExecFlushRedisPatternAsync(pattern); + return fatto; } /// @@ -1120,6 +1041,101 @@ namespace MP.Data.Services return result; } + /// + /// Elenco DTO x plotting seq stati giornaliero + /// + /// Record dettaglio giornata + /// + public List InsManSeqDayStatus(List listDetail) + { + List? result = new List(); + // per sicurezza RIORDINO! + listDetail = listDetail + .OrderBy(x => x.InizioStato) + .ToList(); + if (listDetail.Count > 0) + { + DateTime periodStart = listDetail.FirstOrDefault().InizioStato; + DateTime periodEnd = listDetail.FirstOrDefault().FineStato.Value; + double duration = 0; + int lastIdxTipo = -1; + ManualStatusDTO currRec = new ManualStatusDTO(); + // se NON parte da mezzanotte metto un "pad iniziale"... + if (periodStart.TimeOfDay > new TimeSpan(0)) + { + lastIdxTipo = 0; + currRec = new ManualStatusDTO + { + IdxTipo = lastIdxTipo, + CssBlock = "bg-light text-dark", + Title = "missing", + Value = periodStart.TimeOfDay.TotalMinutes, + ValueMax = 1440 + }; + } + // ciclo tutti i record, verificando idxTipo... + foreach (var item in listDetail) + { + if (item.IdxTipoEv != lastIdxTipo) + { + // aggiungo rec precedente... se > 0 + if (currRec.Value > 0) + { + result.Add(currRec); + } + lastIdxTipo = item.IdxTipoEv; + periodStart = item.InizioStato; + periodEnd = item.FineStato.Value; + duration = (double)item.MinProd; + currRec = new ManualStatusDTO + { + IdxTipo = lastIdxTipo, + // fare da DB --> anagEventi + CssBlock = item.IdxTipoEv == 1 ? "bg-success text-light" : "bg-secondary text-light", + Title = $"{periodStart:HH:mm}-{periodEnd:HH:mm}", + Value = duration, + ValueMax = 1440 + }; + } + else + { + duration += (double)item.MinProd; + periodEnd = item.FineStato.Value; + currRec = new ManualStatusDTO + { + IdxTipo = lastIdxTipo, + // fare da DB --> anagEventi + CssBlock = item.IdxTipoEv == 1 ? "bg-success text-light" : "bg-secondary text-light", + Title = $"{periodStart:HH:mm}-{periodEnd:HH:mm}", + Value = duration, + ValueMax = 1440 + }; + } + } + // aggiungo rec precedente... se > 0 + if (currRec.Value > 0) + { + result.Add(currRec); + } + // se non arrivo a mezzanotte aggiungo "pad finale" + var deltaFin = TimeSpan.FromHours(24).Subtract(periodEnd.TimeOfDay); + if (deltaFin.TotalMinutes > 1) + { + lastIdxTipo = 0; + currRec = new ManualStatusDTO + { + IdxTipo = lastIdxTipo, + CssBlock = "bg-light text-dark", + Title = "missing", + Value = deltaFin.TotalMinutes, + ValueMax = 1440 + }; + result.Add(currRec); + } + } + return result; + } + /// /// Esegue salvataggio record + svuotamento cache /// @@ -1134,6 +1150,7 @@ namespace MP.Data.Services await ExecFlushRedisPatternAsync(pattern); return fatto; } + /// /// Esegue salvataggio record + svuotamento cache /// @@ -3794,34 +3811,6 @@ namespace MP.Data.Services #region Private Methods - /// - /// Esegue flush memoria redis dato pattern in async - /// - /// - /// - private async Task ExecFlushRedisPatternAsync(RedisValue pattern) - { - bool answ = false; - var listEndpoints = redisConn.GetEndPoints(); - foreach (var endPoint in listEndpoints) - { - //var server = redisConnAdmin.GetServer(listEndpoints[0]); - var server = redisConn.GetServer(endPoint); - if (server != null) - { - var keyList = server.Keys(redisDb.Database, pattern); - foreach (var item in keyList) - { - await redisDb.KeyDeleteAsync(item); - } - answ = true; - } - } - // notifico update ai client in ascolto x reset cache - NotifyReloadRequest($"FlushRedisCache | {pattern}"); - return answ; - } - /// /// Esegue flush memoria redis dato pattern, metodo sincrono /// @@ -3850,6 +3839,34 @@ namespace MP.Data.Services return answ; } + /// + /// Esegue flush memoria redis dato pattern in async + /// + /// + /// + private async Task ExecFlushRedisPatternAsync(RedisValue pattern) + { + bool answ = false; + var listEndpoints = redisConn.GetEndPoints(); + foreach (var endPoint in listEndpoints) + { + //var server = redisConnAdmin.GetServer(listEndpoints[0]); + var server = redisConn.GetServer(endPoint); + if (server != null) + { + var keyList = server.Keys(redisDb.Database, pattern); + foreach (var item in keyList) + { + await redisDb.KeyDeleteAsync(item); + } + answ = true; + } + } + // notifico update ai client in ascolto x reset cache + NotifyReloadRequest($"FlushRedisCache | {pattern}"); + return answ; + } + /// /// Hash dati EXE TASK x la macchina specificata ///