diff --git a/Marco.Pms.Services/Controllers/ExpenseController.cs b/Marco.Pms.Services/Controllers/ExpenseController.cs index 8c48710..2018306 100644 --- a/Marco.Pms.Services/Controllers/ExpenseController.cs +++ b/Marco.Pms.Services/Controllers/ExpenseController.cs @@ -150,6 +150,14 @@ namespace Marco.Pms.Services.Controllers return StatusCode(response.StatusCode, response); } + [HttpGet("payment-request/filter")] + public async Task GetPaymentRequestFilterObject() + { + var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); + var response = await _expensesService.GetPaymentRequestFilterObjectAsync(loggedInEmployee, tenantId); + return StatusCode(response.StatusCode, response); + } + #endregion #region =================================================================== Payment Request Functions =================================================================== diff --git a/Marco.Pms.Services/Service/ExpensesService.cs b/Marco.Pms.Services/Service/ExpensesService.cs index a8c7a47..26be364 100644 --- a/Marco.Pms.Services/Service/ExpensesService.cs +++ b/Marco.Pms.Services/Service/ExpensesService.cs @@ -1623,6 +1623,37 @@ namespace Marco.Pms.Services.Service return ApiResponse.ErrorResponse("Databsae Exception", ExceptionMapper(dbEx), 500); } } + public async Task> GetPaymentRequestFilterObjectAsync(Employee loggedInEmployee, Guid tenantId) + { + try + { + var paymentRequests = await _context.PaymentRequests + .Include(pr => pr.Currency) + .Include(pr => pr.Project) + .Include(pr => pr.ExpenseCategory) + .Include(pr => pr.ExpenseStatus) + .Include(pr => pr.CreatedBy) + .Where(e => e.TenantId == tenantId) + .ToListAsync(); + + // Construct the final object from the results of the completed tasks. + var response = new + { + Projects = paymentRequests.Where(pr => pr.Project != null).Select(pr => new { Id = pr.Project!.Id, Name = pr.Project.Name }).Distinct().ToList(), + Currency = paymentRequests.Where(pr => pr.Currency != null).Select(pr => new { Id = pr.Currency!.Id, Name = pr.Currency.CurrencyName }).Distinct().ToList(), + CreatedBy = paymentRequests.Where(pr => pr.CreatedBy != null).Select(pr => new { Id = pr.CreatedBy!.Id, Name = $"{pr.CreatedBy.FirstName} {pr.CreatedBy.LastName}" }).Distinct().ToList(), + Status = paymentRequests.Where(pr => pr.ExpenseStatus != null).Select(pr => new { Id = pr.ExpenseStatus!.Id, Name = pr.ExpenseStatus.Name }).Distinct().ToList(), + ExpenseCategory = paymentRequests.Where(pr => pr.ExpenseCategory != null).Select(pr => new { Id = pr.ExpenseCategory!.Id, Name = pr.ExpenseCategory.Name }).Distinct().ToList(), + Payees = paymentRequests.Where(pr => !string.IsNullOrWhiteSpace(pr.Payee)).Select(pr => new { Id = pr.Payee, Name = pr.Payee }).Distinct().ToList() + }; + return ApiResponse.SuccessResponse(response, "Successfully fetched the filter list", 200); + } + catch (Exception ex) + { + _logger.LogError(ex, "Exception occured while fetching the list filters for payment requests"); + return ApiResponse.ErrorResponse("Internal Exception Occured", ExceptionMapper(ex), 500); + } + } #endregion #region =================================================================== Payment Request Functions =================================================================== diff --git a/Marco.Pms.Services/Service/ServiceInterfaces/IExpensesService.cs b/Marco.Pms.Services/Service/ServiceInterfaces/IExpensesService.cs index 4f9253f..e62045a 100644 --- a/Marco.Pms.Services/Service/ServiceInterfaces/IExpensesService.cs +++ b/Marco.Pms.Services/Service/ServiceInterfaces/IExpensesService.cs @@ -21,6 +21,7 @@ namespace Marco.Pms.Services.Service.ServiceInterfaces Task> GetPaymentRequestListAsync(string? searchString, string? filter, bool isActive, int pageSize, int pageNumber, Employee loggedInEmployee, Guid tenantId); Task> GetPaymentRequestDetailsAsync(Guid? id, string? paymentRequestUId, Employee loggedInEmployee, Guid tenantId); Task> GetPayeeNameListAsync(Employee loggedInEmployee, Guid tenantId); + Task> GetPaymentRequestFilterObjectAsync(Employee loggedInEmployee, Guid tenantId); #endregion #region =================================================================== Payment Request Functions ===================================================================