diff --git a/Marco.Pms.Services/Service/ExpensesService.cs b/Marco.Pms.Services/Service/ExpensesService.cs index 7d07bf2..389e92c 100644 --- a/Marco.Pms.Services/Service/ExpensesService.cs +++ b/Marco.Pms.Services/Service/ExpensesService.cs @@ -3368,26 +3368,42 @@ namespace Marco.Pms.Services.Service try { // Base query: select employees who have advance payment transactions for the tenant - var employeeQuery = _context.AdvancePaymentTransactions + var advancePaymentQuery = _context.AdvancePaymentTransactions .Include(apt => apt.Employee) .ThenInclude(e => e!.JobRole) - .Where(apt => apt.TenantId == tenantId && apt.Employee != null) - .Select(apt => apt.Employee!); + .Where(apt => apt.TenantId == tenantId && apt.Employee != null && apt.Employee.JobRole != null); + // Apply search filter if provided (concatenate first and last name for full name search) if (!string.IsNullOrWhiteSpace(searchString)) { - employeeQuery = employeeQuery.Where(e => - (e.FirstName + " " + e.LastName).Contains(searchString)); + advancePaymentQuery = advancePaymentQuery.Where(apt => + (apt.Employee!.FirstName + " " + apt.Employee.LastName).Contains(searchString)); } // Fetch distinct employees matching criteria - var employees = await employeeQuery - .Distinct() + var employees = await advancePaymentQuery .ToListAsync(); // Map to response view model - var response = _mapper.Map>(employees); + var response = employees + .GroupBy(apt => apt.EmployeeId) + .Select(g => new + { + EmployeeId = g.Key, + Employee = g.OrderByDescending(apt => apt.CreatedAt).Select(apt => new + { + Id = apt.Employee!.Id, + FirstName = apt.Employee.FirstName, + LastName = apt.Employee.LastName, + JobRoleName = apt.Employee.JobRole!.Name, + BalanceAmount = apt.CurrentBalance + }).FirstOrDefault() + }) + .Where(e => e.Employee != null) + .Select(e => e.Employee!) + .OrderBy(e => e.FirstName).ThenBy(e => e.LastName) + .ToList(); _logger.LogInfo("Fetched {Count} employees with advance payments for TenantId: {TenantId}", employees.Count, tenantId); @@ -3406,6 +3422,7 @@ namespace Marco.Pms.Services.Service } } + #endregion #region =================================================================== Helper Functions ===================================================================