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
Build and Deploy to Kubernetes / build-and-deploy (push) Has been cancelled
This commit is contained in:
+5
-1
@@ -1,7 +1,7 @@
|
|||||||
namespace CMSMicroservice.Application.InventoryItemCQ.Commands.ReduceInventory;
|
namespace CMSMicroservice.Application.InventoryItemCQ.Commands.ReduceInventory;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Command برای کم کردن موجودی (فروش)
|
/// Command برای کم کردن موجودی (فروش، خسارت، مفقودی و ...)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public record ReduceInventoryCommand : IRequest<ReduceInventoryResponseDto>
|
public record ReduceInventoryCommand : IRequest<ReduceInventoryResponseDto>
|
||||||
{
|
{
|
||||||
@@ -19,4 +19,8 @@ public record ReduceInventoryCommand : IRequest<ReduceInventoryResponseDto>
|
|||||||
public long? PerformedByUserId { get; init; }
|
public long? PerformedByUserId { get; init; }
|
||||||
/// <summary>آیا از موجودی رزرو شده کم شود؟</summary>
|
/// <summary>آیا از موجودی رزرو شده کم شود؟</summary>
|
||||||
public bool FromReserved { get; init; } = true;
|
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; }
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -53,11 +53,11 @@ public class ReduceInventoryCommandHandler : IRequestHandler<ReduceInventoryComm
|
|||||||
var stockMovement = new StockMovement
|
var stockMovement = new StockMovement
|
||||||
{
|
{
|
||||||
InventoryItemId = item.Id,
|
InventoryItemId = item.Id,
|
||||||
MovementType = StockMovementType.Sale,
|
MovementType = request.MovementType,
|
||||||
Quantity = request.Quantity,
|
Quantity = -request.Quantity, // منفی — CHECK constraint: QuantityAfter = QuantityBefore + Quantity
|
||||||
QuantityBefore = previousQuantity,
|
QuantityBefore = previousQuantity,
|
||||||
QuantityAfter = item.Quantity,
|
QuantityAfter = item.Quantity,
|
||||||
Note = "Sale confirmed",
|
Note = request.Note ?? request.MovementType.ToString(),
|
||||||
ReferenceNumber = request.ReferenceNumber ?? $"SALE-{DateTime.UtcNow:yyyyMMddHHmmss}",
|
ReferenceNumber = request.ReferenceNumber ?? $"SALE-{DateTime.UtcNow:yyyyMMddHHmmss}",
|
||||||
OrderId = request.OrderId,
|
OrderId = request.OrderId,
|
||||||
DiscountOrderId = request.DiscountOrderId,
|
DiscountOrderId = request.DiscountOrderId,
|
||||||
|
|||||||
@@ -181,7 +181,9 @@ public class InventoryService : InventoryContract.InventoryContractBase
|
|||||||
Id = inventoryItem.Id,
|
Id = inventoryItem.Id,
|
||||||
Quantity = Math.Abs(difference),
|
Quantity = Math.Abs(difference),
|
||||||
FromReserved = false,
|
FromReserved = false,
|
||||||
ReferenceNumber = request.ReferenceNumber
|
ReferenceNumber = request.ReferenceNumber,
|
||||||
|
MovementType = Domain.Enums.StockMovementType.AdjustmentMinus,
|
||||||
|
Note = "Stock adjustment (decrease)"
|
||||||
},
|
},
|
||||||
context.CancellationToken);
|
context.CancellationToken);
|
||||||
|
|
||||||
@@ -332,7 +334,9 @@ public class InventoryService : InventoryContract.InventoryContractBase
|
|||||||
Id = inventoryItem.Id,
|
Id = inventoryItem.Id,
|
||||||
Quantity = request.Quantity,
|
Quantity = request.Quantity,
|
||||||
FromReserved = false,
|
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);
|
context.CancellationToken);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user