using Microsoft.AspNetCore.Components; using Microsoft.JSInterop; using MP.Core.DTO; using MP.Data; using MP.Data.DbModels; using MP.Data.Services; using MP.SPEC.Data; using Newtonsoft.Json; using static MP.Core.Objects.Enums; namespace MP.SPEC.Pages { public partial class RepStop : IDisposable { #region Public Methods public void Dispose() { TDFeeder.pauseTimers(); TDFeeder.dataPipe.EA_NewMessage -= DataPipe_EA_NewMessage; } #endregion Public Methods #region Protected Properties [Inject] protected IJSRuntime JSRuntime { get; set; } = null!; [Inject] protected MpDataService MDService { get; set; } = null!; [Inject] protected MsgServiceSpec MService { get; set; } = null!; [Inject] protected SharedMemService SMServ { get; set; } = null!; [Inject] protected TabDataService TabDServ { get; set; } = null!; [Inject] protected TabDataFeeder TDFeeder { get; set; } = null!; #endregion Protected Properties #region Protected Methods protected override async Task OnInitializedAsync() { await ReloadData(); TDFeeder.dataPipe.EA_NewMessage += DataPipe_EA_NewMessage; TDFeeder.resumeTimers(); } protected async Task SaveData(List newList) { // salvo valori ricevuti CurrMSE = newList; } #endregion Protected Methods #region Private Fields private List CurrMachSel = new List(); private List CurrMSE = new(); private bool isLoading = false; private List SearchFermate = new(); private bool showFermate = false; #endregion Private Fields #region Private Methods private void CheckSelection(List listSelezione) { CurrMachSel = listSelezione; // se c'č selezione mostro elenco fermate... showFermate = listSelezione.Count > 0; } /// /// Ricevuto nuovi dati da mostrare! /// /// /// private void DataPipe_EA_NewMessage(object? sender, EventArgs e) { PubSubEventArgs currArgs = (PubSubEventArgs)e; // conversione on-the-fly List --> allarmi if (!string.IsNullOrEmpty(currArgs.newMessage)) { try { List? dataList = JsonConvert.DeserializeObject>(currArgs.newMessage); if (dataList != null) { InvokeAsync(() => SaveData(dataList)); } } catch { } } InvokeAsync(() => { StateHasChanged(); }); } private async Task DoReload(bool forceReload) { isLoading = true; await Task.Delay(100); CurrMSE = await MDService.MseGetAll(true); isLoading = false; } /// /// Gestione ritorno a stato precedente, tramite stored /// /// private async Task DoRestorePrevious() { if (!await JSRuntime.InvokeAsync("confirm", $"Hai {CurrMachSel.Count} impianti selezionati.{Environment.NewLine}Confermi di voler registrare il ritorno all'ultimo stato precedente le dichiarazioni manuali?{Environment.NewLine}La procedura verificherā l'applicabilitā per ogni impianto selezionato.")) return; isLoading = true; await InvokeAsync(StateHasChanged); // se conferma ciclo x ogni macchina e registro foreach (var idxMacc in CurrMachSel) { DateTime adesso = DateTime.Now.Floor(TimeSpan.FromSeconds(1)); var rigaStato = MDService.StatoMacchina(idxMacc); string valData = $"SPEC | FRep.Fine | {MService.DomainName}\\{MService.UserName}"; // chiamo stored await TabDServ.RipristinaStatoPrec(idxMacc, adesso, valData, rigaStato.IdxStato, 0); // resetta il microstato in modo da ricevere successive info HW await TabDServ.resetMicrostatoMacchina(idxMacc); } forceResetSel = true; var ListMSE = await MDService.MseGetAll(true); CurrMachSel = new(); await Task.Delay(250); await ReloadData(); forceResetSel = false; CheckSelection(new()); isLoading = false; } /// /// Gestione selezione evento da registrare x le macchine selezionate /// /// /// private async Task EventRecord(SelEventDTO selEv) { if (!await JSRuntime.InvokeAsync("confirm", $"Hai {CurrMachSel.Count} impianti selezionati.{Environment.NewLine}Confermi di voler registrare l'evento {selEv.Descript}?")) return; isLoading = true; await InvokeAsync(StateHasChanged); // recupero evento var rigaEvento = SMServ.GetEventRow(selEv.IdxEv); if (rigaEvento != null) { // se conferma ciclo x ogni macchina e registro foreach (var idxMacc in CurrMachSel) { var rigaStato = MDService.StatoMacchina(idxMacc); // preparo info utente x Value... string valData = $"SPEC | FRep.Inizio | {MService.DomainName}\\{MService.UserName}"; // processo evento... DateTime adesso = DateTime.Now.Floor(TimeSpan.FromSeconds(1)); EventListModel newRec = new EventListModel() { IdxMacchina = idxMacc, InizioStato = adesso, IdxTipo = selEv.IdxEv, CodArticolo = rigaStato.CodArticolo, Value = valData, MatrOpr = 0, pallet = rigaStato.pallet }; // FORZO con metodo TAB await TabDServ.EvListInsert(newRec, tipoInputEvento.barcode); // resetta il microstato in modo da ricevere successive info HW await TabDServ.resetMicrostatoMacchina(idxMacc); } forceResetSel = true; var ListMSE = await MDService.MseGetAll(true); CurrMachSel = new(); await Task.Delay(250); await ReloadData(); forceResetSel = false; CheckSelection(new()); isLoading = false; } } private bool forceResetSel = false; private async Task ReloadData() { CurrMSE = await MDService.MseGetAll(false); SearchFermate = MDService.AnagEventiGeneral(); } #endregion Private Methods } }