using Indotalent.Infrastructure.Database; using MediatR; using Microsoft.EntityFrameworkCore; namespace Indotalent.Features.Payroll.Payrolls.Cqrs; public class GetPayrollProcessListRequest { } public class GetPayrollProcessListResponse { public string? Id { get; set; } public string? AutoNumber { get; set; } public string? PeriodName { get; set; } public DateTime FromDate { get; set; } public DateTime ToDate { get; set; } public int TotalEmployees { get; set; } public decimal TotalBasicSalary { get; set; } public decimal TotalIncome { get; set; } public decimal TotalDeduction { get; set; } public decimal TotalGross { get; set; } public decimal TotalTakeHomePay { get; set; } public string? Status { get; set; } public string? ProcessedBy { get; set; } public DateTime ProcessedAt { get; set; } public string? Description { get; set; } } public record GetPayrollProcessListQuery(GetPayrollProcessListRequest Data) : IRequest>; public class GetPayrollProcessListHandler : IRequestHandler> { private readonly AppDbContext _context; public GetPayrollProcessListHandler(AppDbContext context) => _context = context; public async Task> Handle(GetPayrollProcessListQuery request, CancellationToken cancellationToken) { var data = await _context.PayrollProcess .OrderByDescending(x => x.FromDate) .Select(x => new GetPayrollProcessListResponse { Id = x.Id, AutoNumber = x.AutoNumber, PeriodName = x.PeriodName, FromDate = x.FromDate, ToDate = x.ToDate, TotalEmployees = x.TotalEmployees, TotalBasicSalary = x.TotalBasicSalary, TotalIncome = x.TotalIncome, TotalDeduction = x.TotalDeduction, TotalGross = x.TotalGross, TotalTakeHomePay = x.TotalTakeHomePay, Status = x.Status, ProcessedBy = x.ProcessedBy, ProcessedAt = x.ProcessedAt, Description = x.Description }) .ToListAsync(cancellationToken); return data; } }