63 lines
2.5 KiB
C#
63 lines
2.5 KiB
C#
using Distribution.Data;
|
|
using Distribution.Models;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace Distribution.Features.Order;
|
|
|
|
public class OrderRepository(AppDBContext context) : IOrderRepository
|
|
{
|
|
public async Task<Models.Order?> GetByIdAsync(Guid id) =>
|
|
await context.Orders.FindAsync(id);
|
|
|
|
public async Task<List<Models.Order>> GetAllAsync() =>
|
|
await context.Orders.ToListAsync();
|
|
|
|
public async Task<Models.Order?> GetBySaleIdAsync(Guid saleId) =>
|
|
await context.Orders.FirstOrDefaultAsync(o => o.FK_SaleId == saleId && o.IsActive);
|
|
|
|
public async Task AddAsync(Models.Order entity) =>
|
|
await context.Orders.AddAsync(entity);
|
|
|
|
public void Update(Models.Order entity) =>
|
|
context.Orders.Update(entity);
|
|
|
|
public void Remove(Models.Order entity)
|
|
{
|
|
entity.Status = Models.OrderStatus.Cancelled;
|
|
entity.IsActive = false;
|
|
context.Orders.Update(entity);
|
|
}
|
|
|
|
public async Task<List<Models.OrderItem>> GetItemsByOrderIdAsync(Guid orderId, bool includeHistory = false) =>
|
|
await context.OrderItems
|
|
.Where(oi => oi.FK_OrderId == orderId && (includeHistory || oi.IsActive))
|
|
.ToListAsync();
|
|
|
|
public async Task<List<Models.Order>> GetByStoreIdAsync(Guid storeId) =>
|
|
await context.Orders.Where(o => o.FK_StoreId == storeId && o.IsActive).ToListAsync();
|
|
|
|
public async Task AddItemsAsync(IEnumerable<Models.OrderItem> items) =>
|
|
await context.OrderItems.AddRangeAsync(items);
|
|
|
|
public async Task<List<Models.Order>> GetPendingByRouteIdAsync(Guid routeId) =>
|
|
await context.Orders
|
|
.Include(o => o.Store)
|
|
.Include(o => o.OrderItems.Where(i => i.IsActive))
|
|
.ThenInclude(i => i.Item)
|
|
.Where(o => o.IsActive
|
|
&& o.Store.FK_RouteId == routeId
|
|
&& (o.Status == OrderStatus.Pending || o.Status == OrderStatus.PartiallyFulfilled))
|
|
.ToListAsync();
|
|
|
|
public async Task<List<Models.Order>> GetConfirmedAsync(Guid? agentId, Guid? routeId, Guid? storeId) =>
|
|
await context.Orders
|
|
.Include(o => o.Store)
|
|
.Where(o => o.IsActive
|
|
&& o.ConfirmedAt != null
|
|
&& o.Status != OrderStatus.Cancelled
|
|
&& (agentId == null || o.CreatedByUserId == agentId)
|
|
&& (routeId == null || o.Store.FK_RouteId == routeId)
|
|
&& (storeId == null || o.FK_StoreId == storeId))
|
|
.ToListAsync();
|
|
}
|