Files
2026-02-25 11:27:59 +01:00

329 lines
8.7 KiB
C#

using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using MP.Data.DbModels;
using MP.SPEC.Data;
namespace MP.SPEC.Components.ProdKit
{
public partial class GestKitPodl : ComponentBase, IDisposable
{
#region Public Properties
[Parameter]
public EventCallback<bool> EC_HasOdl { get; set; }
[Parameter]
public EventCallback<bool> EC_ListUpdated { get; set; }
[Parameter]
public List<IstanzeKitModel> IstKitRecords { get; set; } = new List<IstanzeKitModel>();
[Parameter]
public List<PODLExpModel> PodlRecords { get; set; } = new List<PODLExpModel>();
#endregion Public Properties
#region Public Methods
public void Dispose()
{
ListRecordsPODL = null;
GC.Collect();
}
#endregion Public Methods
#region Protected Fields
protected int totalCount = 0;
#endregion Protected Fields
#region Protected Properties
[Inject]
protected IJSRuntime JSRuntime { 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;
ListRecordsPODL = null;
ReloadData();
}
}
}
protected string sParentCss
{
get => string.IsNullOrEmpty(sCodComm) ? "btn-secondary" : "btn-primary";
}
#endregion Protected Properties
#region Protected Methods
protected bool DelEnabled(PODLExpModel reqRec)
{
bool answ = reqRec.IdxOdl == 0;
return answ;
}
/// <summary>
/// Verifica eliminabilit del record: se avviato il PODL non liminabile...
/// </summary>
/// <param name="reqRec"></param>
/// <returns></returns>
protected async Task DoCancel()
{
ReloadData();
await Task.Delay(1);
}
/// <summary>
/// Eliminazione record selezionato (previa conferma)
/// </summary>
/// <param name="selRec"></param>
/// <returns></returns>
protected async Task DoDelete(PODLExpModel selRec)
{
if (!await JSRuntime.InvokeAsync<bool>("confirm", "Eliminazione PODL + Istanze KIT: sei sicuro di voler procedere?"))
return;
// da provare...
var done = MDService.PodlIstKitDelete(selRec.IdxPromessa);
ReloadData();
await EC_ListUpdated.InvokeAsync(true);
}
protected void HideDetail(PODLExpModel reqRec)
{
if (ListPodlExpl2Show.Contains(reqRec.IdxPromessa))
{
ListPodlExpl2Show.Remove(reqRec.IdxPromessa);
}
}
protected override void OnInitialized()
{
numRecord = 5;
// 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);
}
}
protected override void OnParametersSet()
{
ReloadData();
}
protected void ResetParent()
{
SearchComm = "";
ReloadData();
}
protected void SetNumPage(int newNum)
{
currPage = newNum;
}
protected void SetNumRec(int newNum)
{
currPage = 1;
numRecord = newNum;
}
protected void ShowDetail(PODLExpModel reqRec)
{
if (!ListPodlExpl2Show.Contains(reqRec.IdxPromessa))
{
ListPodlExpl2Show.Add(reqRec.IdxPromessa);
}
}
protected async Task toggleClosed()
{
hasOdl = !hasOdl;
await EC_HasOdl.InvokeAsync(hasOdl);
}
protected void UpdateData()
{
ReloadData();
}
#endregion Protected Methods
#region Private Fields
/// <summary>
/// Elenco singoli podl esplosi
/// </summary>
private List<int> ListPodlExpl2Show = new List<int>();
private List<PODLExpModel>? ListRecordsPODL;
private int minChar = 2;
private bool OptAdmKitEnabled = false;
/// <summary>
/// RegExp x SAVE KIT
/// </summary>
private string regExp_KitSave = "#RKE";
/// <summary>
/// RegExp x START KIT
/// </summary>
private string regExp_KitStart = "#RKS";
/// <summary>
/// RegExp x RESET / CANCEL
/// </summary>
private string regExp_KO = "#RKO";
/// <summary>
/// RegExp x CONFERMA
/// </summary>
private string regExp_OK = "#ROK";
/// <summary>
/// mostra tutti i dettagli delle istanze x PODL
/// </summary>
private bool ShowAllDet = false;
#endregion Private Fields
#region Private Properties
private int _currPage { get; set; } = 1;
private int _numRecord { get; set; } = 10;
private string cssDetail
{
get => ShowAllDet ? "btn-secondary" : "btn-primary";
}
private int currPage
{
get => _currPage;
set
{
if (_currPage != value)
{
_currPage = value;
ReloadData();
}
}
}
private bool hasOdl { get; set; } = false;
private string iconDetail
{
get => ShowAllDet ? "fa-chevron-up" : "fa-chevron-down";
}
private bool isLoading { get; set; } = false;
private int numRecord
{
get => _numRecord;
set
{
if (_numRecord != value)
{
_numRecord = value;
ReloadData();
}
}
}
private string sCodComm { get; set; } = "";
private bool ShowCharts { get; set; } = false;
#endregion Private Properties
#region Private Methods
/// <summary>
/// Elenco record dettaglio IK dato IdxPODL
/// </summary>
/// <param name="idxPODL"></param>
/// <returns></returns>
private List<IstanzeKitModel> ListDetIK(int idxPODL)
{
List<IstanzeKitModel> answ = IstKitRecords
.Where(x => x.IdxPodlParent == idxPODL)
.ToList();
return answ;
}
/// <summary>
/// Conteggio record dettaglio IK dato IdxPODL
/// </summary>
/// <param name="idxPODL"></param>
/// <returns></returns>
private int ListDetIKCount(int idxPODL)
{
int answ = IstKitRecords
.Where(x => x.IdxPodlParent == idxPODL)
.Count();
return answ;
}
private void ReloadData()
{
isLoading = true;
// reset preliminare...
ListRecordsPODL = new List<PODLExpModel>();
var filtRecordsPODL = PodlRecords
.Where(x => !string.IsNullOrEmpty(x.KeyRichiesta) && x.KeyRichiesta.StartsWith("KIT"))
.ToList();
ListRecordsPODL = filtRecordsPODL
.Skip(numRecord * (currPage - 1))
.Take(numRecord)
.ToList();
// conto e filtro
totalCount = filtRecordsPODL.Count;
isLoading = false;
}
private void ToggleDetail()
{
ShowAllDet = !ShowAllDet;
// svuoto cmq lista sel singoli...
ListPodlExpl2Show = new List<int>();
}
#endregion Private Methods
}
}