Added the API to get list pending expenses according to permissions
This commit is contained in:
parent
541ed28bd2
commit
9332d9cc0b
@ -1,10 +1,13 @@
|
|||||||
using Marco.Pms.DataAccess.Data;
|
using AutoMapper;
|
||||||
|
using Marco.Pms.DataAccess.Data;
|
||||||
using Marco.Pms.Model.Activities;
|
using Marco.Pms.Model.Activities;
|
||||||
using Marco.Pms.Model.Dtos.Attendance;
|
using Marco.Pms.Model.Dtos.Attendance;
|
||||||
using Marco.Pms.Model.Employees;
|
using Marco.Pms.Model.Employees;
|
||||||
|
using Marco.Pms.Model.Entitlements;
|
||||||
using Marco.Pms.Model.Projects;
|
using Marco.Pms.Model.Projects;
|
||||||
using Marco.Pms.Model.Utilities;
|
using Marco.Pms.Model.Utilities;
|
||||||
using Marco.Pms.Model.ViewModels.DashBoard;
|
using Marco.Pms.Model.ViewModels.DashBoard;
|
||||||
|
using Marco.Pms.Model.ViewModels.Expanses;
|
||||||
using Marco.Pms.Services.Service;
|
using Marco.Pms.Services.Service;
|
||||||
using Marco.Pms.Services.Service.ServiceInterfaces;
|
using Marco.Pms.Services.Service.ServiceInterfaces;
|
||||||
using MarcoBMS.Services.Helpers;
|
using MarcoBMS.Services.Helpers;
|
||||||
@ -25,20 +28,29 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
private readonly IProjectServices _projectServices;
|
private readonly IProjectServices _projectServices;
|
||||||
private readonly ILoggingService _logger;
|
private readonly ILoggingService _logger;
|
||||||
private readonly PermissionServices _permissionServices;
|
private readonly PermissionServices _permissionServices;
|
||||||
|
private readonly IServiceScopeFactory _serviceScopeFactory;
|
||||||
public static readonly Guid ActiveId = Guid.Parse("b74da4c2-d07e-46f2-9919-e75e49b12731");
|
public static readonly Guid ActiveId = Guid.Parse("b74da4c2-d07e-46f2-9919-e75e49b12731");
|
||||||
private static readonly Guid Draft = Guid.Parse("297e0d8f-f668-41b5-bfea-e03b354251c8");
|
private static readonly Guid Draft = Guid.Parse("297e0d8f-f668-41b5-bfea-e03b354251c8");
|
||||||
|
private static readonly Guid Review = Guid.Parse("6537018f-f4e9-4cb3-a210-6c3b2da999d7");
|
||||||
|
private static readonly Guid Approve = Guid.Parse("4068007f-c92f-4f37-a907-bc15fe57d4d8");
|
||||||
private static readonly Guid ProcessPending = Guid.Parse("f18c5cfd-7815-4341-8da2-2c2d65778e27");
|
private static readonly Guid ProcessPending = Guid.Parse("f18c5cfd-7815-4341-8da2-2c2d65778e27");
|
||||||
private static readonly Guid Processed = Guid.Parse("61578360-3a49-4c34-8604-7b35a3787b95");
|
private static readonly Guid Processed = Guid.Parse("61578360-3a49-4c34-8604-7b35a3787b95");
|
||||||
private static readonly Guid RejectedByReviewer = Guid.Parse("965eda62-7907-4963-b4a1-657fb0b2724b");
|
private static readonly Guid RejectedByReviewer = Guid.Parse("965eda62-7907-4963-b4a1-657fb0b2724b");
|
||||||
private static readonly Guid RejectedByApprover = Guid.Parse("d1ee5eec-24b6-4364-8673-a8f859c60729");
|
private static readonly Guid RejectedByApprover = Guid.Parse("d1ee5eec-24b6-4364-8673-a8f859c60729");
|
||||||
private readonly Guid tenantId;
|
private readonly Guid tenantId;
|
||||||
|
|
||||||
public DashboardController(ApplicationDbContext context, UserHelper userHelper, IProjectServices projectServices, ILoggingService logger, PermissionServices permissionServices)
|
public DashboardController(ApplicationDbContext context,
|
||||||
|
UserHelper userHelper,
|
||||||
|
IProjectServices projectServices,
|
||||||
|
IServiceScopeFactory serviceScopeFactory,
|
||||||
|
ILoggingService logger,
|
||||||
|
PermissionServices permissionServices)
|
||||||
{
|
{
|
||||||
_context = context;
|
_context = context;
|
||||||
_userHelper = userHelper;
|
_userHelper = userHelper;
|
||||||
_projectServices = projectServices;
|
_projectServices = projectServices;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
_serviceScopeFactory = serviceScopeFactory;
|
||||||
_permissionServices = permissionServices;
|
_permissionServices = permissionServices;
|
||||||
tenantId = userHelper.GetTenantId();
|
tenantId = userHelper.GetTenantId();
|
||||||
}
|
}
|
||||||
@ -608,7 +620,7 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
{
|
{
|
||||||
var expensesQuery = _context.Expenses
|
var expensesQuery = _context.Expenses
|
||||||
.Include(e => e.Project)
|
.Include(e => e.Project)
|
||||||
.Where(e => e.TenantId == tenantId && e.StatusId != Draft && e.Project != null);
|
.Where(e => e.TenantId == tenantId && e.IsActive && e.StatusId != Draft && e.Project != null);
|
||||||
|
|
||||||
if (startDate.HasValue && endDate.HasValue)
|
if (startDate.HasValue && endDate.HasValue)
|
||||||
{
|
{
|
||||||
@ -641,12 +653,13 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
|
|
||||||
return Ok(ApiResponse<object>.SuccessResponse(response, "Expense report by project fetched successfully", 200));
|
return Ok(ApiResponse<object>.SuccessResponse(response, "Expense report by project fetched successfully", 200));
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("expense/type")]
|
[HttpGet("expense/type")]
|
||||||
public async Task<IActionResult> GetExpenseReportByExpenseType([FromQuery] Guid? projectId, [FromQuery] DateTime? startDate, [FromQuery] DateTime? endDate)
|
public async Task<IActionResult> GetExpenseReportByExpenseType([FromQuery] Guid? projectId, [FromQuery] DateTime? startDate, [FromQuery] DateTime? endDate)
|
||||||
{
|
{
|
||||||
var expensesQuery = _context.Expenses
|
var expensesQuery = _context.Expenses
|
||||||
.Include(e => e.Project)
|
.Include(e => e.Project)
|
||||||
.Where(e => e.TenantId == tenantId && e.StatusId != Draft && e.Project != null);
|
.Where(e => e.TenantId == tenantId && e.IsActive && e.StatusId != Draft && e.Project != null);
|
||||||
|
|
||||||
if (projectId.HasValue)
|
if (projectId.HasValue)
|
||||||
{
|
{
|
||||||
@ -684,5 +697,60 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
|
|
||||||
return Ok(ApiResponse<object>.SuccessResponse(response, "Expense report by expense type fetched successfully", 200));
|
return Ok(ApiResponse<object>.SuccessResponse(response, "Expense report by expense type fetched successfully", 200));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet("expense/pendings")]
|
||||||
|
public async Task<IActionResult> GetPendingExpenseListAsync()
|
||||||
|
{
|
||||||
|
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||||
|
|
||||||
|
using var scope = _serviceScopeFactory.CreateScope();
|
||||||
|
var _mapper = scope.ServiceProvider.GetRequiredService<IMapper>();
|
||||||
|
|
||||||
|
var hasReviewPermissionTask = Task.Run(async () =>
|
||||||
|
{
|
||||||
|
var _permission = scope.ServiceProvider.GetRequiredService<PermissionServices>();
|
||||||
|
return await _permission.HasPermission(PermissionsMaster.ExpenseReview, loggedInEmployee.Id);
|
||||||
|
});
|
||||||
|
|
||||||
|
var hasApprovePermissionTask = Task.Run(async () =>
|
||||||
|
{
|
||||||
|
var _permission = scope.ServiceProvider.GetRequiredService<PermissionServices>();
|
||||||
|
return await _permission.HasPermission(PermissionsMaster.ExpenseApprove, loggedInEmployee.Id);
|
||||||
|
});
|
||||||
|
|
||||||
|
var hasProcessPermissionTask = Task.Run(async () =>
|
||||||
|
{
|
||||||
|
var _permission = scope.ServiceProvider.GetRequiredService<PermissionServices>();
|
||||||
|
return await _permission.HasPermission(PermissionsMaster.ExpenseProcess, loggedInEmployee.Id);
|
||||||
|
});
|
||||||
|
|
||||||
|
await Task.WhenAll(hasReviewPermissionTask, hasApprovePermissionTask, hasProcessPermissionTask);
|
||||||
|
|
||||||
|
var hasReviewPermission = hasReviewPermissionTask.Result;
|
||||||
|
var hasApprovePermission = hasApprovePermissionTask.Result;
|
||||||
|
var hasProcessPermission = hasProcessPermissionTask.Result;
|
||||||
|
|
||||||
|
var expenses = await _context.Expenses
|
||||||
|
.Include(e => e.PaidBy)
|
||||||
|
.Include(e => e.CreatedBy)
|
||||||
|
.Include(e => e.ProcessedBy)
|
||||||
|
.Include(e => e.ApprovedBy)
|
||||||
|
.Include(e => e.ReviewedBy)
|
||||||
|
.Include(e => e.PaymentMode)
|
||||||
|
.Include(e => e.Project)
|
||||||
|
.Include(e => e.PaymentMode)
|
||||||
|
.Include(e => e.ExpensesType)
|
||||||
|
.Include(e => e.Status)
|
||||||
|
.Where(e => e.IsActive && e.TenantId == tenantId &&
|
||||||
|
e.StatusId == Draft ||
|
||||||
|
(hasReviewPermission && e.StatusId == Review) ||
|
||||||
|
(hasApprovePermission && e.StatusId == Approve) ||
|
||||||
|
(hasProcessPermission && e.StatusId == ProcessPending)
|
||||||
|
).ToListAsync();
|
||||||
|
|
||||||
|
var response = _mapper.Map<List<ExpenseList>>(expenses);
|
||||||
|
|
||||||
|
return Ok(ApiResponse<object>.SuccessResponse(new { }, "Pending Expenses fetched successfully", 200));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user