From 0414c2366ebd8e67f74004e5cdd71701f0effdba Mon Sep 17 00:00:00 2001 From: "ashutosh.nehete" Date: Fri, 23 May 2025 17:42:55 +0530 Subject: [PATCH] Implemented an API to retrieve a pending checkout and pending regularization request for logged in employee --- .../Controllers/DashboardController.cs | 43 +++++++++++++++++-- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/Marco.Pms.Services/Controllers/DashboardController.cs b/Marco.Pms.Services/Controllers/DashboardController.cs index f8ce2a4..e1c6014 100644 --- a/Marco.Pms.Services/Controllers/DashboardController.cs +++ b/Marco.Pms.Services/Controllers/DashboardController.cs @@ -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 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? projectProgressionVMs = new List(); @@ -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.SuccessResponse(projectProgressionVMs, "Success", 200)); @@ -134,6 +142,7 @@ namespace Marco.Pms.Services.Controllers public async Task 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.SuccessResponse(projectDashboardVM, "Success", 200)); } @@ -153,6 +163,7 @@ namespace Marco.Pms.Services.Controllers public async Task 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.SuccessResponse(teamDashboardVM, "Success", 200)); } @@ -171,7 +183,7 @@ namespace Marco.Pms.Services.Controllers public async Task 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.SuccessResponse(tasksDashboardVM, "Success", 200)); } + + [HttpGet("pending-attendance")] + public async Task 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.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.ErrorResponse("No attendance entry was found for this employee", "No attendance entry was found for this employee", 404)); + } + + } }