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
///