Update loading sheet filters and orders
This commit is contained in:
@@ -6,10 +6,12 @@ public interface ILoadingSheetRepository
|
|||||||
{
|
{
|
||||||
Task<LoadingSheet?> GetByIdAsync(Guid id);
|
Task<LoadingSheet?> GetByIdAsync(Guid id);
|
||||||
Task<LoadingSheet?> GetActiveByRideIdAsync(Guid rideId);
|
Task<LoadingSheet?> GetActiveByRideIdAsync(Guid rideId);
|
||||||
Task<List<LoadingSheet>> GetAllAsync(Guid? rideId, LoadingSheetStatus? status, int page, int pageSize);
|
Task<List<LoadingSheet>> GetAllAsync(Guid? rideId, LoadingSheetStatus? status, Guid? routeId, Guid? regionId, int page, int pageSize);
|
||||||
Task<int> GetCountAsync(Guid? rideId, LoadingSheetStatus? status);
|
Task<int> GetCountAsync(Guid? rideId, LoadingSheetStatus? status, Guid? routeId, Guid? regionId);
|
||||||
Task AddAsync(LoadingSheet sheet);
|
Task AddAsync(LoadingSheet sheet);
|
||||||
void Update(LoadingSheet sheet);
|
void Update(LoadingSheet sheet);
|
||||||
void RemoveItems(IEnumerable<LoadingSheetItem> items);
|
void RemoveItems(IEnumerable<LoadingSheetItem> items);
|
||||||
Task AddItemsAsync(IEnumerable<LoadingSheetItem> items);
|
Task AddItemsAsync(IEnumerable<LoadingSheetItem> items);
|
||||||
|
Task<List<Guid>> GetShopPOIdsByItemIdsAsync(IEnumerable<Guid> shopPOItemIds);
|
||||||
|
Task ReplaceOrdersAsync(Guid loadingSheetId, List<Guid> shopPOIds);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,10 +12,12 @@ public class LoadingSheetController(LoadingSheetService service, ICurrentUserSer
|
|||||||
public async Task<IActionResult> GetAll(
|
public async Task<IActionResult> GetAll(
|
||||||
[FromQuery] Guid? rideId,
|
[FromQuery] Guid? rideId,
|
||||||
[FromQuery] LoadingSheetStatus? status,
|
[FromQuery] LoadingSheetStatus? status,
|
||||||
|
[FromQuery] Guid? routeId,
|
||||||
|
[FromQuery] Guid? regionId,
|
||||||
[FromQuery] int page = 1,
|
[FromQuery] int page = 1,
|
||||||
[FromQuery] int pageSize = 20)
|
[FromQuery] int pageSize = 20)
|
||||||
{
|
{
|
||||||
var result = await service.GetAllAsync(rideId, status, page, pageSize);
|
var result = await service.GetAllAsync(rideId, status, routeId, regionId, page, pageSize);
|
||||||
return Ok(result);
|
return Ok(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,24 +17,28 @@ public class LoadingSheetRepository(AppDBContext context) : ILoadingSheetReposit
|
|||||||
await context.LoadingSheets
|
await context.LoadingSheets
|
||||||
.FirstOrDefaultAsync(s => s.FK_RideId == rideId && s.Status == LoadingSheetStatus.Planned);
|
.FirstOrDefaultAsync(s => s.FK_RideId == rideId && s.Status == LoadingSheetStatus.Planned);
|
||||||
|
|
||||||
public async Task<List<LoadingSheet>> GetAllAsync(Guid? rideId, LoadingSheetStatus? status, int page, int pageSize) =>
|
public async Task<List<LoadingSheet>> GetAllAsync(Guid? rideId, LoadingSheetStatus? status, Guid? routeId, Guid? regionId, int page, int pageSize) =>
|
||||||
await context.LoadingSheets
|
await context.LoadingSheets
|
||||||
.Include(s => s.Items).ThenInclude(i => i.Item)
|
.Include(s => s.Items).ThenInclude(i => i.Item)
|
||||||
.Include(s => s.Items).ThenInclude(i => i.Warehouse)
|
.Include(s => s.Items).ThenInclude(i => i.Warehouse)
|
||||||
.Include(s => s.Orders)
|
.Include(s => s.Orders)
|
||||||
.Where(s =>
|
.Where(s =>
|
||||||
(rideId == null || s.FK_RideId == rideId) &&
|
(rideId == null || s.FK_RideId == rideId) &&
|
||||||
(status == null || s.Status == status))
|
(status == null || s.Status == status) &&
|
||||||
|
(routeId == null || s.Orders.Any(o => o.ShopPO.Store.FK_RouteId == routeId)) &&
|
||||||
|
(regionId == null || s.Orders.Any(o => o.ShopPO.Store.Route.FK_RegionId == regionId)))
|
||||||
.OrderByDescending(s => s.CreatedAt)
|
.OrderByDescending(s => s.CreatedAt)
|
||||||
.Skip((page - 1) * pageSize)
|
.Skip((page - 1) * pageSize)
|
||||||
.Take(pageSize)
|
.Take(pageSize)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
public async Task<int> GetCountAsync(Guid? rideId, LoadingSheetStatus? status) =>
|
public async Task<int> GetCountAsync(Guid? rideId, LoadingSheetStatus? status, Guid? routeId, Guid? regionId) =>
|
||||||
await context.LoadingSheets
|
await context.LoadingSheets
|
||||||
.CountAsync(s =>
|
.CountAsync(s =>
|
||||||
(rideId == null || s.FK_RideId == rideId) &&
|
(rideId == null || s.FK_RideId == rideId) &&
|
||||||
(status == null || s.Status == status));
|
(status == null || s.Status == status) &&
|
||||||
|
(routeId == null || s.Orders.Any(o => o.ShopPO.Store.FK_RouteId == routeId)) &&
|
||||||
|
(regionId == null || s.Orders.Any(o => o.ShopPO.Store.Route.FK_RegionId == regionId)));
|
||||||
|
|
||||||
public async Task AddAsync(LoadingSheet sheet) =>
|
public async Task AddAsync(LoadingSheet sheet) =>
|
||||||
await context.LoadingSheets.AddAsync(sheet);
|
await context.LoadingSheets.AddAsync(sheet);
|
||||||
@@ -47,4 +51,25 @@ public class LoadingSheetRepository(AppDBContext context) : ILoadingSheetReposit
|
|||||||
|
|
||||||
public async Task AddItemsAsync(IEnumerable<LoadingSheetItem> items) =>
|
public async Task AddItemsAsync(IEnumerable<LoadingSheetItem> items) =>
|
||||||
await context.LoadingSheetItems.AddRangeAsync(items);
|
await context.LoadingSheetItems.AddRangeAsync(items);
|
||||||
|
|
||||||
|
public async Task<List<Guid>> GetShopPOIdsByItemIdsAsync(IEnumerable<Guid> shopPOItemIds) =>
|
||||||
|
await context.ShopPOItems
|
||||||
|
.Where(i => shopPOItemIds.Contains(i.Id))
|
||||||
|
.Select(i => i.FK_ShopPOId)
|
||||||
|
.Distinct()
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
public async Task ReplaceOrdersAsync(Guid loadingSheetId, List<Guid> shopPOIds)
|
||||||
|
{
|
||||||
|
var current = await context.LoadingSheetOrders
|
||||||
|
.Where(o => o.FK_LoadingSheetId == loadingSheetId)
|
||||||
|
.ToListAsync();
|
||||||
|
context.LoadingSheetOrders.RemoveRange(current);
|
||||||
|
|
||||||
|
await context.LoadingSheetOrders.AddRangeAsync(shopPOIds.Select(shopPOId => new LoadingSheetOrder
|
||||||
|
{
|
||||||
|
FK_LoadingSheetId = loadingSheetId,
|
||||||
|
FK_ShopPOId = shopPOId
|
||||||
|
}));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,10 @@ public class LoadingSheetService(
|
|||||||
IStockRepository stockRepo,
|
IStockRepository stockRepo,
|
||||||
IUnitOfWork uow)
|
IUnitOfWork uow)
|
||||||
{
|
{
|
||||||
public async Task<PagedResponse<LoadingSheetResponse>> GetAllAsync(Guid? rideId, LoadingSheetStatus? status, int page, int pageSize)
|
public async Task<PagedResponse<LoadingSheetResponse>> GetAllAsync(Guid? rideId, LoadingSheetStatus? status, Guid? routeId, Guid? regionId, int page, int pageSize)
|
||||||
{
|
{
|
||||||
var total = await repo.GetCountAsync(rideId, status);
|
var total = await repo.GetCountAsync(rideId, status, routeId, regionId);
|
||||||
var items = await repo.GetAllAsync(rideId, status, page, pageSize);
|
var items = await repo.GetAllAsync(rideId, status, routeId, regionId, page, pageSize);
|
||||||
return new PagedResponse<LoadingSheetResponse>(page, pageSize, total, items.Select(ToResponse).ToList());
|
return new PagedResponse<LoadingSheetResponse>(page, pageSize, total, items.Select(ToResponse).ToList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,6 +64,14 @@ public class LoadingSheetService(
|
|||||||
if (sheet.Status != LoadingSheetStatus.Planned)
|
if (sheet.Status != LoadingSheetStatus.Planned)
|
||||||
throw new InvalidOperationException("Items can only be changed while the sheet is Planned");
|
throw new InvalidOperationException("Items can only be changed while the sheet is Planned");
|
||||||
|
|
||||||
|
var shopPOItemIds = request.Items
|
||||||
|
.Where(i => i.FK_ShopPOItemId.HasValue)
|
||||||
|
.Select(i => i.FK_ShopPOItemId!.Value)
|
||||||
|
.ToList();
|
||||||
|
var shopPOIds = shopPOItemIds.Count > 0
|
||||||
|
? await repo.GetShopPOIdsByItemIdsAsync(shopPOItemIds)
|
||||||
|
: new List<Guid>();
|
||||||
|
|
||||||
await uow.BeginAsync(ct);
|
await uow.BeginAsync(ct);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -76,6 +84,7 @@ public class LoadingSheetService(
|
|||||||
FK_ShopPOItemId = i.FK_ShopPOItemId,
|
FK_ShopPOItemId = i.FK_ShopPOItemId,
|
||||||
QuantityDispatched = i.Quantity
|
QuantityDispatched = i.Quantity
|
||||||
}));
|
}));
|
||||||
|
await repo.ReplaceOrdersAsync(sheet.Id, shopPOIds);
|
||||||
await uow.CommitAsync(ct);
|
await uow.CommitAsync(ct);
|
||||||
}
|
}
|
||||||
catch { await uow.RollbackAsync(ct); throw; }
|
catch { await uow.RollbackAsync(ct); throw; }
|
||||||
|
|||||||
Reference in New Issue
Block a user