Optimized the Advance payment APIs
This commit is contained in:
parent
33a55ed6db
commit
9c6375362e
@ -297,7 +297,7 @@ namespace Marco.Pms.Services.Controllers
|
||||
public async Task<IActionResult> GetAdavncePaymentEmployeeList([FromQuery] string? searchString)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _expensesService.GetAdavncePaymentEmployeeListAsync(searchString, loggedInEmployee, tenantId);
|
||||
var response = await _expensesService.GetAdvancePaymentEmployeeListAsync(searchString, loggedInEmployee, tenantId);
|
||||
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
@ -3120,21 +3120,28 @@ namespace Marco.Pms.Services.Service
|
||||
#region =================================================================== Advance Payment Functions ===================================================================
|
||||
public async Task<ApiResponse<object>> GetAdvancePaymentTransactionAsync(Guid employeeId, Employee loggedInEmployee, Guid tenantId)
|
||||
{
|
||||
_logger.LogInfo("Start GetAdvancePaymentTransactionAsync called by EmployeeId: {EmployeeId} for TenantId: {TenantId} and EmployeeId param: {ParamEmployeeId}",
|
||||
loggedInEmployee.Id, tenantId, employeeId);
|
||||
|
||||
try
|
||||
{
|
||||
// Fetch advance payment transactions for specified employee, including related navigation properties
|
||||
var transactions = await _context.AdvancePaymentTransactions
|
||||
.Include(apt => apt.Project)
|
||||
.Include(apt => apt.Employee)
|
||||
.ThenInclude(e => e!.JobRole)
|
||||
.Include(apt => apt.CreatedBy)
|
||||
.ThenInclude(e => e!.JobRole)
|
||||
.Where(apt => apt.EmployeeId == employeeId && apt.IsActive)
|
||||
.Include(apt => apt.Employee).ThenInclude(e => e!.JobRole)
|
||||
.Include(apt => apt.CreatedBy).ThenInclude(e => e!.JobRole)
|
||||
.Where(apt => apt.EmployeeId == employeeId && apt.TenantId == tenantId && apt.IsActive)
|
||||
.OrderByDescending(apt => apt.CreatedAt)
|
||||
.ToListAsync();
|
||||
|
||||
// Check if any transactions found
|
||||
if (transactions == null || !transactions.Any())
|
||||
{
|
||||
_logger.LogWarning("No advance payment transactions found for EmployeeId: {EmployeeId} in TenantId: {TenantId}.", employeeId, tenantId);
|
||||
return ApiResponse<object>.ErrorResponse("No advance payment transactions found.", null, 404);
|
||||
}
|
||||
|
||||
// Map transactions to view model with formatted FinanceUId
|
||||
var response = transactions.Select(transaction =>
|
||||
{
|
||||
var result = _mapper.Map<AdvancePaymentTransactionVM>(transaction);
|
||||
@ -3142,37 +3149,67 @@ namespace Marco.Pms.Services.Service
|
||||
return result;
|
||||
}).ToList();
|
||||
|
||||
_logger.LogInfo("Fetched {Count} advance payment transactions for EmployeeId: {EmployeeId} in TenantId: {TenantId}.", response.Count, employeeId, tenantId);
|
||||
|
||||
|
||||
return ApiResponse<object>.SuccessResponse(response, "Advance payment transaction fetched successfully", 200);
|
||||
return ApiResponse<object>.SuccessResponse(response, "Advance payment transactions fetched successfully.", 200);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception occurred while fetching the list of Advance Payment Transactions.");
|
||||
_logger.LogError(ex, "Exception occurred in GetAdvancePaymentTransactionAsync for EmployeeId: {EmployeeId} in TenantId: {TenantId}: {Message}",
|
||||
employeeId, tenantId, ex.Message);
|
||||
return ApiResponse<object>.ErrorResponse("Internal exception occurred.", ExceptionMapper(ex), 500);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<ApiResponse<object>> GetAdavncePaymentEmployeeListAsync(string? searchString, Employee loggedInEmployee, Guid tenantId)
|
||||
{
|
||||
var employeeQuery = _context.AdvancePaymentTransactions
|
||||
.Include(apt => apt.Employee)
|
||||
.ThenInclude(e => e!.JobRole)
|
||||
.Where(apt => apt.TenantId == tenantId && apt.Employee != null)
|
||||
.Select(apt => apt.Employee);
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchString))
|
||||
finally
|
||||
{
|
||||
employeeQuery = employeeQuery.Where(e => (e.FirstName + e.LastName).Contains(searchString));
|
||||
_logger.LogInfo("End GetAdvancePaymentTransactionAsync called by EmployeeId: {EmployeeId}", loggedInEmployee.Id);
|
||||
}
|
||||
|
||||
var employees = await employeeQuery
|
||||
.Distinct()
|
||||
.ToListAsync();
|
||||
|
||||
var response = _mapper.Map<List<BasicEmployeeVM>>(employees);
|
||||
return ApiResponse<object>.SuccessResponse(response, "List of employee having advance payment fetched successfully", 200);
|
||||
}
|
||||
public async Task<ApiResponse<object>> GetAdvancePaymentEmployeeListAsync(string? searchString, Employee loggedInEmployee, Guid tenantId)
|
||||
{
|
||||
_logger.LogInfo("Start GetAdvancePaymentEmployeeListAsync called by EmployeeId: {EmployeeId} for TenantId: {TenantId} with SearchString: {SearchString}",
|
||||
loggedInEmployee.Id, tenantId, string.IsNullOrWhiteSpace(searchString) ? "NULL or Empty" : searchString);
|
||||
|
||||
try
|
||||
{
|
||||
// Base query: select employees who have advance payment transactions for the tenant
|
||||
var employeeQuery = _context.AdvancePaymentTransactions
|
||||
.Include(apt => apt.Employee)
|
||||
.ThenInclude(e => e!.JobRole)
|
||||
.Where(apt => apt.TenantId == tenantId && apt.Employee != null)
|
||||
.Select(apt => apt.Employee!);
|
||||
|
||||
// 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));
|
||||
}
|
||||
|
||||
// Fetch distinct employees matching criteria
|
||||
var employees = await employeeQuery
|
||||
.Distinct()
|
||||
.ToListAsync();
|
||||
|
||||
// Map to response view model
|
||||
var response = _mapper.Map<List<BasicEmployeeVM>>(employees);
|
||||
|
||||
_logger.LogInfo("Fetched {Count} employees with advance payments for TenantId: {TenantId}", employees.Count, tenantId);
|
||||
|
||||
return ApiResponse<object>.SuccessResponse(response, "List of employees having advance payments fetched successfully.", 200);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Error in GetAdvancePaymentEmployeeListAsync called by EmployeeId: {EmployeeId} for TenantId: {TenantId}: {Message}",
|
||||
loggedInEmployee.Id, tenantId, ex.Message);
|
||||
|
||||
return ApiResponse<object>.ErrorResponse("An error occurred while fetching employees with advance payments.", ex.Message, 500);
|
||||
}
|
||||
finally
|
||||
{
|
||||
_logger.LogInfo("End GetAdvancePaymentEmployeeListAsync called by EmployeeId: {EmployeeId}", loggedInEmployee.Id);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Helper Functions ===================================================================
|
||||
|
||||
@ -39,7 +39,7 @@ namespace Marco.Pms.Services.Service.ServiceInterfaces
|
||||
|
||||
#region =================================================================== Advance Payment Functions ===================================================================
|
||||
Task<ApiResponse<object>> GetAdvancePaymentTransactionAsync(Guid id, Employee loggedInEmployee, Guid tenantId);
|
||||
Task<ApiResponse<object>> GetAdavncePaymentEmployeeListAsync(string? searchString, Employee loggedInEmployee, Guid tenantId);
|
||||
Task<ApiResponse<object>> GetAdvancePaymentEmployeeListAsync(string? searchString, Employee loggedInEmployee, Guid tenantId);
|
||||
#endregion
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user