using Indotalent.Infrastructure.Database; using MediatR; using Microsoft.EntityFrameworkCore; namespace Indotalent.Features.Sales.SalesOrder.Cqrs; public class GetSalesOrderListResponse { public string? Id { get; set; } public string? AutoNumber { get; set; } public DateTime? OrderDate { get; set; } public string? CustomerName { get; set; } public string? SalesOrderGroupName { get; set; } public string? SalesOrderCategoryName { get; set; } public decimal? AfterTaxAmount { get; set; } public Data.Enums.SalesOrderStatus OrderStatus { get; set; } } public record GetSalesOrderListQuery() : IRequest>; public class GetSalesOrderListHandler : IRequestHandler> { private readonly AppDbContext _context; public GetSalesOrderListHandler(AppDbContext context) => _context = context; public async Task> Handle(GetSalesOrderListQuery request, CancellationToken cancellationToken) { return await _context.SalesOrder .AsNoTracking() .Include(x => x.Customer) .Include(x => x.SalesOrderGroup) .Include(x => x.SalesOrderCategory) .OrderByDescending(x => x.CreatedAt) .Select(x => new GetSalesOrderListResponse { Id = x.Id, AutoNumber = x.AutoNumber, OrderDate = x.OrderDate, CustomerName = x.Customer != null ? x.Customer.Name : string.Empty, SalesOrderGroupName = x.SalesOrderGroup != null ? x.SalesOrderGroup.Name : string.Empty, SalesOrderCategoryName = x.SalesOrderCategory != null ? x.SalesOrderCategory.Name : string.Empty, AfterTaxAmount = x.AfterTaxAmount, OrderStatus = x.OrderStatus }).ToListAsync(cancellationToken); } }