using EgwCoreLib.Razor; namespace Lux.UI.Components.Compo.JobTask { public partial class JobTaskListMan { #region Public Properties [Parameter] public List CostDriverLists { get; set; } = new List(); [Parameter] public List CurrRecords { get; set; } = null!; [Parameter] public string CurrSearch { get; set; } = string.Empty; [Parameter] public EventCallback EC_Selected { get; set; } [Parameter] public EventCallback EC_Updated { get; set; } [Parameter] public List ListAllTags { get; set; } = new List(); [Parameter] public List ResourceLists { get; set; } = new List(); #endregion Public Properties #region Protected Methods protected override void OnParametersSet() { ReloadData(); } #endregion Protected Methods #region Private Fields private bool addVisible = false; private int currPage = 1; private JobTaskModel? editRecord = null; private string errorMsg = ""; private List FiltRecords = new List(); private bool isLoading = false; private List ListRecords = new List(); private JobTaskModel? newRecord = null; private int numRecord = 10; private JobTaskModel? selRecord = null; private int totalCount = 0; private BootstrapModal Modal = new(); private string mTitle = ""; private string mMessage = ""; private BootstrapModal.ModalMode mMode = BootstrapModal.ModalMode.ND; private Dictionary modalOpt = new Dictionary(); #endregion Private Fields #region Private Properties [Inject] private IDataLayerServices DLService { get; set; } = null!; [Inject] private IJSRuntime JSRuntime { get; set; } = null!; [Inject] private IJobTaskService JTService { get; set; } = null!; private List ListCostDrivers { get => CostDriverLists .Select(x => x.Name) .Distinct() .ToList(); } #endregion Private Properties #region Private Methods /// /// Check selezione riga item /// /// /// private string checkSel(JobTaskModel curRec) { string answ = ""; if (selRecord != null) { answ = curRec.JobID == selRecord.JobID ? "table-info" : ""; } return answ; } /// /// Eliminazione record /// /// private async Task DoDelete(JobTaskModel rec2del) { // controlo che NON abbia child obj... altrimenti esco if (rec2del.NumChild > 0) return; mTitle = "Attenzione"; mMessage = $"Sicuro di voler eliminare il record? {rec2del.Description} ({rec2del.JobID})"; mMode = BootstrapModal.ModalMode.Confirm; modalOpt = new(); modalOpt.Add(true, "Si"); modalOpt.Add(false, "No"); if (!await Modal!.ShowAsync()) return; // esegue eliminazione del record... await JTService.DeleteAsync(rec2del); // segnalo update x reload await EC_Updated.InvokeAsync(true); // rileggo ReloadData(); } /// /// Edit articolo selezionato /// /// private Task DoEdit(JobTaskModel curRec) { editRecord = curRec; //selRecord = curRec; return Task.Delay(1); } /// /// Save articolo selezionato /// /// private async Task DoSave(JobTaskModel curRec) { var item = CurrRecords.Where(x => x.JobID == curRec.JobID).FirstOrDefault(); if(item != null) { item = curRec; } await JTService.UpsertAsync(curRec); await EC_Selected.InvokeAsync(null); await EC_Updated.InvokeAsync(true); } /// /// Annulla modifica articolo selezionato /// /// private async Task DoCancel() { await EC_Selected.InvokeAsync(null); await EC_Updated.InvokeAsync(true); } /// /// Reset selezione /// private async Task DoReset() { editRecord = null; selRecord = null; await EC_Selected.InvokeAsync(null); await EC_Updated.InvokeAsync(true); } /// /// Update record x elenco tags /// /// /// private async Task DoSaveTags(TagDisplay.SavePayload args) { // chiamo update await JTService.MergeTagsAsync(args.Id, args.Tags); await EC_Updated.InvokeAsync(true); } /// /// Selezione articolo x display info /// /// private Task DoSelect(JobTaskModel curRec) { selRecord = curRec; return EC_Selected.InvokeAsync(curRec); } /// /// Restituice elenco CostDrivers per il record (con cache...) /// /// /// private List ListDriversName(JobTaskModel curRec) { List result = new List(); if (CostDriverLists != null && ResourceLists != null) { // faccio distinct delle risorse... List distResource = ResourceLists .Where(x => curRec.ResourcesList.Contains(x.ResourceID)) .Distinct() .ToList(); var listCostId = distResource .Select(x => x.CostDriverID) .Distinct() .ToList(); // ora recupero elenco cost drivers... var distCostDrv = CostDriverLists .Where(x => listCostId.Contains(x.CostDriverID)) .Distinct() .ToList(); // proiezione! result = distCostDrv.Select(x => x.Name).ToList(); // salvo in dizionario } return result; } /// /// Esegue spostamento /// /// /// /// private async Task MoveRec(JobTaskModel curRec, bool moveUp) { await JTService.MoveAsync(curRec, moveUp); await EC_Updated.InvokeAsync(true); } /// /// Ricarica i dati /// private void ReloadData() { isLoading = true; // se ho ricerca testuale faccio filtro ulteriore... if (!string.IsNullOrEmpty(CurrSearch)) { FiltRecords = CurrRecords .Where(x => x.Description.Contains(CurrSearch, StringComparison.InvariantCultureIgnoreCase)) .ToList(); } else { FiltRecords = CurrRecords; } totalCount = FiltRecords.Count; // fix paginazione ListRecords = CurrRecords .OrderBy(x => x.Index) .Skip(numRecord * (currPage - 1)) .Take(numRecord) .ToList(); isLoading = false; } #endregion Private Methods } }