diff --git a/Distribution/Models/Enums.cs b/Distribution/Models/Enums.cs index 1e799d1..680a7a8 100644 --- a/Distribution/Models/Enums.cs +++ b/Distribution/Models/Enums.cs @@ -18,6 +18,7 @@ namespace Distribution.Models public enum ShopPOStatus { Pending, PartiallyFulfilled, Fulfilled, Cancelled } public enum InvoiceStatus { Draft, Printed, Finalized } + public enum InvoiceVersionStage { Created, DraftEdited, Printed, Finalized } public enum PaymentStatus { Pending, PartiallyPaid, Paid } diff --git a/Distribution/Models/Invoice.cs b/Distribution/Models/Invoice.cs index dc60e80..c2a71f2 100644 --- a/Distribution/Models/Invoice.cs +++ b/Distribution/Models/Invoice.cs @@ -21,6 +21,7 @@ namespace Distribution.Models public decimal TotalAmount { get; set; } + public ICollection Items { get; set; } = new List(); public ICollection Payments { get; set; } = new List(); } } diff --git a/Distribution/Models/InvoiceItem.cs b/Distribution/Models/InvoiceItem.cs new file mode 100644 index 0000000..b56f15f --- /dev/null +++ b/Distribution/Models/InvoiceItem.cs @@ -0,0 +1,23 @@ +using System.ComponentModel.DataAnnotations.Schema; + +namespace Distribution.Models +{ + public class InvoiceItem : Template + { + public Guid FK_InvoiceId { get; set; } + [ForeignKey("FK_InvoiceId")] + public Invoice Invoice { get; set; } + + public Guid? FK_ShopPOItemId { get; set; } + [ForeignKey("FK_ShopPOItemId")] + public ShopPOItem? ShopPOItem { get; set; } + + public Guid FK_ItemId { get; set; } + [ForeignKey("FK_ItemId")] + public Item Item { get; set; } + + public int Quantity { get; set; } + public decimal UnitPrice { get; set; } + public bool IsRemoved { get; set; } + } +} diff --git a/Distribution/Models/InvoiceVersion.cs b/Distribution/Models/InvoiceVersion.cs new file mode 100644 index 0000000..8edd43f --- /dev/null +++ b/Distribution/Models/InvoiceVersion.cs @@ -0,0 +1,19 @@ +using System.ComponentModel.DataAnnotations.Schema; + +namespace Distribution.Models +{ + // Immutable snapshot of an invoice's lines at a point in its lifecycle. + public class InvoiceVersion : Template + { + public Guid FK_InvoiceId { get; set; } + [ForeignKey("FK_InvoiceId")] + public Invoice Invoice { get; set; } + + public int VersionNumber { get; set; } + public InvoiceVersionStage Stage { get; set; } + public decimal TotalAmount { get; set; } + public Guid CreatedBy { get; set; } + + public ICollection Items { get; set; } = new List(); + } +} diff --git a/Distribution/Models/InvoiceVersionItem.cs b/Distribution/Models/InvoiceVersionItem.cs new file mode 100644 index 0000000..a94b311 --- /dev/null +++ b/Distribution/Models/InvoiceVersionItem.cs @@ -0,0 +1,23 @@ +using System.ComponentModel.DataAnnotations.Schema; + +namespace Distribution.Models +{ + public class InvoiceVersionItem : Template + { + public Guid FK_InvoiceVersionId { get; set; } + [ForeignKey("FK_InvoiceVersionId")] + public InvoiceVersion InvoiceVersion { get; set; } + + public Guid? FK_ShopPOItemId { get; set; } + [ForeignKey("FK_ShopPOItemId")] + public ShopPOItem? ShopPOItem { get; set; } + + public Guid FK_ItemId { get; set; } + [ForeignKey("FK_ItemId")] + public Item Item { get; set; } + + public int Quantity { get; set; } + public decimal UnitPrice { get; set; } + public bool IsRemoved { get; set; } + } +}