diff --git a/Marco.Pms.Model/Mapper/ProjectMapper.cs b/Marco.Pms.Model/Mapper/ProjectMapper.cs index 75588c5..959f9c7 100644 --- a/Marco.Pms.Model/Mapper/ProjectMapper.cs +++ b/Marco.Pms.Model/Mapper/ProjectMapper.cs @@ -61,6 +61,19 @@ namespace Marco.Pms.Model.Mapper }; } + public static ProjectAllocation ToProjectAllocationOrDeallocationFromProjectAllocationDto(this ProjectAllocationDot model, Guid TenantId,Guid employeeId) + { + return new ProjectAllocation + { + AllocationDate = DateTime.Now, + EmployeeId = employeeId, + JobRoleId = model.JobRoleId, + TenantId = TenantId, + ProjectId = model.ProjectId + + }; + } + public static ProjectListVM ToProjectListVMFromProject(this Project project) { return new ProjectListVM diff --git a/Marco.Pms.Services/Controllers/ProjectController.cs b/Marco.Pms.Services/Controllers/ProjectController.cs index 3ac5a69..a840331 100644 --- a/Marco.Pms.Services/Controllers/ProjectController.cs +++ b/Marco.Pms.Services/Controllers/ProjectController.cs @@ -665,14 +665,14 @@ namespace MarcoBMS.Services.Controllers } List projectList = await _context.ProjectAllocations - .Where(c => c.TenantId == tenantId && c.EmployeeId == employeeId) + .Where(c => c.TenantId == tenantId && c.EmployeeId == employeeId && c.IsActive == true) .Select(c => c.ProjectId).Distinct() .ToListAsync(); - if (!projectList.Any()) - { - return NotFound(ApiResponse.SuccessResponse(new List(), "No projects found.",404)); - } + //if (!projectList.Any()) + //{ + // return NotFound(ApiResponse.SuccessResponse(new List(), "No projects found.",404)); + //} List projectlist = await _context.Projects @@ -691,8 +691,91 @@ namespace MarcoBMS.Services.Controllers return Ok(ApiResponse.SuccessResponse(projects, "Success.", 200)); } + [HttpPost("assign-projects/{employeeId}")] + public async Task AssignOrUnassigendToProject([FromBody] List projectAllocationDots, [FromRoute] Guid employeeId) + { + Guid tenantId = _userHelper.GetTenantId(); + if (projectAllocationDots != null) + { + Guid TenentID = GetTenantId(); + List? result = new List(); + foreach (var item in projectAllocationDots) + { + try + { + ProjectAllocation projectAllocation = item.ToProjectAllocationFromProjectAllocationDto(TenentID); + ProjectAllocation? projectAllocationFromDb = await _context.ProjectAllocations.Where(c => c.EmployeeId == projectAllocation.EmployeeId + && c.ProjectId == projectAllocation.ProjectId + && c.ReAllocationDate == null + && c.TenantId == TenentID).SingleOrDefaultAsync(); + + if (projectAllocationFromDb != null) + { + _context.ProjectAllocations.Attach(projectAllocationFromDb); + + if (item.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.Now; + 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(); + var result1 = new + { + Id = projectAllocation.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); + } + + } + catch (Exception ex) + { + return Ok(ApiResponse.ErrorResponse(ex.Message, ex, 400)); + } + } + + return Ok(ApiResponse.SuccessResponse(result, "Data saved successfully", 200)); + + } + return BadRequest(ApiResponse.ErrorResponse("Invalid details.", "Work Item Details are not valid.", 400)); + } + } } \ No newline at end of file