Files
lux/EgwCoreLib.Lux.Data/DbModel/Sales/OfferModel.cs
T

201 lines
5.5 KiB
C#

// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace EgwCoreLib.Lux.Data.DbModel.Sales
{
/// <summary>
/// Classe delle offerte commerciali
/// </summary>
[Table("sales_offer")]
public class OfferModel
{
/// <summary>
/// ID del record
/// </summary>
[Key]
public int OfferID { get; set; }
/// <summary>
/// Environment della richiesta
/// </summary>
public EgwMultiEngineManager.Data.Constants.EXECENVIRONMENTS Envir { get; set; } = EgwMultiEngineManager.Data.Constants.EXECENVIRONMENTS.WINDOW;
/// <summary>
/// Anno rif offerta
/// </summary>
public int RefYear { get; set; } = DateTime.Today.Year;
/// <summary>
/// Numero prog offerta nell'anno (da calcolare)
/// </summary>
public int RefNum { get; set; } = 0;
/// <summary>
/// Indice revisione
/// </summary>
public int RefRev { get; set; } = 1;
/// <summary>
/// Codice calcolato offerta ANNO.NUMERO.REV
/// inizia per SO = SalesOffer
/// </summary>
[NotMapped]
public string OfferCode
{
get => $"SO.{RefYear:00}.{RefNum:000000}.{RefRev:000}";
}
/// <summary>
/// Descrizione generale
/// </summary>
public string Description { get; set; } = "";
/// <summary>
/// ID Cliente
/// </summary>
public int CustomerID { get; set; }
/// <summary>
/// ID Dealer
/// </summary>
public int DealerID { get; set; }
/// <summary>
/// Dizionario serializzato delle preselezioni (opzionale)
/// </summary>
public string DictPresel { get; set; } = "";
/// <summary>
/// Dizionario valorizzato dei parametri attivi
/// </summary>
[NotMapped]
public Dictionary<string, string> DictParameter
{
get
{
Dictionary<string, string> answ = new();
if (!string.IsNullOrEmpty(DictPresel))
{
answ = JsonConvert.DeserializeObject<Dictionary<string, string>>(DictPresel) ?? new Dictionary<string, string>();
}
return answ;
}
//set
//{
// DictPresel = JsonConvert.SerializeObject(value);
//}
}
/// <summary>
/// Validità Offerta
/// </summary>
public DateTime ValidUntil { get; set; } = DateTime.Now.AddMonths(1);
/// <summary>
/// DataOra inserimento
/// </summary>
public DateTime Inserted { get; set; }
/// <summary>
/// DataOra ultima modifica
/// </summary>
public DateTime Modified { get; set; }
/// <summary>
/// DataOra richiesta per il completamento dell'ordine
/// </summary>
public DateTime DueDateReq { get; set; } = DateTime.Today.AddDays(30);
/// <summary>
/// DataOra promessa per il completamento dell'ordine
/// </summary>
public DateTime DueDateProm { get; set; } = DateTime.Today.AddDays(60);
/// <summary>
/// note di consegna (opzionali)
/// </summary>
public string ConsNote { get; set; } = "";
/// <summary>
/// Enum stato offerta
/// </summary>
public OfferStates OffertState { get; set; } = OfferStates.Open;
/// <summary>
/// Sconto applicato (deve essere < del MAX)
/// </summary>
public double Discount { get; set; } = 0;
/// <summary>
/// Numero Item compresi
/// </summary>
[NotMapped]
public double NumItems
{
get => OfferRowNav?.Sum(x => x.Qty) ?? 0;
}
/// <summary>
/// Numero ProdItem compresi
/// </summary>
[NotMapped]
public double NumProdItems
{
get => OfferRowNav?.Sum(x => x.ProdItemQtyTot) ?? 0;
}
/// <summary>
/// Numero Item compresi
/// </summary>
[NotMapped]
public int NumRows
{
get => OfferRowNav?.Count ?? 0;
}
/// <summary>
/// Costo totale offerta (rock bottom)
/// </summary>
[NotMapped]
public double TotalCost
{
get => OfferRowNav?.Sum(x => x.TotalCost) ?? 0;
}
/// <summary>
/// Prezzo totale offerta (compreso di amrginalità)
/// </summary>
[NotMapped]
public double TotalPrice
{
get => OfferRowNav?.Sum(x => x.TotalPrice) ?? 0;
}
/// <summary>
/// Sconto massimo applicabile
/// </summary>
[NotMapped]
public double MaxDiscount
{
get => (TotalCost > 0 && TotalPrice > TotalCost) ? (TotalPrice - TotalCost) / TotalPrice : 0;
}
/// <summary>
/// Navigazione Customer
/// </summary>
[ForeignKey("CustomerID")]
public virtual CustomerModel CustomerNav { get; set; } = null!;
/// <summary>
/// Navigazione Dealer
/// </summary>
[ForeignKey("DealerID")]
public virtual DealerModel DealerNav { get; set; } = null!;
/// <summary>
/// Navigazione alle righe offerta
/// </summary>
public virtual ICollection<OfferRowModel> OfferRowNav { get; set; } = new List<OfferRowModel>();
}
}