6d8b6b3e59
Implemented DeliveryTask, Payment, and Sale entities with full CRUD, business logic, and API endpoints. Updated Order/OrderItem for sale linkage and fulfillment tracking. Registered new DbSets and DI services. Revised documentation for delivery, sale, and payment workflows.
64 lines
2.6 KiB
C#
64 lines
2.6 KiB
C#
using Distribution.Data;
|
|
using Distribution.Models;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace Distribution.Features.LoadingEvent;
|
|
|
|
public class LoadingSheetRepository(AppDBContext context) : ILoadingSheetRepository
|
|
{
|
|
public async Task<LoadingSheet?> GetByIdAsync(Guid id) =>
|
|
await context.LoadingSheets
|
|
.Include(s => s.SourceWarehouse)
|
|
.Include(s => s.Items).ThenInclude(i => i.Item)
|
|
.FirstOrDefaultAsync(s => s.Id == id);
|
|
|
|
public async Task<LoadingSheet?> GetActiveByRideIdAsync(Guid rideId) =>
|
|
await context.LoadingSheets
|
|
.FirstOrDefaultAsync(s =>
|
|
s.FK_RideId == rideId &&
|
|
s.Status != LoadingSheetStatus.ReceiptConfirmed &&
|
|
s.Status != LoadingSheetStatus.Resolved);
|
|
|
|
public async Task<List<LoadingSheet>> GetAllAsync(Guid? rideId, LoadingSheetStatus? status, int page, int pageSize) =>
|
|
await context.LoadingSheets
|
|
.Include(s => s.SourceWarehouse)
|
|
.Where(s =>
|
|
(rideId == null || s.FK_RideId == rideId) &&
|
|
(status == null || s.Status == status))
|
|
.OrderByDescending(s => s.CreatedAt)
|
|
.Skip((page - 1) * pageSize)
|
|
.Take(pageSize)
|
|
.ToListAsync();
|
|
|
|
public async Task<int> GetCountAsync(Guid? rideId, LoadingSheetStatus? status) =>
|
|
await context.LoadingSheets
|
|
.CountAsync(s =>
|
|
(rideId == null || s.FK_RideId == rideId) &&
|
|
(status == null || s.Status == status));
|
|
|
|
public async Task<List<(Guid ItemId, decimal TotalQty)>> GetAggregatedOrderItemsByRouteIdAsync(Guid routeId)
|
|
{
|
|
var groups = await context.OrderItems
|
|
.Where(oi => oi.IsActive
|
|
&& oi.Order.IsActive
|
|
&& oi.Order.Store.FK_RouteId == routeId
|
|
&& (oi.Order.Status == OrderStatus.Pending || oi.Order.Status == OrderStatus.PartiallyFulfilled))
|
|
.GroupBy(oi => oi.FK_ItemId)
|
|
.Select(g => new { ItemId = g.Key, TotalQty = g.Sum(oi => (decimal)(oi.Quantity - oi.QuantityFulfilled)) })
|
|
.ToListAsync();
|
|
return groups.Select(x => (x.ItemId, x.TotalQty)).ToList();
|
|
}
|
|
|
|
public async Task AddAsync(LoadingSheet sheet) =>
|
|
await context.LoadingSheets.AddAsync(sheet);
|
|
|
|
public void Update(LoadingSheet sheet) =>
|
|
context.LoadingSheets.Update(sheet);
|
|
|
|
public void RemoveItems(IEnumerable<LoadingSheetItem> items) =>
|
|
context.LoadingSheetItems.RemoveRange(items);
|
|
|
|
public async Task AddItemsAsync(IEnumerable<LoadingSheetItem> items) =>
|
|
await context.LoadingSheetItems.AddRangeAsync(items);
|
|
}
|