Fix e test conferma fermate riqualificate

This commit is contained in:
Samuele Locatelli
2023-10-10 18:56:50 +02:00
parent db105b8f9a
commit 2176cbeb88
8 changed files with 214 additions and 60 deletions
+15 -3
View File
@@ -88,12 +88,24 @@ namespace MP_TAB_SERV.Components
#region Protected Methods
public void doCancel()
protected void doCancel()
{
DoReset();
}
public async Task doSave()
/// <summary>
/// Forza salvataggio impostando data-ora
/// </summary>
/// <param name="dtRif"></param>
/// <returns></returns>
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)
/// </summary>
public bool insRealtime
protected bool insRealtime
{
get
{
+1 -1
View File
@@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<Version>6.16.2310.1016</Version>
<Version>6.16.2310.1018</Version>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>MP_TAB_SERV</RootNamespace>
</PropertyGroup>
+66 -50
View File
@@ -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
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>Modulo MAPOSPEC </i>
<h4>Versione: 6.16.2310.1016</h4>
<h4>Versione: 6.16.2310.1018</h4>
<br /> Note di rilascio:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
6.16.2310.1016
6.16.2310.1018
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>6.16.2310.1016</version>
<version>6.16.2310.1018</version>
<url>https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/MP-TAB-SERV.zip</url>
<changelog>https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/ChangeLog.html</changelog>
<mandatory>false</mandatory>
+92 -2
View File
@@ -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;
}
/// <summary>
/// Recupera record successivo da DDB
/// </summary>
/// <param name="idxMacchina"></param>
/// <param name="inizioStato"></param>
/// <returns></returns>
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;
}
/// <summary>
/// Inserimento record in DDB
/// </summary>
/// <param name="idxMacchina"></param>
/// <param name="inizioStato"></param>
/// <param name="idxStato"></param>
/// <param name="codArt"></param>
/// <param name="value"></param>
/// <param name="matrOpr"></param>
/// <param name="pallet"></param>
/// <returns></returns>
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;
}
/// <summary>
/// Inserimento record in DDB
/// </summary>
/// <param name="idxMacchina"></param>
/// <param name="inizio"></param>
/// <param name="idxStatoStart"></param>
/// <param name="nStepEventi"></param>
/// <param name="nRecCheck"></param>
/// <param name="checkOnly"></param>
/// <returns></returns>
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
/// <returns></returns>
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;
}
/// <summary>
/// Imposto abilitazione insert eventi macchina (x fermare/avviare dati da IOB)
/// </summary>
/// <param name="idxMacchina">Idx macchina, "*" = tutte</param>
/// <param name="insEnabled">Abilitazione insert ev macchina</param>
/// <returns></returns>
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
/// <summary>
/// MicroStato macchina (da key)
/// </summary>
+37 -1
View File
@@ -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;
}
/// <summary>
/// Recupera record successivo da DDB
/// </summary>
/// <param name="idxMacchina"></param>
/// <param name="inizioStato"></param>
/// <returns></returns>
public DiarioDiBordoModel DDB_getNext(string idxMacchina, DateTime inizioStato)
{
return dbTabController.DDB_getNext(idxMacchina, inizioStato);
}
/// <summary>
/// Inserimento record in DDB
/// </summary>
/// <param name="idxMacchina"></param>
/// <param name="inizio"></param>
/// <param name="idxStatoStart"></param>
/// <param name="nStepEventi"></param>
/// <param name="nRecCheck"></param>
/// <param name="checkOnly"></param>
/// <returns></returns>
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;
}
/// <summary>
/// Effettua ricalcolo MSE x macchina indicata
/// </summary>
/// <param name="idxMacchina">idx macchina da confermare</param>
/// <param name="insEnabled">Abilitazione insert ev macchina</param>
/// <returns></returns>
public bool MacchinaSetInsEnab(string idxMacchina, bool insEnabled)
{
bool answ = dbTabController.MacchinaSetInsEnab(idxMacchina, insEnabled);
return answ;
}
/// <summary>
/// Resetta (rileggendo) i dati della macchina
/// </summary>