59 lines
2.1 KiB
C#
59 lines
2.1 KiB
C#
using Distribution.Models;
|
|
|
|
namespace Distribution.Features.Po;
|
|
|
|
public record PoItemRequest(Guid ItemId, int Quantity, decimal UnitCost);
|
|
|
|
public record CreatePoRequest(
|
|
Guid SupplierId,
|
|
List<PoItemRequest> Items,
|
|
// TEMPORARY: required while auth doesn't resolve a logged-in user server-side — see testbug.md #28.
|
|
Guid? CreatedByUserId = null);
|
|
|
|
/// <summary>
|
|
/// Update line: PurchaseOrderItemId set = update an existing unreceived line (Quantity/UnitCost),
|
|
/// null = add a new line to the Po. Only valid while the Po is Issued.
|
|
/// </summary>
|
|
public record UpdatePoLineRequest(Guid? PurchaseOrderItemId, Guid ItemId, int Quantity, decimal UnitCost);
|
|
|
|
public record UpdatePoRequest(List<UpdatePoLineRequest> Items);
|
|
|
|
public record CancelPoRequest(string Reason);
|
|
|
|
public record CancelPoLineRequest(string? Reason);
|
|
|
|
public record PoItemResponse(
|
|
Guid Id,
|
|
Guid ItemId,
|
|
string Sku,
|
|
string ItemName,
|
|
int Quantity,
|
|
decimal UnitCost,
|
|
int ReceivedQuantity,
|
|
int CancelledQuantity,
|
|
bool IsCancelled);
|
|
|
|
public record PoResponse(
|
|
Guid Id,
|
|
Guid SupplierId,
|
|
string SupplierName,
|
|
Guid CreatedByUserId,
|
|
PurchaseOrderStatus Status,
|
|
string? CancelReason,
|
|
bool IsActive,
|
|
DateTime CreatedAt,
|
|
List<PoItemResponse> Items);
|
|
|
|
/// <summary>
|
|
/// Minimal Po-vs-Grn quantity/cost reconciliation. Full 3-way match (Po + Grn + Invoice) activates
|
|
/// once Finance's Invoice entity (step 19, not yet built) exists — until then this compares only
|
|
/// PurchaseOrderItem vs GoodsReceiptItem.
|
|
/// </summary>
|
|
public record InvoiceMatchLineResult(Guid PurchaseOrderItemId, Guid ItemId, int OrderedQuantity, int AcceptedQuantity, decimal UnitCost, bool QuantityMatches);
|
|
|
|
public record InvoiceMatchResult(Guid PurchaseOrderId, Guid? GoodsReceiptId, Guid? InvoiceId, bool IsMatched, List<InvoiceMatchLineResult> Lines, string Note);
|
|
|
|
public record ResolveInvoiceVarianceRequest(string Variance, string Resolution, decimal? AdjustedUnitCost, Guid? PurchaseOrderItemId);
|
|
|
|
public record InvoiceVarianceResolutionResponse(Guid PurchaseOrderId, string Variance, string Resolution, DateTime ResolvedAt);
|