fix: StockMovement CHECK constraint violation — store Quantity as negative for reduce operations, pass correct MovementType from RecordLoss
Build and Deploy to Kubernetes / build-and-deploy (push) Has been cancelled

This commit is contained in:
masoodafar-web
2026-02-22 21:38:20 +03:30
parent 305b8d3fd8
commit 0fe4db5e77
3 changed files with 14 additions and 6 deletions
@@ -1,7 +1,7 @@
namespace CMSMicroservice.Application.InventoryItemCQ.Commands.ReduceInventory;
/// <summary>
/// Command برای کم کردن موجودی (فروش)
/// Command برای کم کردن موجودی (فروش، خسارت، مفقودی و ...)
/// </summary>
public record ReduceInventoryCommand : IRequest<ReduceInventoryResponseDto>
{
@@ -19,4 +19,8 @@ public record ReduceInventoryCommand : IRequest<ReduceInventoryResponseDto>
public long? PerformedByUserId { get; init; }
/// <summary>آیا از موجودی رزرو شده کم شود؟</summary>
public bool FromReserved { get; init; } = true;
/// <summary>نوع حرکت انبار (پیش‌فرض: فروش)</summary>
public Domain.Enums.StockMovementType MovementType { get; init; } = Domain.Enums.StockMovementType.Sale;
/// <summary>توضیحات</summary>
public string? Note { get; init; }
}
@@ -53,11 +53,11 @@ public class ReduceInventoryCommandHandler : IRequestHandler<ReduceInventoryComm
var stockMovement = new StockMovement
{
InventoryItemId = item.Id,
MovementType = StockMovementType.Sale,
Quantity = request.Quantity,
MovementType = request.MovementType,
Quantity = -request.Quantity, // منفی — CHECK constraint: QuantityAfter = QuantityBefore + Quantity
QuantityBefore = previousQuantity,
QuantityAfter = item.Quantity,
Note = "Sale confirmed",
Note = request.Note ?? request.MovementType.ToString(),
ReferenceNumber = request.ReferenceNumber ?? $"SALE-{DateTime.UtcNow:yyyyMMddHHmmss}",
OrderId = request.OrderId,
DiscountOrderId = request.DiscountOrderId,
@@ -181,7 +181,9 @@ public class InventoryService : InventoryContract.InventoryContractBase
Id = inventoryItem.Id,
Quantity = Math.Abs(difference),
FromReserved = false,
ReferenceNumber = request.ReferenceNumber
ReferenceNumber = request.ReferenceNumber,
MovementType = Domain.Enums.StockMovementType.AdjustmentMinus,
Note = "Stock adjustment (decrease)"
},
context.CancellationToken);
@@ -332,7 +334,9 @@ public class InventoryService : InventoryContract.InventoryContractBase
Id = inventoryItem.Id,
Quantity = request.Quantity,
FromReserved = false,
ReferenceNumber = request.ReferenceNumber ?? $"LOSS-{DateTime.UtcNow:yyyyMMddHHmmss}"
ReferenceNumber = request.ReferenceNumber ?? $"LOSS-{DateTime.UtcNow:yyyyMMddHHmmss}",
MovementType = (Domain.Enums.StockMovementType)request.LossType,
Note = string.IsNullOrWhiteSpace(request.Reason) ? null : request.Reason
},
context.CancellationToken);