using Distribution.Features.Stock; using Distribution.Infra.Authorization; using Distribution.Infra.UoW; using Distribution.Models; namespace Distribution.Features.Invoice; public class InvoiceService( IInvoiceRepository repo, IUnitOfWork uow, ICurrentUserService currentUser) { private static InvoiceResponse ToResponse(Models.Invoice i) => new(i.Id, i.FK_ShopPOId, i.ShopPO?.Store?.StoreName ?? string.Empty, i.Status, i.PaymentStatus, i.CreatedBy, i.PrintedAt, i.PrintedBy, i.FinalizedAt, i.FinalizedBy, i.TotalAmount, i.IsActive, i.CreatedAt); public async Task GetByIdAsync(Guid id) { var invoice = await repo.GetByIdAsync(id); return invoice is null ? null : ToResponse(invoice); } public async Task> GetAllAsync(Guid? agentId, Guid? routeId, Guid? shopId, InvoiceStatus? status, int page, int pageSize) { var total = await repo.GetCountAsync(agentId, routeId, shopId, status); var items = await repo.GetAllAsync(agentId, routeId, shopId, status, page, pageSize); return new PagedResponse(page, pageSize, total, items.Select(ToResponse).ToList()); } }