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)