233 lines
6.5 KiB
C#
233 lines
6.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 degli ordini commerciali
|
|
/// </summary>
|
|
[Table("sales_order")]
|
|
public class OrderModel
|
|
{
|
|
/// <summary>
|
|
/// ID del record
|
|
/// </summary>
|
|
[Key]
|
|
public int OrderID { get; set; }
|
|
|
|
/// <summary>
|
|
/// Environment della richiesta
|
|
/// </summary>
|
|
public EgwMultiEngineManager.Data.Constants.EXECENVIRONMENTS Envir { get; set; } = EgwMultiEngineManager.Data.Constants.EXECENVIRONMENTS.WINDOW;
|
|
|
|
/// <summary>
|
|
/// Offerta correlata
|
|
/// </summary>
|
|
public int OfferID { get; set; }
|
|
|
|
/// <summary>
|
|
/// Anno rif Ordine
|
|
/// </summary>
|
|
public int RefYear { get; set; } = DateTime.Today.Year;
|
|
|
|
/// <summary>
|
|
/// Numero prog Ordine nell'anno (da calcolare)
|
|
/// </summary>
|
|
public int RefNum { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// Indice revisione
|
|
/// </summary>
|
|
public int RefRev { get; set; } = 1;
|
|
|
|
/// <summary>
|
|
/// Codice calcolato Ordine ANNO.NUMERO.REV
|
|
/// </summary>
|
|
[NotMapped]
|
|
public string OrderCode
|
|
{
|
|
get => $"PO.{RefYear:00}.{RefNum:00000}.{RefRev:00}";
|
|
}
|
|
|
|
/// <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>
|
|
/// Validità Ordine
|
|
/// </summary>
|
|
public DateTime ValidUntil { get; set; } = DateTime.Now.AddMonths(1);
|
|
|
|
/// <summary>
|
|
/// DataOra inserimento
|
|
/// </summary>
|
|
public DateTime Inserted { get; set; } = DateTime.Now;
|
|
|
|
/// <summary>
|
|
/// DataOra ultima modifica
|
|
/// </summary>
|
|
public DateTime Modified { get; set; } = DateTime.Now;
|
|
|
|
/// <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>
|
|
/// Valore serializzato info sui RawItem (es: lungh barra / qty barre)
|
|
/// </summary>
|
|
public string RawItemData { get; set; } = "";
|
|
|
|
/// <summary>
|
|
/// Enum stato Ordine
|
|
/// </summary>
|
|
public OrderStates OrderState { get; set; } = OrderStates.Created;
|
|
|
|
/// <summary>
|
|
/// Sconto applicato (deve essere < del MAX)
|
|
/// </summary>
|
|
public double Discount { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// History associata (tipicamente richieste batch lunghe come stima/prod...)
|
|
/// </summary>
|
|
public string RawHistory { get; set; } = "";
|
|
|
|
[NotMapped]
|
|
public List<TaskHistDTO> LogHistory
|
|
{
|
|
get
|
|
{
|
|
List<TaskHistDTO> currHist = new List<TaskHistDTO>();
|
|
if (!string.IsNullOrEmpty(RawHistory))
|
|
{
|
|
try
|
|
{
|
|
currHist = JsonConvert.DeserializeObject<List<TaskHistDTO>>(RawHistory) ?? new List<TaskHistDTO>();
|
|
}
|
|
catch
|
|
{ }
|
|
}
|
|
return currHist;
|
|
}
|
|
set
|
|
{
|
|
RawHistory = JsonConvert.SerializeObject(value);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Numero Item compresi
|
|
/// </summary>
|
|
[NotMapped]
|
|
public double NumItems
|
|
{
|
|
get => OrderRowNav?.Sum(x => x.Qty) ?? 0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Numero ProdItem compresi
|
|
/// </summary>
|
|
[NotMapped]
|
|
public double NumProdItems
|
|
{
|
|
get => OrderRowNav?.Sum(x => x.ProdItemQtyTot) ?? 0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Numero Item compresi
|
|
/// </summary>
|
|
[NotMapped]
|
|
public int NumRows
|
|
{
|
|
get => OrderRowNav?.Count ?? 0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Costo totale offerta (rock bottom)
|
|
/// </summary>
|
|
[NotMapped]
|
|
public double TotalCost
|
|
{
|
|
get => OrderRowNav?.Sum(x => x.TotalCost) ?? 0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Prezzo totale offerta (compreso di amrginalità)
|
|
/// </summary>
|
|
[NotMapped]
|
|
public double TotalPrice
|
|
{
|
|
get => OrderRowNav?.Sum(x => x.TotalPrice) ?? 0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Sconto massimo applicabile
|
|
/// </summary>
|
|
[NotMapped]
|
|
public double MaxDiscount
|
|
{
|
|
get => (TotalCost > 0 && TotalPrice > TotalCost) ? (TotalPrice - TotalCost) / TotalPrice : 0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Verifica se ci siano TUTTE le righe coperte da Fabbisogni (con o senza ordine...)
|
|
/// </summary>
|
|
[NotMapped]
|
|
public bool AllRowsWithReq
|
|
{
|
|
get => OrderRowNav != null && !OrderRowNav.Any(x => x.MatReqNav.Count == 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 Ordine
|
|
/// </summary>
|
|
[ForeignKey("OfferID")]
|
|
public virtual OfferModel OfferNav { get; set; } = null!;
|
|
|
|
/// <summary>
|
|
/// Navigazione alle righe ordine
|
|
/// </summary>
|
|
public virtual ICollection<OrderRowModel> OrderRowNav { get; set; } = new List<OrderRowModel>();
|
|
|
|
}
|
|
}
|