using EgwCoreLib.Lux.Core; using EgwCoreLib.Lux.Core.Generic; using EgwCoreLib.Lux.Data.DbModel.Sales; using EgwCoreLib.Lux.Data.Services; using EgwCoreLib.Lux.Data.Services.Sales; using Microsoft.AspNetCore.Components; namespace Lux.UI.Components.Compo { /// /// Componente per la gestione delle offerte. /// public partial class OfferMan { #region Public Properties /// /// Modello dell'offerta corrente (bindato dal genitore). /// [Parameter] public OfferModel CurrRecord { get; set; } = null!; /// /// Evento che indica variazione rispetto ai dati originali /// [Parameter] public EventCallback EC_Changed { get; set; } /// /// Callback invocato a richiesta cancel editing della finestra /// [Parameter] public EventCallback EC_Cancel { get; set; } /// /// Callback invocato alla richiesta di salvataggio con l'offerta aggiornata. /// [Parameter] public EventCallback EC_Updated { get; set; } #endregion Public Properties #region Protected Methods /// /// Chiamato automaticamente all'inizializzazione del componente. /// protected override async Task OnInitializedAsync() { setOriginal(); await ReloadData(); await base.OnInitializedAsync(); } protected override void OnParametersSet() { setOriginal(); } #endregion Protected Methods #region Private Fields /// /// Lista di tutti i clienti caricati. /// private List CustomersList = new List(); private List DealersList = new List(); private OfferModel? OrigRecord = null; #endregion Private Fields #region Private Properties [Inject] private ICustomerService CService { get; set; } = null!; /// /// Servizi di accesso ai dati iniettati dal framework. /// [Inject] private DataLayerServices DLService { get; set; } = null!; [Inject] private IDealerService DService { get; set; } = null!; #endregion Private Properties #region Private Methods private Task DoCancel() { return EC_Cancel.InvokeAsync(true); } private Task DoSave() { // richiesta update con salvataggio record return EC_Updated.InvokeAsync(CurrRecord); } private bool HasChanged() { bool answ = false; if (OrigRecord != null && CurrRecord != null) { if (IsChanged(OrigRecord.CustomerID, CurrRecord.CustomerID)) return true; if (IsChanged(OrigRecord.DealerID, CurrRecord.DealerID)) return true; if (IsChanged(OrigRecord.OffertState, CurrRecord.OffertState)) return true; if (IsChanged(OrigRecord.Inserted, CurrRecord.Inserted)) return true; if (IsChanged(OrigRecord.ValidUntil, CurrRecord.ValidUntil)) return true; if (IsChanged(OrigRecord.Description, CurrRecord.Description)) return true; } return answ; } /// /// Verifica variazione tramite helper /// /// /// /// /// private bool IsChanged(T original, T edited) => CloneExtensions.IsChanged(original, edited); private async Task ReloadData() { CustomersList = await CService.GetAllAsync(); DealersList = await DService.GetAllAsync(); } private void setOriginal() { if (CurrRecord != null && OrigRecord == null) { OrigRecord = CurrRecord.DeepClone(); } } #endregion Private Methods } }