Files
mapo-core/MP-TAB-SERV/Pages/ProdStop.razor.cs
T

240 lines
10 KiB
C#

using global::Microsoft.AspNetCore.Components;
using MP.Data.DatabaseModels;
using MP.Data.Services;
namespace MP_TAB_SERV.Pages
{
public partial class ProdStop
{
#region Public Properties
/// <summary>
/// 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
{
get
{
bool answ = true;
#if false
try
{
if (Math.Abs(dataOraEv.Subtract(DateTime.Now).TotalMinutes) > memLayer.ML.CRI("dltMinRealtime"))
{
answ = false;
}
}
catch
{ }
#endif
return answ;
}
}
#endregion Public Properties
#region Protected Properties
protected string alertCss { get; set; } = "alert-danger";
protected MappaStatoExpl? CurrMSE { get; set; } = null;
protected List<vSelEventiBCodeModel> events2show { get; set; } = new List<vSelEventiBCodeModel>();
protected string IdxMacc { get; set; } = "";
protected string lblOut { get; set; } = "";
[Inject]
protected StatusData MDataService { get; set; } = null!;
[Inject]
protected MessageService MServ { get; set; } = null!;
[Inject]
protected MessageService MsgServ { get; set; } = null!;
[Inject]
protected SharedMemService MStor { get; set; } = null!;
[Inject]
protected TabDataService TabServ { get; set; } = null!;
[Inject]
protected TabDataService TabSrv { get; set; } = null!;
#endregion Protected Properties
#region Protected Methods
/// <summary>
/// Processo registrazione eventi
/// </summary>
/// <param name="IdxEv"></param>
/// <returns></returns>
protected async Task EventRecord(int IdxEv)
{
await Task.Delay(1);
// salvo evento e processo...
if (IdxEv > 0)
{
var rigaEvento = MStor.GetEventRow(IdxEv);
if (rigaEvento != null)
{
var rigaStato = await TabServ.StatoMacchina(IdxMacc);
// processo evento...
if (insRealtime)
{
EventListModel newRec = new EventListModel()
{
IdxMacchina = IdxMacc,
InizioStato = DateTime.Now,
IdxTipo = IdxEv,
CodArticolo = rigaStato.CodArticolo,
Value = "DRT",
MatrOpr = MatrOpr,
pallet = rigaStato.pallet
};
// se realtime
await TabServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.barcode);
// resetta il microstato in modo da ricevere successive info HW
TabServ.resetMicrostatoMacchina(IdxMacc);
}
else
{
#if false
// in primis disabilito insert...
DataLayerObj.taStatoMacchine.setInsEnabled(idxMacchina, false);
// calcolo evento
string evento = IdxEv.ToString();
string commento = "";
try
{
evento = DataLayerObj.taAnagEventi.GetByIdx(IdxEv)[0].Nome.Replace("Barcode - ", "");
}
catch
{ }
// genero stringa pseudo-univoca
string codRich = string.Format("{0:yyMMddHHmmss}-{1}", DateTime.Now, 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));
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"));
// 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
}
// mostro esito
alertCss = "alert-succes";
lblOut = $"Registrata dichiarazione fermata alle {DateTime.Now:HH:mm:ss}";
}
else
{
alertCss = "alert-danger";
lblOut = $"Codice evento non valido! {IdxEv}";
}
}
// faccio refresh x singola macchina 2019.03.26
TabServ.RicalcMse(IdxMacc, 0);
// rileggo e salvo..
var ListMSE = await MDataService.MseGetAll();
if (ListMSE != null)
{
// salvo in LocalStorage...
await MServ.SaveMse(ListMSE);
// aggiorno MSE attuale
CurrMSE = ListMSE.Find(x => x.IdxMacchina == IdxMacc);
}
}
protected override async Task OnInitializedAsync()
{
await ReloadData();
}
#endregion Protected Methods
#region Private Properties
private int MatrOpr
{
get => MServ.MatrOpr;
}
#endregion Private Properties
[Inject]
protected NavigationManager NavMan { get; set; } = null!;
#region Private Methods
private async Task ReloadData()
{
if (string.IsNullOrEmpty(IdxMacc))
{
try
{
IdxMacc = await MsgServ.IdxMaccGet();
// recupero MSE macchina....
if (!string.IsNullOrEmpty(IdxMacc))
{
CurrMSE = await MsgServ.GetMachineMse(IdxMacc);
}
var eventsAll = await TabSrv.AnagEventiGetByMacch(IdxMacc);
if (eventsAll != null)
{
events2show = eventsAll.Where(x => x.EventoTablet).OrderBy(x => x.Label).ToList();
}
}
catch
{
NavMan.NavigateTo("/", true);
}
}
}
#endregion Private Methods
}
}