/// <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 !"); }