using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.JSInterop; using MP.Data.DbModels; using MP.Data.Services; using MP.SPEC.Components; using MP.SPEC.Data; using NLog.Layouts; using System.Reflection.PortableExecutable; namespace MP.SPEC.Pages { public partial class Podl2Kit : ComponentBase, IDisposable { #region Public Methods public void Dispose() { EditRecord = null; SearchRecords = null; ListRecords = null; GC.Collect(); } #endregion Public Methods #region Protected Fields protected int kitCount = 0; protected int totalCount = 0; #endregion Protected Fields #region Protected Properties [Inject] protected IJSRuntime JSRuntime { get; set; } = null!; #if false [Inject] protected ILocalStorageService localStorage { get; set; } = null!; #endif [Inject] protected ILocalStorageService localStorage { get; set; } = null!; [Inject] protected MpDataService MDService { get; set; } = null!; [Inject] protected NavigationManager NavManager { get; set; } = null!; protected string SearchComm { get => sCodComm; set { if (sCodComm != value) { sCodComm = value; currPage = 1; ListRecords = null; ReloadData(); } } } protected string sParentCss { get => string.IsNullOrEmpty(sCodComm) ? "btn-secondary" : "btn-primary"; } #endregion Protected Properties #region Protected Methods protected string checkSelect(IstanzeKitModel currRec) { string answ = ""; if (EditRecord != null) { try { answ = (EditRecord.KeyKit == currRec.KeyKit && EditRecord.KeyExtOrd == currRec.KeyExtOrd) ? "table-info" : ""; } catch { } } return answ; } protected bool DelEnabled(IstanzeKitModel reqRec) { bool answ = false; return answ; } /// /// Apre procedura creazione nuova istanza KIT /// /// protected async Task DoAddNew() { doAddNew = !doAddNew; // se sto chiudendo --> levo filtri! if (!doAddNew) { setBaseFilt(); } await Task.Delay(1); } /// /// Verifica eliminabilità del record: se è avviato il PODL non è liminabile... /// /// /// protected async Task DoCancel() { EditRecord = null; ReloadData(); await Task.Delay(1); } /// /// Eliminazione record selezionato (previa conferma) /// /// /// protected async Task DoDelete(IstanzeKitModel selRec) { if (!await JSRuntime.InvokeAsync("confirm", "Eliminazione riga Istanza KIT: sei sicuro di voler procedere?")) return; await Task.Delay(1); var done = await MDService.IstKitDelete(selRec); EditRecord = null; ReloadData(); await Task.Delay(1); } protected async Task DoUpdate(IstanzeKitModel selRec) { if (!await JSRuntime.InvokeAsync("confirm", "Confermi di voler salvare le modifiche?")) return; await Task.Delay(1); var done = await MDService.IstKitUpsert(selRec); EditRecord = null; ReloadData(); await Task.Delay(1); } protected override void OnInitialized() { numRecord = 10; // gestione di base dei KIT string rawVal = MDService.ConfigTryGet("OptAdmKitEnabled"); if (!string.IsNullOrEmpty(rawVal)) { bool.TryParse(rawVal, out OptAdmKitEnabled); } // conf variabili decodifica regExp_KO = MDService.ConfigTryGet("regExp_KO"); regExp_OK = MDService.ConfigTryGet("regExp_OK"); regExp_KitStart = MDService.ConfigTryGet("regExp_KitStart"); regExp_KitSave = MDService.ConfigTryGet("regExp_KitSave"); // altre variabili rawVal = MDService.ConfigTryGet("SPEC_nArtSearch"); if (!string.IsNullOrEmpty(rawVal)) { int.TryParse(rawVal, out minChar); } setBaseFilt(); } protected override void OnParametersSet() { ReloadData(); } protected void ResetData() { EditRecord = null; } protected void resetMacchina() { idxMaccSel = "*"; } protected void ResetParent() { SearchComm = ""; ReloadData(); } protected void resetReparto() { repartoSel = "*"; } protected void ResetSel() { EditRecord = null; } protected void SelRecord(IstanzeKitModel selRec) { EditRecord = selRec; } protected void SetComposing(bool newState) { isComposing = newState; } protected void SetNumPage(int newNum) { currPage = newNum; } protected void SetNumRec(int newNum) { currPage = 1; numRecord = newNum; } protected void UpdateData() { EditRecord = null; ReloadData(); } #endregion Protected Methods #region Private Fields private bool doAddNew = false; /// /// Boolear controllo visualizzazione ricerca articoli /// private bool doSearchArt = false; private IstanzeKitModel? EditRecord = null; private bool isComposing = false; private List ListGruppiFase = new List(); private List ListMacchine = new List(); private List? ListRecords; private List? ListStati; private int minChar = 2; private bool OptAdmKitEnabled = false; /// /// RegExp x SAVE KIT /// private string regExp_KitSave = "#RKE"; /// /// RegExp x START KIT /// private string regExp_KitStart = "#RKS"; /// /// RegExp x RESET / CANCEL /// private string regExp_KO = "#RKO"; /// /// RegExp x CONFERMA /// private string regExp_OK = "#ROK"; private List? SearchRecords; #endregion Private Fields #region Private Properties private int _currPage { get; set; } = 1; private int _numRecord { get; set; } = 10; private string addNewBtnCss { get => doAddNew ? (isComposing ? "btn-secondary disabled" : "btn-secondary") : "btn-primary"; } private string addNewBtnText { get => doAddNew ? (isComposing ? "Completare o Resettare" : "Chiudi Composizione KIT") : "Composizione Nuovo KIT"; } private SelectXdlParams currFilter { get; set; } = new SelectXdlParams(); private int currPage { get => _currPage; set { if (_currPage != value) { _currPage = value; ReloadData(); } } } private bool filtActive { get => idxMaccSel != "*" || repartoSel != "*"; } private string iconDetail { get => doAddNew ? "fa-chevron-up" : "fa-chevron-down"; } private string idxMaccSel { get => currFilter.IdxMacchina; set => currFilter.IdxMacchina = value; } private bool isLoading { get; set; } = false; private int numRecord { get => _numRecord; set { if (_numRecord != value) { _numRecord = value; ReloadData(); } } } private string repartoSel { get => currFilter.CodReparto; set => currFilter.CodReparto = value; } private string sCodComm { get; set; } = ""; #endregion Private Properties #region Private Methods private void ReloadData() { isLoading = true; // leggo dati x filtro var allGruppiData = MDService.ElencoGruppiFase(); if (allGruppiData != null) { ListGruppiFase = allGruppiData.Where(x => x.SelEnabled).ToList(); } ListMacchine = MDService.MacchineGetFilt(repartoSel); SearchRecords = MDService.IstKitFilt("", ""); totalCount = SearchRecords.Count; // conto i kit = distinct... kitCount = SearchRecords.GroupBy(x => x.CodArtParent).Count(); ListRecords = SearchRecords .Skip(numRecord * (currPage - 1)) .Take(numRecord) .ToList(); isLoading = false; } /// /// Toggle modale ricerca articoli /// private void SearchArtToggle() { doSearchArt = !doSearchArt; } private void setBaseFilt() { // filtro base... DateTime oggi = DateTime.Today; currFilter = new SelectXdlParams() { DtEnd = oggi.AddDays(1), DtStart = oggi.AddYears(-1), HasOdl = false, MaxRecord = 1000, NumRec = 5, IdxMacchina = "*", CodReparto = "*" }; } /// /// Salva selezione articolo /// /// private void SetCodArtChild(string codArt) { if (EditRecord != null) { EditRecord.CodArtChild = codArt; doSearchArt = false; } } private async Task UpdateFilter(SelectXdlParams newParams) { isLoading = true; currPage = 1; // salvo filtro reparto x utente... spostare in componente? await localStorage.SetItemAsync("reparto", repartoSel); ReloadData(); currFilter = newParams; isLoading = false; } #endregion Private Methods } }