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
}
}