feat: manual payment package-based + StockMovement constraint fix
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:
masoodafar-web
2026-03-11 23:44:28 +03:30
parent 1a0bb83c99
commit 0e9d0cad2f
7 changed files with 113 additions and 18 deletions
@@ -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,