using Back.Common; using Back.Data.Contracts; using Back.Data.Models.Warehouse; using Microsoft.EntityFrameworkCore; using Microsoft.OpenApi.Extensions; using Shared.DTOs; using Shared.DTOs.Warehouse; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Back.Services.Warehouse { public class WarehouseService { private readonly IAsyncRepository _RemittanceRepo; private readonly IAsyncRepository _ReceiptRepo; public WarehouseService(IAsyncRepository remittanceRepo, IAsyncRepository receiptRepo) { _RemittanceRepo = remittanceRepo; _ReceiptRepo = receiptRepo; } public async Task> Circulation(int CompanyID, string date = "", int CODID = 0, int PageIndex = 1, int PageSize = 5) { var RequestRemittance = _RemittanceRepo.Get(w => w.cODItem.CompanyID == CompanyID && !w.Deleted) .Select(s => new CirculationDto { ID= s.ID, CODID = s.CODID, CODTitle = s.cODItem.Title, Date = s.Date.ShamciToFormatShamci(), Count = s.Count, info = s.info, Type = TypeCirculation.Remittance, ModelTypeID = (int)s.Type, ModelTypeTitle = s.Type.GetEnumDisplayName(), invoiceID = s.InvoiceID, CreateDt = s.CreateDt, }); if (!string.IsNullOrEmpty(date)) RequestRemittance = RequestRemittance.Where(w => w.Date == date); if (CODID != 0) RequestRemittance = RequestRemittance.Where(w => w.CODID == CODID); //----------- var RequestReceipt = _ReceiptRepo.Get(w => w.cODItem.CompanyID == CompanyID && !w.Deleted) .Select(s => new CirculationDto { ID = s.ID, CODID = s.CODID, CODTitle = s.cODItem.Title, Date = s.Date.ShamciToFormatShamci(), Count = s.Count, info = s.info, Type = TypeCirculation.Receipt, ModelTypeID = (int)s.Type, ModelTypeTitle = s.Type.GetEnumDisplayName(), invoiceID = s.InvoiceID, ForSale = s.ForSale, CreateDt = s.CreateDt, }); if (!string.IsNullOrEmpty(date)) RequestReceipt = RequestReceipt.Where(w => w.Date == date); if (CODID != 0) RequestReceipt = RequestReceipt.Where(w => w.CODID == CODID); var itemsReceipt = await RequestReceipt.ToListAsync(); var Remittance = await RequestRemittance.ToListAsync(); return await itemsReceipt.Union(Remittance).OrderByDescending(o => o.CreateDt).Paging(PageIndex, PageSize); // return await RequestReceipt.Union(RequestRemittance).OrderByDescending(o => o.Date).Paging(PageIndex, PageSize); //var list = await RequestReceipt.ToListAsync(); //list.AddRange(await RequestRemittance.ToListAsync()); //return await list.OrderByDescending(o=>o.Date).AsQueryable().Paging(PageIndex, PageSize); } public async Task Inventory(int CompanyID, int CODID) { var CReceipt = await _ReceiptRepo.Get(w => w.cODItem.CompanyID == CompanyID && w.CODID == CODID && w.ForSale && !w.Deleted).SumAsync(s => s.Count); var CRemittance = await _RemittanceRepo.Get(w => w.cODItem.CompanyID == CompanyID && w.CODID == CODID && !w.Deleted).SumAsync(s => s.Count); return CReceipt - CRemittance; } } }