/// <summary> /// this method will add employee to the project /// </summary> /// <param name="addEmployeeToProject">EmployeesInProjectDto object</param> /// <returns>returns the employee added to the project</returns> public async Task <EmployeesInProjectDto> AddEmployeeToProject(EmployeesInProjectDto addEmployeeToProject) { var employeeExists = await _projectManagementRepository.FindProjectEmployee(addEmployeeToProject.ProjectId, addEmployeeToProject.EmployeeDetails.EmployeeId); var requirement = await _projectRequirementsRepository.GetRequirement((Guid)addEmployeeToProject.RequirementId); if (employeeExists == null && requirement != null) { var employee = _mapper.Map <ProjectManagement>(addEmployeeToProject.EmployeeDetails); employee.ProjectId = addEmployeeToProject.ProjectId; employee.RequirementId = (Guid)addEmployeeToProject.RequirementId; requirement.ResourceAllocated = addEmployeeToProject.EmployeeDetails.EmployeeId; requirement.LastModifiedAt = DateTime.UtcNow; //requirement.ModifiedBy = id; TODO requirement.IsFullfilled = true; using (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { _projectManagementRepository.AddEmployeeToProject(employee); await _projectManagementRepository.SaveChangesAsync(); await _projectRequirementsRepository.SaveChangesAsync(); ts.Complete(); } return(addEmployeeToProject); } else if (employeeExists.IsDeleted == true && requirement != null) { employeeExists.IsDeleted = false; employeeExists.ProjectManager = addEmployeeToProject.EmployeeDetails.ProjectManager; employeeExists.ProjectReportingManager = addEmployeeToProject.EmployeeDetails.ProjectReportingManager; employeeExists.Role = addEmployeeToProject.EmployeeDetails.Role; employeeExists.PrimaryStatus = addEmployeeToProject.EmployeeDetails.PrimaryStatus; employeeExists.SecondaryStatus = addEmployeeToProject.EmployeeDetails.SecondaryStatus; employeeExists.AllocationStartDate = addEmployeeToProject.EmployeeDetails.AllocationStartDate; employeeExists.AllocationEndDate = addEmployeeToProject.EmployeeDetails.AllocationEndDate; employeeExists.IsManager = addEmployeeToProject.EmployeeDetails.IsManager; employeeExists.RequirementId = (Guid)addEmployeeToProject.RequirementId; requirement.ResourceAllocated = addEmployeeToProject.EmployeeDetails.EmployeeId; requirement.LastModifiedAt = DateTime.UtcNow; //requirement.ModifiedBy = id; TODO requirement.IsFullfilled = true; using (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { await _projectManagementRepository.SaveChangesAsync(); await _projectRequirementsRepository.SaveChangesAsync(); ts.Complete(); } return(addEmployeeToProject); } throw new Exception("Employee already exists !"); }
/// <summary> /// this method is used to soft delete an existing employee's data in the system /// </summary> /// <param name="employeeId">id to indentify the employee to be deleted</param> public async Task DeleteEmployeeAsync(Guid employeeId) { var empId = await _employeeRepository.GetEmployeeByIdAsync(employeeId); if (empId == null) { throw new Exception("Employee not found"); } empId.IsDeleted = true; await _employeeRepository.SaveChangesAsync(); var empSkills = await _employeeSkillRepository.GetEmployeeSkills(empId.Id); if (empSkills == null) { throw new Exception("Employee skills not found"); } empSkills.IsDeleted = true; await _employeeSkillRepository.SaveChangesAsync(); //* These methods of Project management Service (RemoveProjectManagerForEmployee,RemoveReportingManagerForEmployee,RemoveEmployeeFromProject) should have been used but we could not call the interface because of cyclic dependency*// // this will set ProjectReportingManager to null for employee who had this Employee as an ProjectReportingManager var reportee = await _reportingManagerRepository.GetAllReporteeAsync(empId.Id); foreach (var employee in reportee) { var empDetails = await _reportingManagerRepository.GetReportingManager(employee); _reportingManagerRepository.DeleteRecord(empDetails); await _reportingManagerRepository.SaveChangesAsync(); } var listOfReportees = await _projectManagementRepository.GetAllReporteeAsync(empId.Id); foreach (var employee in listOfReportees) { employee.ProjectReportingManager = null; await _projectManagementRepository.SaveChangesAsync(); } var empProject = await _projectManagementRepository.GetAllProjectsOfEmployee(empId.Id); foreach (var project in empProject) { if (project.IsManager == true) { var listOfEmployees = await _projectManagementRepository.GetEmployeesOfProjectManager(empId.Id); foreach (var employee in listOfEmployees) { employee.ProjectManager = null; await _projectManagementRepository.SaveChangesAsync(); } var projectManagement = await _projectManagementRepository.FindProjectEmployee((Guid)project.ProjectId, empId.Id); var projectRequirement = await _projectRequirementsRepository.GetRequirement(projectManagement.RequirementId); projectManagement.IsDeleted = true; projectManagement.AllocationEndDate = DateTime.UtcNow; if (projectRequirement != null) { projectRequirement.IsFullfilled = false; } using (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { await _projectManagementRepository.SaveChangesAsync(); await _projectRequirementsRepository.SaveChangesAsync(); ts.Complete(); } } } }