Implemented an API to retrieve a pending checkout and pending regularization request for logged in employee

This commit is contained in:
ashutosh.nehete 2025-05-23 17:42:55 +05:30
parent 68c393c05d
commit 0414c2366e

View File

@ -1,9 +1,11 @@
using Marco.Pms.DataAccess.Data;
using Marco.Pms.Model.Activities;
using Marco.Pms.Model.Dtos.Attendance;
using Marco.Pms.Model.Projects;
using Marco.Pms.Model.Utilities;
using Marco.Pms.Model.ViewModels.DashBoard;
using MarcoBMS.Services.Helpers;
using MarcoBMS.Services.Service;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
@ -17,15 +19,19 @@ namespace Marco.Pms.Services.Controllers
{
private readonly ApplicationDbContext _context;
private readonly UserHelper _userHelper;
public DashboardController(ApplicationDbContext context, UserHelper userHelper)
private readonly ILoggingService _logger;
public DashboardController(ApplicationDbContext context, UserHelper userHelper, ILoggingService logger)
{
_context = context;
_userHelper = userHelper;
_logger = logger;
}
[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();
DateTime toDate = new DateTime();
List<ProjectProgressionVM>? projectProgressionVMs = new List<ProjectProgressionVM>();
@ -78,6 +84,7 @@ namespace Marco.Pms.Services.Controllers
}
flagDays -= 1;
}
_logger.LogInfo("Project Progression report for all projects fetched successfully by employee {EmployeeId}", LoggedInEmployee.Id);
}
else
{
@ -125,6 +132,7 @@ namespace Marco.Pms.Services.Controllers
flagDays -= 1;
}
}
_logger.LogInfo("Project Progression for project {ProjectId} fetched successfully by employee {EmployeeId}", projectId, LoggedInEmployee.Id);
}
}
return Ok(ApiResponse<object>.SuccessResponse(projectProgressionVMs, "Success", 200));
@ -134,6 +142,7 @@ namespace Marco.Pms.Services.Controllers
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();
var projectStatus = await _context.StatusMasters.Where(s => s.Status == "Active" || s.Status == "In Progress").ToListAsync();
@ -145,6 +154,7 @@ namespace Marco.Pms.Services.Controllers
TotalProjects = projects.Count(),
OngoingProjects = ongoingProjects.Count()
};
_logger.LogInfo("Number of total ongoing projects fetched by employee {EmployeeId}", LoggedInEmployee.Id);
return Ok(ApiResponse<object>.SuccessResponse(projectDashboardVM, "Success", 200));
}
@ -153,6 +163,7 @@ namespace Marco.Pms.Services.Controllers
public async Task<IActionResult> GetTotalEmployees()
{
var tenantId = _userHelper.GetTenantId();
var LoggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var date = DateTime.UtcNow.Date;
var Employees = await _context.Employees.Where(e => e.TenantId == tenantId && e.IsActive == true).Select(e => e.Id).ToListAsync();
@ -164,6 +175,7 @@ namespace Marco.Pms.Services.Controllers
TotalEmployees = Employees.Count(),
InToday = checkedInEmployee.Distinct().Count()
};
_logger.LogInfo("Today's total checked in employees fetched by employee {EmployeeId}", LoggedInEmployee.Id);
return Ok(ApiResponse<object>.SuccessResponse(teamDashboardVM, "Success", 200));
}
@ -171,7 +183,7 @@ namespace Marco.Pms.Services.Controllers
public async Task<IActionResult> GetTotalTasks()
{
var tenantId = _userHelper.GetTenantId();
var LoggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var Tasks = await _context.WorkItems.Where(t => t.TenantId == tenantId).Select(t => new { PlannedWork = t.PlannedWork, CompletedWork = t.CompletedWork }).ToListAsync();
TasksDashboardVM tasksDashboardVM = new TasksDashboardVM
{
@ -183,8 +195,33 @@ namespace Marco.Pms.Services.Controllers
tasksDashboardVM.TotalTasks += task.PlannedWork;
tasksDashboardVM.CompletedTasks += task.CompletedWork;
}
_logger.LogInfo("Total targeted tasks and total completed tasks fetched by employee {EmployeeId}", LoggedInEmployee.Id);
return Ok(ApiResponse<object>.SuccessResponse(tasksDashboardVM, "Success", 200));
}
[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();
if (attendance.Any())
{
var pendingRegularization = attendance.Where(a => a.Activity == ATTENDANCE_MARK_TYPE.REQUEST_REGULARIZE).ToList().Count;
var pendingCheckOut = attendance.Where(a => a.OutTime == null).ToList().Count;
var response = new
{
PendingRegularization = pendingRegularization,
PendingCheckOut = pendingCheckOut
};
_logger.LogInfo("Number of pending regularization and pending check-out are fetched successfully for employee {EmployeeId}", LoggedInEmployee.Id);
return Ok(ApiResponse<object>.SuccessResponse(response, "Pending regularization and pending check-out are fetched successfully", 200));
}
_logger.LogError("No attendance entry was found for employee {EmployeeId}", LoggedInEmployee.Id);
return NotFound(ApiResponse<object>.ErrorResponse("No attendance entry was found for this employee", "No attendance entry was found for this employee", 404));
}
}
}