63 lines
3.3 KiB
C#
63 lines
3.3 KiB
C#
using Distribution.Data;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace Distribution.Features.Grn;
|
|
|
|
public class GrnRepository(AppDBContext context) : IGrnRepository
|
|
{
|
|
public async Task<Models.GoodsReceipt?> GetByIdAsync(Guid id) =>
|
|
await context.GoodsReceipts
|
|
.Include(gr => gr.Warehouse)
|
|
.Include(gr => gr.Supplier)
|
|
.Include(gr => gr.Items).ThenInclude(i => i.Item)
|
|
.Include(gr => gr.Items).ThenInclude(i => i.PurchaseOrderItem).ThenInclude(poi => poi!.Item)
|
|
.Include(gr => gr.Items).ThenInclude(i => i.Batches).ThenInclude(b => b.ItemBatch)
|
|
.Include(gr => gr.Items).ThenInclude(i => i.Serials).ThenInclude(s => s.ItemSerialNumber)
|
|
.FirstOrDefaultAsync(gr => gr.Id == id);
|
|
|
|
public async Task<List<Models.GoodsReceipt>> GetAllAsync(Guid? purchaseOrderId, int page, int pageSize) =>
|
|
await context.GoodsReceipts
|
|
.Include(gr => gr.Warehouse)
|
|
.Include(gr => gr.Supplier)
|
|
.Include(gr => gr.Items).ThenInclude(i => i.Item)
|
|
.Include(gr => gr.Items).ThenInclude(i => i.PurchaseOrderItem).ThenInclude(poi => poi!.Item)
|
|
.Include(gr => gr.Items).ThenInclude(i => i.Batches).ThenInclude(b => b.ItemBatch)
|
|
.Include(gr => gr.Items).ThenInclude(i => i.Serials).ThenInclude(s => s.ItemSerialNumber)
|
|
.Where(gr => gr.IsActive && (purchaseOrderId == null || gr.FK_PurchaseOrderId == purchaseOrderId))
|
|
.OrderByDescending(gr => gr.ReceivedAt)
|
|
.Skip((page - 1) * pageSize)
|
|
.Take(pageSize)
|
|
.ToListAsync();
|
|
|
|
public async Task<int> GetCountAsync(Guid? purchaseOrderId) =>
|
|
await context.GoodsReceipts
|
|
.Where(gr => gr.IsActive && (purchaseOrderId == null || gr.FK_PurchaseOrderId == purchaseOrderId))
|
|
.CountAsync();
|
|
|
|
public async Task<List<Models.GoodsReceipt>> GetByPurchaseOrderIdAsync(Guid purchaseOrderId) =>
|
|
await context.GoodsReceipts
|
|
.Include(gr => gr.Warehouse)
|
|
.Include(gr => gr.Supplier)
|
|
.Include(gr => gr.Items).ThenInclude(i => i.Item)
|
|
.Include(gr => gr.Items).ThenInclude(i => i.PurchaseOrderItem).ThenInclude(poi => poi!.Item)
|
|
.Include(gr => gr.Items).ThenInclude(i => i.Batches).ThenInclude(b => b.ItemBatch)
|
|
.Include(gr => gr.Items).ThenInclude(i => i.Serials).ThenInclude(s => s.ItemSerialNumber)
|
|
.Where(gr => gr.FK_PurchaseOrderId == purchaseOrderId && gr.IsActive)
|
|
.OrderByDescending(gr => gr.ReceivedAt)
|
|
.ToListAsync();
|
|
|
|
public async Task AddAsync(Models.GoodsReceipt entity) =>
|
|
await context.GoodsReceipts.AddAsync(entity);
|
|
|
|
public async Task<bool> HasAnyForPurchaseOrderAsync(Guid purchaseOrderId) =>
|
|
await context.GoodsReceipts.AnyAsync(gr => gr.FK_PurchaseOrderId == purchaseOrderId && gr.IsActive);
|
|
|
|
public async Task<Dictionary<Guid, int>> GetAcceptedTotalsByItemAsync(Guid purchaseOrderId) =>
|
|
await context.GoodsReceiptItems
|
|
.Include(i => i.PurchaseOrderItem)
|
|
.Where(i => i.PurchaseOrderItem!.FK_PurchaseOrderId == purchaseOrderId && i.IsActive)
|
|
.GroupBy(i => i.PurchaseOrderItem!.FK_ItemId)
|
|
.Select(g => new { ItemId = g.Key, Total = g.Sum(i => i.AcceptedQuantity) })
|
|
.ToDictionaryAsync(x => x.ItemId, x => x.Total);
|
|
}
|