Add returns and claims

This commit is contained in:
2026-08-25 14:47:51 +05:30
parent aa543d0d0d
commit f244a04dc0
29 changed files with 6770 additions and 34 deletions
+21
View File
@@ -0,0 +1,21 @@
using System.ComponentModel.DataAnnotations.Schema;
namespace Distribution.Models
{
public class Claim : Template
{
/// <summary>User holding the RegionalAgency role that this claim is raised against.</summary>
public Guid FK_AgencyUserId { get; set; }
[ForeignKey("FK_AgencyUserId")]
public User AgencyUser { get; set; }
public string Details { get; set; }
public ClaimStatus Status { get; set; } = ClaimStatus.Open;
public decimal? SettlementAmount { get; set; }
public Guid? SettledByUserId { get; set; }
[ForeignKey("SettledByUserId")]
public User? SettledByUser { get; set; }
public DateTime? SettledAt { get; set; }
}
}
+15
View File
@@ -0,0 +1,15 @@
using System.ComponentModel.DataAnnotations.Schema;
namespace Distribution.Models
{
/// <summary>Audit record of the credit amount netted off an order by a CreditDeduction-mode SaleReturn.</summary>
public class CreditNote : Template
{
public Guid FK_SaleReturnId { get; set; }
[ForeignKey("FK_SaleReturnId")]
public SaleReturn SaleReturn { get; set; }
public decimal Amount { get; set; }
public DateTime IssuedAt { get; set; } = DateTime.Now;
}
}
+17 -34
View File
@@ -1,37 +1,13 @@
namespace Distribution.Models
{
public enum LocationType
{
Warehouse,
Vehicle
}
{ Warehouse, Vehicle }
public enum KycStatus
{
Pending,
Verified,
Rejected }
public enum KycStatus { Pending,Verified, Rejected }
public enum MovementType
{
Sale,
CustomerReturn,
Transfer,
Damage,
Adjustment,
Load,
PurchaseReceipt,
PurchaseReturn
}
public enum MovementType { Sale, CustomerReturn, Transfer, Damage, Adjustment, Load, PurchaseReceipt, PurchaseReturn }
public enum LoadingSheetStatus
{
Pending,
DispatchConfirmed,
ReceiptConfirmed,
DiscrepancyFlagged,
Resolved
}
public enum LoadingSheetStatus { Pending, DispatchConfirmed, ReceiptConfirmed, DiscrepancyFlagged, Resolved }
public enum RideType { Delivery, Sale }
@@ -52,10 +28,17 @@ namespace Distribution.Models
public enum PaymentMethod { Cash, Credit }
public enum DeliveryTaskStatus
{
Pending,
Delivered,
PartiallyDelivered,
Failed
}
{ Pending, Delivered, PartiallyDelivered, Failed}
public enum ReturnMode { CreditDeduction, ItemExchange }
public enum ReturnReasonCode { Expired, Damaged, OrderError, Other }
public enum ClaimStatus { Open, Settled }
public enum SupplierClaimStatus { Open, Approved, Rejected }
public enum SupplierClaimIssueType { Damaged, Short, Expired, WrongItem, Other }
public enum SupplierClaimResolutionType { Replacement, Credit, Refund, PriceAdjustment }
}
+26
View File
@@ -0,0 +1,26 @@
using System.ComponentModel.DataAnnotations.Schema;
namespace Distribution.Models
{
/// <summary>
/// A return recorded by a sales rep against an open Order during the same store visit.
/// Settled immediately on creation — no supervisor approval step.
/// </summary>
public class SaleReturn : Template
{
public Guid FK_OrderId { get; set; }
[ForeignKey("FK_OrderId")]
public Order Order { get; set; }
public ReturnMode Mode { get; set; }
/// <summary>Amount netted off the order's TotalAmount. Zero for ItemExchange mode.</summary>
public decimal TotalCreditAmount { get; set; }
public Guid CreatedByUserId { get; set; }
[ForeignKey("CreatedByUserId")]
public User CreatedByUser { get; set; }
public ICollection<SaleReturnItem> Items { get; set; } = [];
}
}
+21
View File
@@ -0,0 +1,21 @@
using System.ComponentModel.DataAnnotations.Schema;
namespace Distribution.Models
{
public class SaleReturnItem : Template
{
public Guid FK_SaleReturnId { get; set; }
[ForeignKey("FK_SaleReturnId")]
public SaleReturn SaleReturn { get; set; }
public Guid FK_ItemId { get; set; }
[ForeignKey("FK_ItemId")]
public Item Item { get; set; }
public decimal Quantity { get; set; }
public ReturnReasonCode ReasonCode { get; set; }
/// <summary>Snapshot of the item's unit price at return time, used to compute credit amount.</summary>
public decimal UnitPrice { get; set; }
}
}
+35
View File
@@ -0,0 +1,35 @@
using System.ComponentModel.DataAnnotations.Schema;
namespace Distribution.Models
{
public class SupplierClaim : Template
{
public Guid FK_PurchaseOrderId { get; set; }
[ForeignKey("FK_PurchaseOrderId")]
public PurchaseOrder PurchaseOrder { get; set; }
public Guid? FK_GoodsReceiptId { get; set; }
[ForeignKey("FK_GoodsReceiptId")]
public GoodsReceipt? GoodsReceipt { get; set; }
public string Details { get; set; }
public string? EvidenceUrl { get; set; }
public SupplierClaimStatus Status { get; set; } = SupplierClaimStatus.Open;
public SupplierClaimResolutionType? ResolutionType { get; set; }
public decimal? ResolutionAmount { get; set; }
public string? ResolutionNotes { get; set; }
public Guid RaisedByUserId { get; set; }
[ForeignKey("RaisedByUserId")]
public User RaisedByUser { get; set; }
public Guid? ResolvedByUserId { get; set; }
[ForeignKey("ResolvedByUserId")]
public User? ResolvedByUser { get; set; }
public DateTime? ResolvedAt { get; set; }
public ICollection<SupplierClaimItem> Items { get; set; } = [];
}
}
+18
View File
@@ -0,0 +1,18 @@
using System.ComponentModel.DataAnnotations.Schema;
namespace Distribution.Models
{
public class SupplierClaimItem : Template
{
public Guid FK_SupplierClaimId { get; set; }
[ForeignKey("FK_SupplierClaimId")]
public SupplierClaim SupplierClaim { get; set; }
public Guid FK_ItemId { get; set; }
[ForeignKey("FK_ItemId")]
public Item Item { get; set; }
public decimal Quantity { get; set; }
public SupplierClaimIssueType IssueType { get; set; }
}
}