From 91959913a814f5f6c6ae16445b64683297aa92ee Mon Sep 17 00:00:00 2001 From: DeepnaPooja Date: Wed, 21 Oct 2026 12:44:58 +0530 Subject: [PATCH] feat: add invoice versioning models and enums --- Distribution/Models/Enums.cs | 1 + Distribution/Models/Invoice.cs | 1 + Distribution/Models/InvoiceItem.cs | 23 +++++++++++++++++++++++ Distribution/Models/InvoiceVersion.cs | 19 +++++++++++++++++++ Distribution/Models/InvoiceVersionItem.cs | 23 +++++++++++++++++++++++ 5 files changed, 67 insertions(+) create mode 100644 Distribution/Models/InvoiceItem.cs create mode 100644 Distribution/Models/InvoiceVersion.cs create mode 100644 Distribution/Models/InvoiceVersionItem.cs 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; } + } +}