using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static EgwCoreLib.Lux.Core.Enums;
namespace EgwCoreLib.Lux.Data.DbModel
{
//
// This is here so CodeMaid doesn't reorganize this document
//
[Table("Offer")]
public class OfferModel
{
///
/// ID del record
///
[Key]
public int OfferID { get; set; }
///
/// Anno rif offerta
///
public int RefYear { get; set; } = DateTime.Today.Year;
///
/// Numero prog offerta nell'anno (da calcolare)
///
public int RefNum { get; set; } = 0;
///
/// Indice revisione
///
public int RefRev { get; set; } = 1;
///
/// Codice calcolato offerta ANNO.NUMERO.REV
///
[NotMapped]
public string OfferCode
{
get => $"{RefYear:00}.{RefNum:00000}.{RefRev:00}";
}
///
/// Descrizione generale
///
public string Description { get; set; } = "";
///
/// ID Cliente
///
public int CustomerID { get; set; }
///
/// ID Dealer
///
public int DealerID { get; set; }
///
/// Validità offerta
///
public DateTime ValidUntil { get; set; } = DateTime.Now.AddMonths(1);
///
/// DataOra inserimento
///
public DateTime Inserted { get; set; } = DateTime.Now;
///
/// DataOra ultima modifica
///
public DateTime Modified { get; set; } = DateTime.Now;
///
/// Enum stato offerta
///
public OfferStates OffertState { get; set; } = OfferStates.Open;
///
/// Numero Item compresi
///
[NotMapped]
public int NumItems
{
get => OfferRowNav?.Count ?? 0;
}
///
/// Imposto totale offerta
///
[NotMapped]
public double TotalCost
{
get => OfferRowNav?.Sum(x => x.Cost) ?? 0;
}
#if false
///
/// ID Ordine (nullo se non c'è ordine)
///
public int? OrderID { get; set; } = null;
///
/// Navigazione Ordine
///
[ForeignKey("OrderID")]
public virtual OrderModel? OrderNav { get; set; } = null;
#endif
///
/// Navigazione Customer
///
[ForeignKey("CustomerID")]
public virtual CustomerModel CustomerNav { get; set; } = null!;
///
/// Navigazione Dealer
///
[ForeignKey("DealerID")]
public virtual DealerModel DealerNav { get; set; } = null!;
///
/// Navigazione alle righe offerta
///
public virtual ICollection OfferRowNav { get; set; } = new List();
}
}