From b4cb81772e3abd14631a8643dbf3a8a5f524ef12 Mon Sep 17 00:00:00 2001 From: "ashutosh.nehete" Date: Tue, 19 Aug 2025 11:31:14 +0530 Subject: [PATCH] Added the function to re activeate the employee --- .../Controllers/EmployeeController.cs | 150 ++++++++++-------- 1 file changed, 84 insertions(+), 66 deletions(-) diff --git a/Marco.Pms.Services/Controllers/EmployeeController.cs b/Marco.Pms.Services/Controllers/EmployeeController.cs index 3f39412..446794a 100644 --- a/Marco.Pms.Services/Controllers/EmployeeController.cs +++ b/Marco.Pms.Services/Controllers/EmployeeController.cs @@ -512,86 +512,104 @@ namespace MarcoBMS.Services.Controllers } [HttpDelete("{id}")] - public async Task SuspendEmployee(Guid id) + public async Task SuspendEmployee(Guid id, [FromQuery] bool active = false) { Guid tenantId = _userHelper.GetTenantId(); var LoggedEmployee = await _userHelper.GetCurrentEmployeeAsync(); Employee? employee = await _context.Employees.FirstOrDefaultAsync(e => e.Id == id && e.IsActive && e.TenantId == tenantId); - if (employee != null) + if (employee == null) { - if (employee.IsSystem) + _logger.LogWarning("Employee with ID {EmploueeId} not found in database", id); + return NotFound(ApiResponse.ErrorResponse("Employee Not found successfully", "Employee Not found successfully", 404)); + } + if (employee.IsSystem) + { + _logger.LogWarning("Employee with ID {LoggedEmployeeId} tries to suspend system-defined employee with ID {EmployeeId}", LoggedEmployee.Id, employee.Id); + return BadRequest(ApiResponse.ErrorResponse("System-defined employees cannot be suspended.", "System-defined employees cannot be suspended.", 400)); + } + var assignedToTasks = await _context.TaskMembers.Where(t => t.EmployeeId == employee.Id).ToListAsync(); + if (assignedToTasks.Count != 0) + { + List taskIds = assignedToTasks.Select(t => t.TaskAllocationId).ToList(); + var tasks = await _context.TaskAllocations.Where(t => taskIds.Contains(t.Id)).ToListAsync(); + + foreach (var assignedToTask in assignedToTasks) { - _logger.LogWarning("Employee with ID {LoggedEmployeeId} tries to suspend system-defined employee with ID {EmployeeId}", LoggedEmployee.Id, employee.Id); - return BadRequest(ApiResponse.ErrorResponse("System-defined employees cannot be suspended.", "System-defined employees cannot be suspended.", 400)); + var task = tasks.Find(t => t.Id == assignedToTask.TaskAllocationId); + if (task != null && task.CompletedTask == 0) + { + _logger.LogWarning("Employee with ID {EmployeeId} is currently assigned to any incomplete task", employee.Id); + return BadRequest(ApiResponse.ErrorResponse("Employee is currently assigned to any incomplete task", "Employee is currently assigned to any incomplete task", 400)); + } } - else + } + var attendance = await _context.Attendes.Where(a => a.EmployeeID == employee.Id && (a.OutTime == null || a.Activity == ATTENDANCE_MARK_TYPE.REQUEST_REGULARIZE)).ToListAsync(); + if (attendance.Count != 0) + { + _logger.LogWarning("Employee with ID {EmployeeId} have any pending check-out or regularization requests", employee.Id); + return BadRequest(ApiResponse.ErrorResponse("Employee have any pending check-out or regularization requests", "Employee have any pending check-out or regularization requests", 400)); + } + if (active) + { + employee.IsActive = true; + var user = await _context.ApplicationUsers.FirstOrDefaultAsync(u => u.Id == employee.ApplicationUserId); + if (user != null) { - var assignedToTasks = await _context.TaskMembers.Where(t => t.EmployeeId == employee.Id).ToListAsync(); - if (assignedToTasks.Count != 0) - { - List taskIds = assignedToTasks.Select(t => t.TaskAllocationId).ToList(); - var tasks = await _context.TaskAllocations.Where(t => taskIds.Contains(t.Id)).ToListAsync(); + user.IsActive = true; + _logger.LogInfo("The application user associated with employee ID {EmployeeId} has been actived.", employee.Id); - foreach (var assignedToTask in assignedToTasks) - { - var task = tasks.Find(t => t.Id == assignedToTask.TaskAllocationId); - if (task != null && task.CompletedTask == 0) - { - _logger.LogWarning("Employee with ID {EmployeeId} is currently assigned to any incomplete task", employee.Id); - return BadRequest(ApiResponse.ErrorResponse("Employee is currently assigned to any incomplete task", "Employee is currently assigned to any incomplete task", 400)); - } - } - } - var attendance = await _context.Attendes.Where(a => a.EmployeeID == employee.Id && (a.OutTime == null || a.Activity == ATTENDANCE_MARK_TYPE.REQUEST_REGULARIZE)).ToListAsync(); - if (attendance.Count != 0) - { - _logger.LogWarning("Employee with ID {EmployeeId} have any pending check-out or regularization requests", employee.Id); - return BadRequest(ApiResponse.ErrorResponse("Employee have any pending check-out or regularization requests", "Employee have any pending check-out or regularization requests", 400)); - } - employee.IsActive = false; - var projectAllocations = await _context.ProjectAllocations.Where(a => a.EmployeeId == employee.Id).ToListAsync(); - if (projectAllocations.Count != 0) - { - List allocations = new List(); - foreach (var projectAllocation in projectAllocations) - { - projectAllocation.ReAllocationDate = DateTime.UtcNow; - projectAllocation.IsActive = false; - allocations.Add(projectAllocation); - } - _logger.LogInfo("Employee with ID {EmployeeId} has been removed from all assigned projects.", employee.Id); - } - var user = await _context.ApplicationUsers.FirstOrDefaultAsync(u => u.Id == employee.ApplicationUserId); - if (user != null) - { - user.IsActive = false; - _logger.LogInfo("The application user associated with employee ID {EmployeeId} has been suspended.", employee.Id); - - var refreshTokens = await _context.RefreshTokens.AsNoTracking().Where(t => t.UserId == user.Id).ToListAsync(); - if (refreshTokens.Count != 0) - { - _context.RefreshTokens.RemoveRange(refreshTokens); - _logger.LogInfo("Refresh tokens associated with employee ID {EmployeeId} has been removed.", employee.Id); - } - - } - var roleMapping = await _context.EmployeeRoleMappings.AsNoTracking().Where(r => r.EmployeeId == employee.Id).ToListAsync(); - if (roleMapping.Count != 0) - { - _context.EmployeeRoleMappings.RemoveRange(roleMapping); - _logger.LogInfo("Application role mapping associated with employee ID {EmployeeId} has been removed.", employee.Id); - } - await _context.SaveChangesAsync(); - _logger.LogInfo("Employee with ID {EmployeId} Deleted successfully", employee.Id); - var notification = new { LoggedInUserId = LoggedEmployee.Id, Keyword = "Employee", EmployeeId = employee.Id }; - - await _signalR.Clients.All.SendAsync("NotificationEventHandler", notification); } + _logger.LogInfo("Employee with ID {EmployeId} Actived successfully", employee.Id); } else { - _logger.LogWarning("Employee with ID {EmploueeId} not found in database", id); + employee.IsActive = false; + var projectAllocations = await _context.ProjectAllocations.Where(a => a.EmployeeId == employee.Id).ToListAsync(); + if (projectAllocations.Count != 0) + { + List allocations = new List(); + foreach (var projectAllocation in projectAllocations) + { + projectAllocation.ReAllocationDate = DateTime.UtcNow; + projectAllocation.IsActive = false; + allocations.Add(projectAllocation); + } + _logger.LogInfo("Employee with ID {EmployeeId} has been removed from all assigned projects.", employee.Id); + } + var user = await _context.ApplicationUsers.FirstOrDefaultAsync(u => u.Id == employee.ApplicationUserId); + if (user != null) + { + user.IsActive = false; + _logger.LogInfo("The application user associated with employee ID {EmployeeId} has been suspended.", employee.Id); + + var refreshTokens = await _context.RefreshTokens.AsNoTracking().Where(t => t.UserId == user.Id).ToListAsync(); + if (refreshTokens.Count != 0) + { + _context.RefreshTokens.RemoveRange(refreshTokens); + _logger.LogInfo("Refresh tokens associated with employee ID {EmployeeId} has been removed.", employee.Id); + } + + } + var roleMapping = await _context.EmployeeRoleMappings.AsNoTracking().Where(r => r.EmployeeId == employee.Id).ToListAsync(); + if (roleMapping.Count != 0) + { + _context.EmployeeRoleMappings.RemoveRange(roleMapping); + _logger.LogInfo("Application role mapping associated with employee ID {EmployeeId} has been removed.", employee.Id); + } + _logger.LogInfo("Employee with ID {EmployeId} Deleted successfully", employee.Id); } + try + { + await _context.SaveChangesAsync(); + } + catch (DbUpdateException ex) + { + _logger.LogError(ex, "Exception Occured While activting/deactivting employee {EmployeeId}", employee.Id); + return StatusCode(500, ApiResponse.ErrorResponse("Internal Error Occured", "Error occured while saving the entity", 500)); + } + var notification = new { LoggedInUserId = LoggedEmployee.Id, Keyword = "Employee", EmployeeId = employee.Id }; + + await _signalR.Clients.All.SendAsync("NotificationEventHandler", notification); return Ok(ApiResponse.SuccessResponse(new { }, "Employee Suspended successfully", 200)); } private static Employee GetNewEmployeeModel(CreateUserDto model, Guid TenantId, string ApplicationUserId)