diff --git a/MP-TAB-SERV/Components/NotesEditor.razor.cs b/MP-TAB-SERV/Components/NotesEditor.razor.cs
index 10b11275..30135b33 100644
--- a/MP-TAB-SERV/Components/NotesEditor.razor.cs
+++ b/MP-TAB-SERV/Components/NotesEditor.razor.cs
@@ -88,12 +88,24 @@ namespace MP_TAB_SERV.Components
#region Protected Methods
- public void doCancel()
+ protected void doCancel()
{
DoReset();
}
- public async Task doSave()
+ ///
+ /// Forza salvataggio impostando data-ora
+ ///
+ ///
+ ///
+ public async Task ForceSave(DateTime dtRif)
+ {
+ DateSel = dtRif;
+ // ora salvo
+ await doSave();
+ }
+
+ protected async Task doSave()
{
// registro evento
EventListModel newRec = new EventListModel()
@@ -142,7 +154,7 @@ namespace MP_TAB_SERV.Components
/// Determina se insert sia Realtime o batch con DataOra (in base a diff tra DataOra
/// selezionata e realtime, se superiore ad X minuti NON � realtime)
///
- public bool insRealtime
+ protected bool insRealtime
{
get
{
diff --git a/MP-TAB-SERV/MP-TAB-SERV.csproj b/MP-TAB-SERV/MP-TAB-SERV.csproj
index 5d91b08e..f85cea51 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.2310.1016
+ 6.16.2310.1018
enable
MP_TAB_SERV
diff --git a/MP-TAB-SERV/Pages/ProdStop.razor.cs b/MP-TAB-SERV/Pages/ProdStop.razor.cs
index 00340524..da6d4def 100644
--- a/MP-TAB-SERV/Pages/ProdStop.razor.cs
+++ b/MP-TAB-SERV/Pages/ProdStop.razor.cs
@@ -3,6 +3,7 @@ using MP.Data;
using MP.Data.DatabaseModels;
using MP.Data.Services;
using MP_TAB_SERV.Components;
+using NLog;
namespace MP_TAB_SERV.Pages
{
@@ -11,6 +12,10 @@ namespace MP_TAB_SERV.Pages
#region Protected Fields
protected int dltMinRealtime = 1;
+ protected int minAnticipoRicalcolo = 1;
+ protected bool rdm_ChkOnly = false;
+ protected int rdm_nEvCheck = 1;
+ protected int rdm_nEvStep = 1;
#endregion Protected Fields
@@ -103,74 +108,75 @@ namespace MP_TAB_SERV.Pages
}
else
{
- // chiamo registrazione commento...
- if (noteEdit != null)
- {
- await noteEdit.doSave();
- }
-
-#if false
// in primis disabilito insert...
- DataLayerObj.taStatoMacchine.setInsEnabled(idxMacchina, false);
+ TabServ.MacchinaSetInsEnab(IdxMacc, false);
+
// calcolo evento
- string evento = IdxEv.ToString();
+ string evento = $"{IdxEv}";
string commento = "";
try
{
- evento = DataLayerObj.taAnagEventi.GetByIdx(IdxEv)[0].Nome.Replace("Barcode - ", "");
+ evento = rigaEvento.Nome.Replace("Barcode - ", "");
}
catch
{ }
// genero stringa pseudo-univoca
- string codRich = string.Format("{0:yyMMddHHmmss}-{1}", DateTime.Now, IdxEv);
+ string codRich = $"{DateTime.Now:yyMMddHHmmss}-{IdxEv}";
// x prima cosa scrivo un evento tipo "1" x chiudere la durata appena prima
// dell'evento successivo
try
{
// cerco da 1 sec DOPO evento...
- DS_applicazione.DiarioDiBordoDataTable tabNext = controllerMapo.nextEventoImpiantoFrom(idxMacchina, dataOraEv.AddSeconds(1));
+ var tabNext = TabServ.DDB_getNext(IdxMacc, DtRif.AddSeconds(1));
+
+ DateTime nextEvDT = tabNext != null ? tabNext.InizioStato : DateTime.Now.AddMinutes(-1);
- DateTime nextEvDT = DateTime.Now;
- if (tabNext.Rows.Count > 0)
- {
- nextEvDT = tabNext[0].InizioStato;
- }
- // se non trovo chiusura evento inserisco a 1 minuto prima di adesso la chiusura...
- else
- {
- nextEvDT = DateTime.Now.AddMinutes(-1);
- }
// fix salvo la dichiarazione di chiusura
- commento = string.Format("999 - M.Lav EndEvt: {0} [{1}]", evento, codRich);
- DataLayerObj.scriviRigaEventoBarcode(idxMacchina, 1, rigaStato.CodArticolo, commento, DataLayerObj.MatrOpr, rigaStato.pallet, nextEvDT.AddSeconds(-1), DateTime.Now); // 1 hard-coded x resettare
- }
- catch
- { }
- // update commento!
- commento = string.Format("999 - Dich StartEvt: {0} [{1}]", evento, codRich);
- // recupero data/ora evento da inserire (quella selezionata) ed AGGIUNGO 1
- // sec!!! cos� rimane traccia
- DataLayerObj.scriviRigaEventoBarcode(idxMacchina, IdxEv, rigaStato.CodArticolo, commento, DataLayerObj.MatrOpr, rigaStato.pallet, dataOraEv.AddSeconds(1), DateTime.Now);
- // eseguo ricalcolo!
- DateTime startRicalcolo = dataOraEv.AddMinutes(memLayer.ML.CRI("minAnticipoRicalcolo"));
+ commento = $"999 - M.Lav EndEvt: {evento} [{codRich}]";
+ // 1 hard-coded x resettare
+ EventListModel newRec = new EventListModel()
+ {
+ IdxMacchina = IdxMacc,
+ InizioStato = nextEvDT.AddSeconds(-1),
+ IdxTipo = 1,
+ CodArticolo = rigaStato.CodArticolo,
+ Value = commento,
+ MatrOpr = MatrOpr,
+ pallet = rigaStato.pallet
+ };
+ await TabServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.barcode);
+
+ // update commento apertura!
+ commento = $"999 - Dich StartEvt: {evento} [{codRich}]";
+ newRec = new EventListModel()
+ {
+ IdxMacchina = IdxMacc,
+ InizioStato = DtRif.AddSeconds(1),
+ IdxTipo = IdxEv,
+ CodArticolo = rigaStato.CodArticolo,
+ Value = commento,
+ MatrOpr = MatrOpr,
+ pallet = rigaStato.pallet
+ };
+ await TabServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.barcode);
+ // eseguo ricalcolo!
+ DateTime startRicalcolo = DtRif.AddMinutes(minAnticipoRicalcolo);
+ // eseguo ricalcolo periodo..
+ TabServ.DDB_DoRecalc(IdxMacc, startRicalcolo, 1, rdm_nEvStep, rdm_nEvCheck, rdm_ChkOnly);
+ // chiamo registrazione commento...
+ if (noteEdit != null)
+ {
+ await noteEdit.ForceSave(DtRif.AddSeconds(5));
+ DtRif = DateTime.Now;
+ }
+ }
+ catch (Exception exc)
+ {
+ Log.Error($"Eccezione in fase di riqualifica fermi{Environment.NewLine}{exc}");
+ }
- // leggo parametri x esecuzione...
- int rdm_nEvStep = memLayer.ML.CRI("rdm_nEvStep");
- int rdm_nEvCheck = memLayer.ML.CRI("rdm_nEvCheck");
- bool rdm_ChkOnly = memLayer.ML.CRB("rdm_ChkOnly");
- DataLayerObj.taComm.stp_ricalcolaDatiMacchinaFromDate(idxMacchina, startRicalcolo, 1, rdm_nEvStep, rdm_nEvCheck, rdm_ChkOnly); // nella stored imposto macchina OFFline e poi ONline, parto da "minAnticipoRicalcolo" minuti prima...
- // aggiorno
- // data
- // evento
- // x
- // insert
- // eventuale
- // commento
- // (5 sec...)
- dataOraEv = dataOraEv.AddSeconds(5);
// riabilito insert... anche se non dovrebbe servire x stored ricalcolo precedente...
- DataLayerObj.taStatoMacchine.setInsEnabled(idxMacchina, true);
-#endif
+ TabServ.MacchinaSetInsEnab(IdxMacc, true);
}
// mostro esito
alertCss = "alert-succes";
@@ -198,6 +204,10 @@ namespace MP_TAB_SERV.Pages
protected override async Task OnInitializedAsync()
{
dltMinRealtime = SMServ.GetConfInt("dltMinRealtime");
+ minAnticipoRicalcolo = SMServ.GetConfInt("minAnticipoRicalcolo");
+ rdm_nEvStep = SMServ.GetConfInt("rdm_nEvStep");
+ rdm_nEvCheck = SMServ.GetConfInt("rdm_nEvCheck");
+ rdm_ChkOnly = SMServ.GetConfBool("rdm_ChkOnly");
// leggo gli altri dati
await ReloadData();
}
@@ -209,6 +219,12 @@ namespace MP_TAB_SERV.Pages
#endregion Protected Methods
+ #region Private Fields
+
+ private static Logger Log = LogManager.GetCurrentClassLogger();
+
+ #endregion Private Fields
+
#region Private Properties
private int MatrOpr
diff --git a/MP-TAB-SERV/Resources/ChangeLog.html b/MP-TAB-SERV/Resources/ChangeLog.html
index 19716452..4acdd247 100644
--- a/MP-TAB-SERV/Resources/ChangeLog.html
+++ b/MP-TAB-SERV/Resources/ChangeLog.html
@@ -1,6 +1,6 @@
Modulo MAPOSPEC
- Versione: 6.16.2310.1016
+ Versione: 6.16.2310.1018
Note di rilascio:
-
diff --git a/MP-TAB-SERV/Resources/VersNum.txt b/MP-TAB-SERV/Resources/VersNum.txt
index f94afd31..3257a9bf 100644
--- a/MP-TAB-SERV/Resources/VersNum.txt
+++ b/MP-TAB-SERV/Resources/VersNum.txt
@@ -1 +1 @@
-6.16.2310.1016
+6.16.2310.1018
diff --git a/MP-TAB-SERV/Resources/manifest.xml b/MP-TAB-SERV/Resources/manifest.xml
index c8fd3411..09221c2b 100644
--- a/MP-TAB-SERV/Resources/manifest.xml
+++ b/MP-TAB-SERV/Resources/manifest.xml
@@ -1,6 +1,6 @@
-
- 6.16.2310.1016
+ 6.16.2310.1018
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 dd734cb4..7e550dae 100644
--- a/MP.Data/Controllers/MpTabController.cs
+++ b/MP.Data/Controllers/MpTabController.cs
@@ -2,7 +2,6 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using MP.Data.DatabaseModels;
-using MP.Data.DTO;
using NLog;
using System;
using System.Collections.Generic;
@@ -299,6 +298,39 @@ namespace MP.Data.Controllers
return dbResult;
}
+ ///
+ /// Recupera record successivo da DDB
+ ///
+ ///
+ ///
+ ///
+ public DiarioDiBordoModel DDB_getNext(string idxMacchina, DateTime inizioStato)
+ {
+ DiarioDiBordoModel dbResult = new DiarioDiBordoModel();
+ using (var dbCtx = new MoonProContext(_configuration))
+ {
+ var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina);
+ var DataRif = new SqlParameter("@dataRif", inizioStato);
+
+ dbResult = dbCtx
+ .DbSetDDB
+ .FromSqlRaw("exec dbo.stp_DDB_getNextByMacchinaFrom @IdxMacchina, @dataRif", IdxMacchina, DataRif)
+ .AsNoTracking()
+ .FirstOrDefault();
+ }
+ return dbResult;
+ }
+ ///
+ /// Inserimento record in DDB
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public bool DDB_InsStatoBatch(string idxMacchina, DateTime inizioStato, int idxStato, string codArt, string value, int matrOpr, string pallet)
{
bool fatto = false;
@@ -322,6 +354,40 @@ namespace MP.Data.Controllers
return fatto;
}
+ ///
+ /// Inserimento record in DDB
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool DDB_DoRecalc(string idxMacchina, DateTime inizio, int idxStatoStart, int nStepEventi, int nRecCheck, bool checkOnly)
+ {
+ bool fatto = false;
+ using (var dbCtx = new MoonProContext(_configuration))
+ {
+ var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina);
+ var Inizio = new SqlParameter("@inizio", inizio);
+ var IdxStatoStart = new SqlParameter("@idxStatoStart", idxStatoStart);
+ var NStepEventi = new SqlParameter("@nStepEventi", nStepEventi);
+ var NRecCheck = new SqlParameter("@nRecCheck", nRecCheck);
+ var CheckOnly = new SqlParameter("@CheckOnly", checkOnly);
+
+ var result = dbCtx
+ .Database
+ .ExecuteSqlRaw("exec man.stp_ricalcolaDatiMacchinaFromDateFork @IdxMacchina, @inizio, @idxStatoStart, @nStepEventi, @nRecCheck, @CheckOnly", IdxMacchina, Inizio, IdxStatoStart, nStepEventi, NRecCheck, CheckOnly);
+
+ // indico eseguito!
+ fatto = result > 0;
+ }
+ return fatto;
+ }
+
+ //stp_DDB_getNextByMacchinaFrom
+
public void Dispose()
{
_configuration = null;
@@ -336,7 +402,6 @@ namespace MP.Data.Controllers
///
public bool EvListDelete(string idxMacchina, DateTime dtEvento, int idxTipo)
{
-
bool fatto = false;
using (var dbCtx = new MoonProContext(_configuration))
{
@@ -438,6 +503,31 @@ namespace MP.Data.Controllers
return dbResult;
}
+ ///
+ /// Imposto abilitazione insert eventi macchina (x fermare/avviare dati da IOB)
+ ///
+ /// Idx macchina, "*" = tutte
+ /// Abilitazione insert ev macchina
+ ///
+ public bool MacchinaSetInsEnab(string idxMacchina, bool insEnabled)
+ {
+ bool fatto = false;
+ using (var dbCtx = new MoonProContext(_configuration))
+ {
+ var IdxMacchina = new SqlParameter("@idxMacchina", idxMacchina);
+ var InsEnabled = new SqlParameter("@insEnabled", insEnabled);
+
+ var result = dbCtx
+ .Database
+ .ExecuteSqlRaw("exec dbo.stp_STM_setInsEnabled @idxMacchina, @insEnabled", IdxMacchina, InsEnabled);
+ // indico eseguito!
+ fatto = result > 0;
+ }
+ return fatto;
+ }
+
+ //stp_STM_setInsEnabled
+
///
/// MicroStato macchina (da key)
///
diff --git a/MP.Data/Services/TabDataService.cs b/MP.Data/Services/TabDataService.cs
index df4b4979..3ccce2ad 100644
--- a/MP.Data/Services/TabDataService.cs
+++ b/MP.Data/Services/TabDataService.cs
@@ -1,7 +1,6 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using MP.Data.DatabaseModels;
-using MP.Data.DTO;
using MP.Data.Objects;
using Newtonsoft.Json;
using NLog;
@@ -292,6 +291,31 @@ namespace MP.Data.Services
return result;
}
+ ///
+ /// Recupera record successivo da DDB
+ ///
+ ///
+ ///
+ ///
+ public DiarioDiBordoModel DDB_getNext(string idxMacchina, DateTime inizioStato)
+ {
+ return dbTabController.DDB_getNext(idxMacchina, inizioStato);
+ }
+ ///
+ /// Inserimento record in DDB
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool DDB_DoRecalc(string idxMacchina, DateTime inizio, int idxStatoStart, int nStepEventi, int nRecCheck, bool checkOnly)
+ {
+ return dbTabController.DDB_DoRecalc(idxMacchina, inizio, idxStatoStart, nStepEventi, nRecCheck, checkOnly);
+ }
+
public void Dispose()
{
// Clear database controller
@@ -496,6 +520,18 @@ namespace MP.Data.Services
return result;
}
+ ///
+ /// Effettua ricalcolo MSE x macchina indicata
+ ///
+ /// idx macchina da confermare
+ /// Abilitazione insert ev macchina
+ ///
+ public bool MacchinaSetInsEnab(string idxMacchina, bool insEnabled)
+ {
+ bool answ = dbTabController.MacchinaSetInsEnab(idxMacchina, insEnabled);
+ return answ;
+ }
+
///
/// Resetta (rileggendo) i dati della macchina
///