initial commit

This commit is contained in:
2026-07-21 14:08:10 +07:00
commit f7cf118326
533 changed files with 41762 additions and 0 deletions
@@ -0,0 +1,93 @@
using Indotalent.ConfigBackEnd.Exceptions;
using Indotalent.Infrastructure.Database;
using MediatR;
using Microsoft.EntityFrameworkCore;
namespace Indotalent.Features.Payroll.PayrollDetails.Cqrs;
public class GetPayrollSlipByIdRequest
{
public string? Id { get; set; }
}
public class GetPayrollSlipByIdResponse
{
public string? Id { get; set; }
public string? EmployeeName { get; set; }
public string? EmployeeCode { get; set; }
public string? DesignationName { get; set; }
public string? DepartmentName { get; set; }
public string? PeriodName { get; set; }
public DateTime FromDate { get; set; }
public DateTime ToDate { get; set; }
public decimal BasicSalary { get; set; }
public decimal TotalIncome { get; set; }
public decimal TotalDeduction { get; set; }
public decimal TakeHomePay { get; set; }
public List<PayrollSlipComponentResponse> Incomes { get; set; } = new();
public List<PayrollSlipComponentResponse> Deductions { get; set; } = new();
}
public class PayrollSlipComponentResponse
{
public string? ComponentName { get; set; }
public decimal Amount { get; set; }
}
public record GetPayrollSlipByIdQuery(GetPayrollSlipByIdRequest Data) : IRequest<GetPayrollSlipByIdResponse>;
public class GetPayrollSlipByIdHandler : IRequestHandler<GetPayrollSlipByIdQuery, GetPayrollSlipByIdResponse>
{
private readonly AppDbContext _context;
public GetPayrollSlipByIdHandler(AppDbContext context) => _context = context;
public async Task<GetPayrollSlipByIdResponse> Handle(GetPayrollSlipByIdQuery request, CancellationToken cancellationToken)
{
var data = await _context.PayrollDetail
.Include(x => x.PayrollProcess)
.Include(x => x.Components)
.Include(x => x.Employee)
.ThenInclude(e => e!.Designation)
.Include(x => x.Employee)
.ThenInclude(e => e!.Department)
.FirstOrDefaultAsync(x => x.Id == request.Data.Id, cancellationToken);
if (data == null)
{
throw new NotFoundException("Payroll Detail", request.Data.Id ?? string.Empty);
}
var response = new GetPayrollSlipByIdResponse
{
Id = data.Id,
EmployeeName = data.EmployeeName,
EmployeeCode = data.EmployeeCode,
DesignationName = data.Employee?.Designation?.Name,
DepartmentName = data.Employee?.Department?.Name,
PeriodName = data.PayrollProcess?.PeriodName,
FromDate = data.PayrollProcess?.FromDate ?? DateTime.MinValue,
ToDate = data.PayrollProcess?.ToDate ?? DateTime.MinValue,
BasicSalary = data.BasicSalary,
TotalIncome = data.TotalIncome,
TotalDeduction = data.TotalDeduction,
TakeHomePay = data.TakeHomePay,
Incomes = data.Components
.Where(c => c.ComponentType == "Income")
.Select(c => new PayrollSlipComponentResponse
{
ComponentName = c.ComponentName,
Amount = c.Amount
}).ToList(),
Deductions = data.Components
.Where(c => c.ComponentType == "Deduction")
.Select(c => new PayrollSlipComponentResponse
{
ComponentName = c.ComponentName,
Amount = c.Amount
}).ToList()
};
return response;
}
}