feat: manual payment package-based + StockMovement constraint fix
Build and Deploy to Kubernetes / build-and-deploy (push) Failing after 7m23s
Build and Deploy to Kubernetes / build-and-deploy (push) Failing after 7m23s
- ManualPayment: add package_id to proto, handler selects package by ID - ManualPayment: remove manual amount input, use package price - ManualPayment: validator now checks PackageId instead of Amount - StockMovement: fix CHECK constraint (store negative qty for decreases) - StockMovement: Reserved/Released don't change physical Quantity - Proto NuGet bumped to 0.0.192
This commit is contained in:
+20
-1
@@ -61,7 +61,9 @@ public class CreateStockMovementCommandHandler : IRequestHandler<CreateStockMove
|
||||
{
|
||||
throw new InvalidOperationException($"Insufficient available stock. Available: {inventoryItem.AvailableQuantity}, Requested: {request.Quantity}");
|
||||
}
|
||||
// رزرو فقط ReservedQuantity رو زیاد میکنه، Quantity فیزیکی تغییر نمیکنه
|
||||
inventoryItem.ReservedQuantity += request.Quantity;
|
||||
// quantityAfter = quantityBefore (بدون تغییر)
|
||||
break;
|
||||
|
||||
case StockMovementType.Released:
|
||||
@@ -69,15 +71,32 @@ public class CreateStockMovementCommandHandler : IRequestHandler<CreateStockMove
|
||||
{
|
||||
throw new InvalidOperationException($"Cannot release more than reserved. Reserved: {inventoryItem.ReservedQuantity}, Requested: {request.Quantity}");
|
||||
}
|
||||
// آزادسازی فقط ReservedQuantity رو کم میکنه، Quantity فیزیکی تغییر نمیکنه
|
||||
inventoryItem.ReservedQuantity -= request.Quantity;
|
||||
// quantityAfter = quantityBefore (بدون تغییر)
|
||||
break;
|
||||
}
|
||||
|
||||
// محاسبه مقدار Quantity برای ذخیره (منفی برای عملیات کاهشی)
|
||||
// تا constraint دیتابیس (QuantityAfter = QuantityBefore + Quantity) برقرار بماند
|
||||
var storedQuantity = request.MovementType switch
|
||||
{
|
||||
StockMovementType.Sale or
|
||||
StockMovementType.AdjustmentMinus or
|
||||
StockMovementType.Lost or
|
||||
StockMovementType.Damaged or
|
||||
StockMovementType.TransferOut => -request.Quantity,
|
||||
// رزرو و آزادسازی تأثیری روی Quantity فیزیکی ندارن
|
||||
StockMovementType.Reserved or
|
||||
StockMovementType.Released => 0,
|
||||
_ => request.Quantity
|
||||
};
|
||||
|
||||
var entity = new StockMovement
|
||||
{
|
||||
InventoryItemId = request.InventoryItemId,
|
||||
MovementType = request.MovementType,
|
||||
Quantity = request.Quantity,
|
||||
Quantity = storedQuantity,
|
||||
QuantityBefore = quantityBefore,
|
||||
QuantityAfter = quantityAfter,
|
||||
Note = request.Note,
|
||||
|
||||
Reference in New Issue
Block a user