using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace Yavsc.Models.Billing { using Newtonsoft.Json; using Workflow; using Yavsc.Models.Payment; using Yavsc; using Yavsc.Billing; using Yavsc.Workflow; public abstract class NominativeServiceCommand : IBaseTrackedEntity, IQuery, IIdentified { public string GetInvoiceId() { return GetType().Name + "/" + Id; } public abstract long Id { get; set; } public abstract string GetDescription (); [Required()] public bool Consent { get; set; } public DateTime DateCreated { get; set; } public DateTime DateModified { get; set; } public string UserCreated { get; set; } public string UserModified { get; set; } [DisplayAttribute(Name="Status de la requête")] public QueryStatus Status { get; set; } [Required] public string ClientId { get; set; } /// /// The client /// [ForeignKey("ClientId"),Display(Name="Client")] public ApplicationUser Client { get; set; } [Required] public string PerformerId { get; set; } /// /// The performer identifier /// [ForeignKey("PerformerId"),Display(Name="Préstataire")] public PerformerProfile PerformerProfile { get; set; } public DateTime? ValidationDate {get; set;} [Display(Name="Montant prévisionel de la préstation")] public decimal? Previsional { get; set; } /// /// The bill /// /// [Required] public string ActivityCode { get; set; } [ForeignKey("ActivityCode"),JsonIgnore,Display(Name="Domaine d'activité")] public virtual Activity Context  { get; set ; } public abstract System.Collections.Generic.List GetBillItems(); public bool GetIsAcquitted() { return Regularisation?.IsOk() ?? false; } public string GetFileBaseName() { string type = GetType().Name; string ack = GetIsAcquitted() ? "-ack" : null; var bcode = Startup.BillingMap[type]; return $"facture-{bcode}-{Id}{ack}"; } public string PaymentId { get; set; } [ForeignKey("PaymentId"), Display(Name = "Acquittement de la facture")] public virtual PayPalPayment Regularisation { get; set; } } }