From 681cdd690ce4e36d7827d7a89584321dd050b86e Mon Sep 17 00:00:00 2001 From: Pramod Mahajan Date: Mon, 9 Jun 2025 09:46:30 +0530 Subject: [PATCH 1/2] created new dto for projectAllocation for employee --- Marco.Pms.Model/Dtos/Projects/ProjectAllocationDot.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Marco.Pms.Model/Dtos/Projects/ProjectAllocationDot.cs b/Marco.Pms.Model/Dtos/Projects/ProjectAllocationDot.cs index 1634a84..7a1fd91 100644 --- a/Marco.Pms.Model/Dtos/Projects/ProjectAllocationDot.cs +++ b/Marco.Pms.Model/Dtos/Projects/ProjectAllocationDot.cs @@ -8,4 +8,13 @@ public bool Status { get; set; } } + + + public class ProjectsAllocationDto + { + public Guid ProjectId { get; set; } + public Guid JobRoleId { get; set; } + + public bool Status { get; set; } + } } -- 2.43.0 From 280fc922fff97029cfffe68a513a69fefb6dfedd Mon Sep 17 00:00:00 2001 From: Pramod Mahajan Date: Mon, 9 Jun 2025 09:48:35 +0530 Subject: [PATCH 2/2] created two end pointe for assigne and unassign project for perticular employee --- .../Controllers/ProjectController.cs | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/Marco.Pms.Services/Controllers/ProjectController.cs b/Marco.Pms.Services/Controllers/ProjectController.cs index 00ff1c2..f50225f 100644 --- a/Marco.Pms.Services/Controllers/ProjectController.cs +++ b/Marco.Pms.Services/Controllers/ProjectController.cs @@ -13,6 +13,7 @@ using MarcoBMS.Services.Service; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; namespace MarcoBMS.Services.Controllers { @@ -663,5 +664,122 @@ namespace MarcoBMS.Services.Controllers } + [HttpGet("assigned-projects/{employeeId}")] + public async Task GetProjectsByEmployee([FromRoute] Guid employeeId) + { + + Guid tenantId = _userHelper.GetTenantId(); + if (employeeId == Guid.Empty) + { + return BadRequest(ApiResponse.ErrorResponse("Invalid details.", "Employee id not valid.", 400)); + } + + List projectList = await _context.ProjectAllocations + .Where(c => c.TenantId == tenantId && c.EmployeeId == employeeId && c.IsActive) + .Select(c => c.ProjectId).Distinct() + .ToListAsync(); + + if (!projectList.Any()) + { + return NotFound(ApiResponse.SuccessResponse(new List(), "No projects found.",200)); + } + + + List projectlist = await _context.Projects + .Where(p => projectList.Contains(p.Id)) + .ToListAsync(); + + List projects = new List(); + + + foreach (var project in projectlist) { + + projects.Add(project.ToProjectListVMFromProject()); + } + + + + return Ok(ApiResponse.SuccessResponse(projects, "Success.", 200)); + } + + + + + [HttpPost("assign-projects/{employeeId}")] + public async Task AssigneProjectsToEmployee([FromBody] List projectAllocationDtos, [FromRoute] Guid employeeId) + { + if(projectAllocationDtos != null && employeeId != Guid.Empty) + { + Guid TenentID = GetTenantId(); + List? result = new List(); + + foreach(var projectAllocationDto in projectAllocationDtos) + { + try + { + ProjectAllocation projectAllocation = projectAllocationDto.ToProjectAllocationFromProjectsAllocationDto(TenentID,employeeId); + ProjectAllocation? projectAllocationFromDb = await _context.ProjectAllocations.Where(c => c.EmployeeId == employeeId && c.ProjectId == projectAllocationDto.ProjectId && c.ReAllocationDate == null && c.TenantId == TenentID).SingleOrDefaultAsync(); + + if(projectAllocationFromDb != null) + { + + + _context.ProjectAllocations.Attach(projectAllocationFromDb); + + if (projectAllocationDto.Status) + { + projectAllocationFromDb.JobRoleId = projectAllocation.JobRoleId; ; + projectAllocationFromDb.IsActive = true; + _context.Entry(projectAllocationFromDb).Property(e => e.JobRoleId).IsModified = true; + _context.Entry(projectAllocationFromDb).Property(e => e.IsActive).IsModified = true; + } + else + { + projectAllocationFromDb.ReAllocationDate = DateTime.UtcNow; + projectAllocationFromDb.IsActive = false; + _context.Entry(projectAllocationFromDb).Property(e => e.ReAllocationDate).IsModified = true; + _context.Entry(projectAllocationFromDb).Property(e => e.IsActive).IsModified = true; + } + await _context.SaveChangesAsync(); + var result1 = new + { + Id = projectAllocationFromDb.Id, + EmployeeId = projectAllocation.EmployeeId, + JobRoleId = projectAllocation.JobRoleId, + IsActive = projectAllocation.IsActive, + ProjectId = projectAllocation.ProjectId, + AllocationDate = projectAllocation.AllocationDate, + ReAllocationDate = projectAllocation.ReAllocationDate, + TenantId = projectAllocation.TenantId + }; + result.Add(result1); + } + else + { + projectAllocation.AllocationDate = DateTime.Now; + projectAllocation.IsActive = true; + _context.ProjectAllocations.Add(projectAllocation); + await _context.SaveChangesAsync(); + + } + + + } + catch (Exception ex) { + + return Ok(ApiResponse.ErrorResponse(ex.Message, ex, 400)); + } + } + + return Ok(ApiResponse.SuccessResponse(result, "Data saved successfully", 200)); + } + else + { + return BadRequest(ApiResponse.ErrorResponse("Invalid details.", "All Field is required", 400)); + } + + } + + } } \ No newline at end of file -- 2.43.0