105 lines
3.7 KiB
C#
105 lines
3.7 KiB
C#
namespace Distribution.Features.Grn;
|
|
|
|
/// <summary>BatchNumber is null for an expiry-only lot (TracksExpiryDate without TracksBatches).</summary>
|
|
public record GrnBatchLineRequest(string? BatchNumber, DateTime? ExpiryDate, int Quantity);
|
|
|
|
public record GrnItemRequest(
|
|
// Set for a PO-based receipt; null for a direct receipt (ItemId is used instead).
|
|
Guid? PurchaseOrderItemId,
|
|
int AcceptedQuantity,
|
|
int RejectedQuantity,
|
|
// Populated only when the item has TracksBatches and/or TracksExpiryDate set.
|
|
List<GrnBatchLineRequest>? Batches = null,
|
|
// Populated only when the item has TracksSerialNumbers set — must contain exactly AcceptedQuantity entries.
|
|
List<string>? SerialNumbers = null,
|
|
// Set for a direct receipt line (no purchase order).
|
|
Guid? ItemId = null,
|
|
// Cost per base-UOM unit. Null on a PO line falls back to the PO line's unit cost; null on a direct line is 0.
|
|
decimal? UnitCost = null,
|
|
// Null falls back to the GRN-wide percentage.
|
|
decimal? DiscountPercent = null,
|
|
decimal? VatPercent = null,
|
|
// Free-issue units: stocked but not costed. Serial/batch entries must cover accepted + free.
|
|
int FreeQuantity = 0,
|
|
// Ignored when NBT is disabled in configuration; null falls back to the GRN-wide percentage.
|
|
decimal? NbtPercent = null);
|
|
|
|
public record CreateGrnRequest(
|
|
Guid WarehouseId,
|
|
List<GrnItemRequest> Items,
|
|
// TEMPORARY: required while auth doesn't resolve a logged-in user server-side — see testbug.md #28.
|
|
Guid? ReceivedByUserId = null,
|
|
// GRN-wide defaults for lines that don't set their own.
|
|
decimal? DiscountPercent = null,
|
|
decimal? VatPercent = null,
|
|
decimal? NbtPercent = null);
|
|
|
|
public record CreateFlatGrnRequest(
|
|
Guid PurchaseOrderId,
|
|
Guid WarehouseId,
|
|
List<GrnItemRequest> Items,
|
|
// TEMPORARY: required while auth doesn't resolve a logged-in user server-side — see testbug.md #28.
|
|
Guid? ReceivedByUserId = null,
|
|
decimal? DiscountPercent = null,
|
|
decimal? VatPercent = null,
|
|
decimal? NbtPercent = null);
|
|
|
|
/// <summary>A goods receipt with no purchase order. SupplierId is optional.</summary>
|
|
public record CreateDirectGrnRequest(
|
|
Guid WarehouseId,
|
|
List<GrnItemRequest> Items,
|
|
Guid? SupplierId = null,
|
|
// TEMPORARY: required while auth doesn't resolve a logged-in user server-side — see testbug.md #28.
|
|
Guid? ReceivedByUserId = null,
|
|
decimal? DiscountPercent = null,
|
|
decimal? VatPercent = null,
|
|
decimal? NbtPercent = null);
|
|
|
|
public record GrnBatchLineResponse(string? BatchNumber, DateTime? ExpiryDate, int Quantity);
|
|
|
|
public record GrnItemResponse(
|
|
Guid Id,
|
|
Guid? PurchaseOrderItemId,
|
|
Guid ItemId,
|
|
string Sku,
|
|
string ItemName,
|
|
int AcceptedQuantity,
|
|
int RejectedQuantity,
|
|
List<GrnBatchLineResponse> Batches,
|
|
List<string> SerialNumbers,
|
|
decimal UnitCost,
|
|
decimal DiscountPercent,
|
|
decimal VatPercent,
|
|
// Accepted qty x unit cost, before discount.
|
|
decimal GrossAmount,
|
|
decimal DiscountAmount,
|
|
decimal VatAmount,
|
|
// Gross - discount + VAT.
|
|
decimal LineTotal,
|
|
int FreeQuantity,
|
|
decimal NbtPercent,
|
|
decimal NbtAmount);
|
|
|
|
public record GrnResponse(
|
|
Guid Id,
|
|
Guid? PurchaseOrderId,
|
|
Guid ReceivedByUserId,
|
|
Guid WarehouseId,
|
|
string WarehouseName,
|
|
Guid? SupplierId,
|
|
string? SupplierName,
|
|
DateTime ReceivedAt,
|
|
DateTime CreatedAt,
|
|
List<GrnItemResponse> Items,
|
|
decimal DiscountPercent,
|
|
decimal VatPercent,
|
|
// Sum of line gross amounts.
|
|
decimal SubTotal,
|
|
decimal DiscountAmount,
|
|
// SubTotal - DiscountAmount (the base NBT is charged on; VAT is charged on this plus NBT).
|
|
decimal TaxableAmount,
|
|
decimal VatAmount,
|
|
decimal TotalAmount,
|
|
decimal NbtPercent,
|
|
decimal NbtAmount);
|