using EgwCoreLib.Lux.Data.DbModel.Utils; using EgwCoreLib.Lux.Data.Services; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.DataProtection; using Microsoft.JSInterop; using NLog.LayoutRenderers; using System.Threading.Tasks; namespace Lux.UI.Components.Compo { public partial class GenClassMan { #region Public Properties [Parameter] public EventCallback EC_Selected { get; set; } [Parameter] public EventCallback EC_Updated { get; set; } [Parameter] public List ListGenClass { get; set; } = null!; [Parameter] public string SearchVal { get; set; } = ""; #endregion Public Properties #region Protected Fields protected List AllRecords = new List(); protected List ListRecords = new List(); #endregion Protected Fields #region Protected Properties [Inject] protected DataLayerServices DLService { get; set; } = null!; [Inject] protected IJSRuntime JSRuntime { get; set; } = null!; #endregion Protected Properties #region Protected Methods /// /// Genera nuovo record e lo salva /// /// protected async Task DoAdd() { if (NewRecord != null) { // verifico non sia duplicato... var recExist = AllRecords.Count(x => x.ClassCod == NewRecord.ClassCod); if (recExist > 0) { ErrorMsg = $"Errore: record già esistente con codice {NewRecord.ClassCod}"; } else { ErrorMsg = ""; // faccio upsert record... await DLService.GenClassUpsertAsync(NewRecord); // segnalo update x reload await EC_Updated.InvokeAsync(true); NewRecord = null; } } } protected void DoCancel() { ResetEdit(); UpdateTable(); } /// /// Clona record /// /// protected void DoClone(GenClassModel curRec) { } /// /// Eliminazione record /// /// protected async Task DoDelete(GenClassModel selRec) { // controlo che NON abbia child obj... altrimenti esco if (selRec.NumChild > 0) return; if (!await JSRuntime.InvokeAsync("confirm", $"Sicuro di voler eliminare il record? Dettagli: {selRec.ClassCod} | {selRec.Description}")) return; // esegue eliminazione del record... await DLService.GenClassDeleteAsync(selRec); // segnalo update x reload await EC_Updated.InvokeAsync(true); } /// /// Edit articolo selezionato /// /// protected async void DoEdit(GenClassModel curRec) { EditRecord = curRec; SelRecord = curRec; await EC_Selected.InvokeAsync(curRec.ClassCod); } /// /// Reset selezione /// protected async void DoReset() { EditRecord = null; SelRecord = null; await EC_Selected.InvokeAsync(""); } protected async Task DoSave(GenClassModel currRec) { // faccio upsert record... await DLService.GenClassUpsertAsync(currRec); // segnalo update x reload await EC_Updated.InvokeAsync(true); } /// /// Selezione articolo x display info /// /// protected async void DoSelect(GenClassModel curRec) { SelRecord = curRec; await EC_Selected.InvokeAsync(curRec.ClassCod); } protected override void OnParametersSet() { ReloadData(); UpdateTable(); } protected void SaveNumRec(int newNum) { numRecord = newNum; UpdateTable(); } protected void SavePage(int newNum) { currPage = newNum; UpdateTable(); } protected void ToggleAdd() { AddVisible = !AddVisible; NewRecord = new GenClassModel() { ClassCod = "NewClass", Description = $"Descrizione-{DateTime.Now:yyyy.MM.dd-HH.mm.ss}" }; } #endregion Protected Methods #region Private Fields private bool AddVisible = false; private int currPage = 1; private GenClassModel? EditRecord = null; private string ErrorMsg = ""; private bool isLoading = false; private GenClassModel? NewRecord = null; private int numRecord = 10; private GenClassModel? SelRecord = null; private int totalCount = 0; #endregion Private Fields #region Private Methods private string checkSel(GenClassModel curRec) { string answ = ""; if (SelRecord != null) { answ = curRec.ClassCod == SelRecord.ClassCod ? "table-info" : ""; } return answ; } private void ReloadData() { isLoading = true; AllRecords = ListGenClass; // se ho ricerca testuale faccio filtro ulteriore... if (!string.IsNullOrEmpty(SearchVal)) { AllRecords = AllRecords .Where(x => x.ClassCod.Contains(SearchVal, StringComparison.InvariantCultureIgnoreCase) || x.Description.Contains(SearchVal, StringComparison.InvariantCultureIgnoreCase)) .ToList(); } totalCount = AllRecords.Count; } private void ResetEdit() { // reset edit EditRecord = null; ReloadData(); } /// /// Filtro e paginazione /// private void UpdateTable() { // fix paginazione ListRecords = AllRecords .OrderBy(x => x.ClassCod) .Skip(numRecord * (currPage - 1)) .Take(numRecord) .ToList(); isLoading = false; } #endregion Private Methods } }