namespace Admin.NET.Plugin.AiDOP.MaterialWarehouse.InventoryPosting.Receipt;
/// C6 采购收货回写对账结果(前值→delta→后值 + 未收余量 + 完成状态)。
public sealed class PurchaseReceiptWritebackResult
{
public decimal QtyOrdered { get; set; }
public decimal ReturnedQty { get; set; }
public decimal BeforeReceivedQty { get; set; }
public decimal AcceptedQty { get; set; }
public decimal AfterReceivedQty { get; set; }
public decimal BeforeOutstandingQty { get; set; }
public decimal AfterOutstandingQty { get; set; }
/// 明细完成(LIVE PurOrdMaster 关闭判据:(RctQty-QtyReturned)>=QtyOrded)。
public bool DetailCompleted { get; set; }
}
///
/// C6 采购收货回写量变纯计算(无 DB,可全量单测)。据 pr_WMS_UpdatePurOrdRctTransactionProcessing2 LIVE:
/// 正常收货 PurOrdDetail.RctQty += QtyReceived(L147);关闭判据 (RctQty-QtyReturned)>=QtyOrded(L223)。
/// 未收余量 = QtyOrded - (RctQty - QtyReturned)。
///
public static class PurchaseReceiptWritebackCalculator
{
public static PurchaseReceiptWritebackResult Compute(decimal orderedQty, decimal beforeReceivedQty, decimal returnedQty, decimal acceptedQty)
{
var afterReceived = beforeReceivedQty + acceptedQty;
var effectiveBefore = beforeReceivedQty - returnedQty;
var effectiveAfter = afterReceived - returnedQty;
return new PurchaseReceiptWritebackResult
{
QtyOrdered = orderedQty,
ReturnedQty = returnedQty,
BeforeReceivedQty = beforeReceivedQty,
AcceptedQty = acceptedQty,
AfterReceivedQty = afterReceived,
BeforeOutstandingQty = orderedQty - effectiveBefore,
AfterOutstandingQty = orderedQty - effectiveAfter,
DetailCompleted = effectiveAfter >= orderedQty,
};
}
}