dde4c68b2f
Build and Deploy to Kubernetes / build-and-deploy (push) Failing after 2m33s
- Add GetLowStockItemsResponseDto and LowStockItemDto for low stock item queries. - Create CreateStockMovementCommand and its handler for managing stock movements. - Implement CreateStockMovementCommandValidator for validating stock movement commands. - Add GetStockMovementsQuery and its handler to retrieve stock movement records. - Create GetStockMovementsResponseDto and StockMovementListDto for stock movement responses. - Implement GetStockMovementsByInventoryItemQuery and its handler for fetching movements by inventory item. - Add CreateWarehouseCommand and its handler for creating new warehouses. - Implement CreateWarehouseCommandValidator for warehouse creation validation. - Add DeleteWarehouseCommand and its handler for removing warehouses. - Implement SetDefaultWarehouseCommand and its handler for setting a default warehouse. - Create UpdateWarehouseCommand and its handler for updating warehouse details. - Implement GetAllWarehousesQuery and its handler to retrieve all warehouses. - Add GetWarehouseQuery and its handler for fetching a specific warehouse by ID. - Implement SearchWarehousesQuery and its handler for searching warehouses based on criteria.
54 lines
2.0 KiB
C#
54 lines
2.0 KiB
C#
using CMSMicroservice.Application.Common.Exceptions;
|
|
using CMSMicroservice.Domain.Entities;
|
|
using CMSMicroservice.Domain.Enums;
|
|
|
|
namespace CMSMicroservice.Application.InventoryItemCQ.Commands.ReleaseReservedInventory;
|
|
|
|
public class ReleaseReservedInventoryCommandHandler : IRequestHandler<ReleaseReservedInventoryCommand, ReleaseReservedInventoryResponseDto>
|
|
{
|
|
private readonly IApplicationDbContext _context;
|
|
|
|
public ReleaseReservedInventoryCommandHandler(IApplicationDbContext context)
|
|
{
|
|
_context = context;
|
|
}
|
|
|
|
public async Task<ReleaseReservedInventoryResponseDto> Handle(ReleaseReservedInventoryCommand request, CancellationToken cancellationToken)
|
|
{
|
|
var item = await _context.InventoryItems
|
|
.FirstOrDefaultAsync(i => i.Id == request.Id, cancellationToken);
|
|
|
|
if (item == null)
|
|
{
|
|
throw new NotFoundException(nameof(Domain.Entities.InventoryItem), request.Id);
|
|
}
|
|
|
|
if (item.ReservedQuantity < request.Quantity)
|
|
{
|
|
throw new InvalidOperationException($"Cannot release more than reserved. Reserved: {item.ReservedQuantity}, Requested: {request.Quantity}");
|
|
}
|
|
|
|
item.ReservedQuantity -= request.Quantity;
|
|
|
|
// ثبت حرکت موجودی
|
|
var stockMovement = new StockMovement
|
|
{
|
|
InventoryItemId = item.Id,
|
|
MovementType = StockMovementType.Released,
|
|
Quantity = request.Quantity,
|
|
QuantityBefore = item.Quantity,
|
|
QuantityAfter = item.Quantity,
|
|
Note = "Reservation released",
|
|
ReferenceNumber = request.ReferenceNumber ?? $"REL-{DateTime.UtcNow:yyyyMMddHHmmss}",
|
|
OrderId = request.OrderId,
|
|
DiscountOrderId = request.DiscountOrderId,
|
|
PerformedByUserId = request.PerformedByUserId
|
|
};
|
|
|
|
await _context.StockMovements.AddAsync(stockMovement, cancellationToken);
|
|
await _context.SaveChangesAsync(cancellationToken);
|
|
|
|
return new ReleaseReservedInventoryResponseDto { Success = true };
|
|
}
|
|
}
|