Added the new deashboard report of expenses
This commit is contained in:
parent
0e1d20156f
commit
541ed28bd2
@ -26,6 +26,13 @@ namespace Marco.Pms.Services.Controllers
|
||||
private readonly ILoggingService _logger;
|
||||
private readonly PermissionServices _permissionServices;
|
||||
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 ProcessPending = Guid.Parse("f18c5cfd-7815-4341-8da2-2c2d65778e27");
|
||||
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 RejectedByApprover = Guid.Parse("d1ee5eec-24b6-4364-8673-a8f859c60729");
|
||||
private readonly Guid tenantId;
|
||||
|
||||
public DashboardController(ApplicationDbContext context, UserHelper userHelper, IProjectServices projectServices, ILoggingService logger, PermissionServices permissionServices)
|
||||
{
|
||||
_context = context;
|
||||
@ -33,11 +40,11 @@ namespace Marco.Pms.Services.Controllers
|
||||
_projectServices = projectServices;
|
||||
_logger = logger;
|
||||
_permissionServices = permissionServices;
|
||||
tenantId = userHelper.GetTenantId();
|
||||
}
|
||||
[HttpGet("progression")]
|
||||
public async Task<IActionResult> GetGraph([FromQuery] double days, [FromQuery] string FromDate, [FromQuery] Guid? projectId)
|
||||
{
|
||||
var tenantId = _userHelper.GetTenantId();
|
||||
var LoggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
|
||||
DateTime fromDate = new DateTime();
|
||||
@ -149,7 +156,6 @@ namespace Marco.Pms.Services.Controllers
|
||||
[HttpGet("projects")]
|
||||
public async Task<IActionResult> GetProjectCount()
|
||||
{
|
||||
var tenantId = _userHelper.GetTenantId();
|
||||
var LoggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
|
||||
var projects = await _context.Projects.Where(p => p.TenantId == tenantId).ToListAsync();
|
||||
@ -176,7 +182,6 @@ namespace Marco.Pms.Services.Controllers
|
||||
{
|
||||
try
|
||||
{
|
||||
var tenantId = _userHelper.GetTenantId();
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
|
||||
_logger.LogInfo("GetTotalEmployees called by user {UserId} for ProjectId: {ProjectId}", loggedInEmployee.Id, projectId ?? Guid.Empty);
|
||||
@ -269,7 +274,6 @@ namespace Marco.Pms.Services.Controllers
|
||||
{
|
||||
try
|
||||
{
|
||||
var tenantId = _userHelper.GetTenantId();
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
|
||||
_logger.LogInfo("GetTotalTasks called by user {UserId} for ProjectId: {ProjectId}", loggedInEmployee.Id, projectId ?? Guid.Empty);
|
||||
@ -348,10 +352,10 @@ namespace Marco.Pms.Services.Controllers
|
||||
return StatusCode(500, ApiResponse<object>.ErrorResponse("An internal server error occurred.", null, 500));
|
||||
}
|
||||
}
|
||||
|
||||
[HttpGet("pending-attendance")]
|
||||
public async Task<IActionResult> GetPendingAttendance()
|
||||
{
|
||||
Guid tenantId = _userHelper.GetTenantId();
|
||||
var LoggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
|
||||
var attendance = await _context.Attendes.Where(a => a.EmployeeId == LoggedInEmployee.Id && a.TenantId == tenantId).ToListAsync();
|
||||
@ -374,7 +378,6 @@ namespace Marco.Pms.Services.Controllers
|
||||
[HttpGet("project-attendance/{projectId}")]
|
||||
public async Task<IActionResult> GetProjectAttendance(Guid projectId, [FromQuery] string? date)
|
||||
{
|
||||
Guid tenantId = _userHelper.GetTenantId();
|
||||
var LoggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
|
||||
DateTime currentDate = DateTime.UtcNow;
|
||||
@ -428,7 +431,6 @@ namespace Marco.Pms.Services.Controllers
|
||||
[HttpGet("activities/{projectId}")]
|
||||
public async Task<IActionResult> GetActivities(Guid projectId, [FromQuery] string? date)
|
||||
{
|
||||
Guid tenantId = _userHelper.GetTenantId();
|
||||
var LoggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
|
||||
DateTime currentDate = DateTime.UtcNow;
|
||||
@ -600,5 +602,87 @@ namespace Marco.Pms.Services.Controllers
|
||||
|
||||
return Ok(ApiResponse<object>.SuccessResponse(sortedResult, $"{sortedResult.Count} records fetched for attendance overview", 200));
|
||||
}
|
||||
|
||||
[HttpGet("expense/project")]
|
||||
public async Task<IActionResult> GetExpenseReportByProjects([FromQuery] DateTime? startDate, [FromQuery] DateTime? endDate)
|
||||
{
|
||||
var expensesQuery = _context.Expenses
|
||||
.Include(e => e.Project)
|
||||
.Where(e => e.TenantId == tenantId && e.StatusId != Draft && e.Project != null);
|
||||
|
||||
if (startDate.HasValue && endDate.HasValue)
|
||||
{
|
||||
expensesQuery = expensesQuery.Where(e => e.TransactionDate.Date >= startDate.Value.Date && e.TransactionDate.Date <= endDate.Value.Date);
|
||||
}
|
||||
|
||||
var expenses = await expensesQuery.GroupBy(e => e.Project).ToListAsync();
|
||||
|
||||
var report = expenses.Select(g =>
|
||||
{
|
||||
var totalAmount = g.Sum(e => e.Amount);
|
||||
var totalPendingAmount = g.Where(e => e.StatusId != Processed && e.StatusId != RejectedByReviewer && e.StatusId != RejectedByApprover).Sum(e => e.Amount);
|
||||
var totalRejectedAmount = g.Where(e => e.StatusId == RejectedByReviewer || e.StatusId == RejectedByApprover).Sum(e => e.Amount);
|
||||
var totalProcessedAmount = g.Where(e => e.StatusId == Processed || e.StatusId == ProcessPending).Sum(e => e.Amount);
|
||||
return new
|
||||
{
|
||||
ProjectName = g.Key!.Name,
|
||||
TotalPendingAmount = totalPendingAmount,
|
||||
TotalRejectedAmount = totalRejectedAmount,
|
||||
TotalProcessedAmount = totalProcessedAmount,
|
||||
TotalApprovedAmount = totalAmount
|
||||
};
|
||||
}).OrderBy(r => r.ProjectName).ToList();
|
||||
|
||||
var response = new
|
||||
{
|
||||
Report = report,
|
||||
TotalAmount = report.Sum(r => r.TotalApprovedAmount)
|
||||
};
|
||||
|
||||
return Ok(ApiResponse<object>.SuccessResponse(response, "Expense report by project fetched successfully", 200));
|
||||
}
|
||||
[HttpGet("expense/type")]
|
||||
public async Task<IActionResult> GetExpenseReportByExpenseType([FromQuery] Guid? projectId, [FromQuery] DateTime? startDate, [FromQuery] DateTime? endDate)
|
||||
{
|
||||
var expensesQuery = _context.Expenses
|
||||
.Include(e => e.Project)
|
||||
.Where(e => e.TenantId == tenantId && e.StatusId != Draft && e.Project != null);
|
||||
|
||||
if (projectId.HasValue)
|
||||
{
|
||||
expensesQuery = expensesQuery.Where(e => e.ProjectId == projectId);
|
||||
}
|
||||
|
||||
if (startDate.HasValue && endDate.HasValue)
|
||||
{
|
||||
expensesQuery = expensesQuery.Where(e => e.TransactionDate.Date >= startDate.Value.Date && e.TransactionDate.Date <= endDate.Value.Date);
|
||||
}
|
||||
|
||||
var expenses = await expensesQuery.GroupBy(e => e.ExpensesType).ToListAsync();
|
||||
|
||||
var report = expenses.Select(g =>
|
||||
{
|
||||
var totalAmount = g.Sum(e => e.Amount);
|
||||
var totalPendingAmount = g.Where(e => e.StatusId != Processed && e.StatusId != RejectedByReviewer && e.StatusId != RejectedByApprover).Sum(e => e.Amount);
|
||||
var totalRejectedAmount = g.Where(e => e.StatusId == RejectedByReviewer || e.StatusId == RejectedByApprover).Sum(e => e.Amount);
|
||||
var totalProcessedAmount = g.Where(e => e.StatusId == Processed || e.StatusId == ProcessPending).Sum(e => e.Amount);
|
||||
return new
|
||||
{
|
||||
ProjectName = g.Key!.Name,
|
||||
TotalPendingAmount = totalPendingAmount,
|
||||
TotalRejectedAmount = totalRejectedAmount,
|
||||
TotalProcessedAmount = totalProcessedAmount,
|
||||
TotalApprovedAmount = totalAmount
|
||||
};
|
||||
}).OrderBy(r => r.ProjectName).ToList();
|
||||
|
||||
var response = new
|
||||
{
|
||||
Report = report,
|
||||
TotalAmount = report.Sum(r => r.TotalApprovedAmount)
|
||||
};
|
||||
|
||||
return Ok(ApiResponse<object>.SuccessResponse(response, "Expense report by expense type fetched successfully", 200));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user