private MembersToProjectCollection CreateMemberToProjectCollectionObject(Project project) { var membersToProjectColl = new MembersToProjectCollection(); membersToProjectColl.Role = _unitOfWork.RoleRepository.Get(orderBy: x => x.OrderBy(k => k.MemberRoleName)).ToList(); var allMembers = _unitOfWork.MemberRepository.Get(filter: f => f.IsSubmit && f.NominationId != 2, orderBy: x => x.OrderBy(k => k.MemberName)).ToList(); //2 == Old Member var newMemberList = allMembers.Select(member => new CutDownVersionOfMembers { MemberId = member.MemberId, MemberName = member.MemberName, AssignDate = DateTime.UtcNow, Rate = new decimal(0.0), ProjectId = project.ProjectId, MemberAlreadyExists = false, MemberToProjectId = 0 }).ToList(); membersToProjectColl.Project = project; membersToProjectColl.AllCutdownMembers = newMemberList; membersToProjectColl.AllMembers = allMembers; //var listOfMembersInAllMembersButNotInMemberToProject = new List<CutDownVersionOfMembers>(); foreach (var item in _unitOfWork.MemberToProjectsRepository.Get()) { var memberToProject = item; var isExists = membersToProjectColl.AllCutdownMembers.Where( m => m.MemberId == memberToProject.MemberId && m.ProjectId == memberToProject.ProjectId) .ToList(); if (isExists.Count > 0) { isExists[0].AssignDate = memberToProject.AssignDate; isExists[0].Rate = memberToProject.MemberRate; isExists[0].RoleId = memberToProject.MemberRoleId; isExists[0].MemberAlreadyExists = true; isExists[0].IsAssigned = memberToProject.IsAssigned; isExists[0].MemberToProjectId = memberToProject.MemberToProjectId; } } return membersToProjectColl; }
public ActionResult AssignMembers(MembersToProjectCollection membersToProjectColl) { if (ModelState.IsValid) { try { var projectId = membersToProjectColl.AllCutdownMembers[0].ProjectId; //BUSINESS RULE : Assign members cannot be greater than max no of participants assigned to the project var project = _unitOfWork.ProjectRepository.GetById(projectId); var maxAllowed = project.MaxNoOfParticipants; var cnt = membersToProjectColl.AllCutdownMembers.Count(item => item.IsAssigned); if (cnt > maxAllowed) { ViewBag.Error = "You cannot assign members more than max allowed. The max allowed members limit is " + maxAllowed; var coll = CreateMemberToProjectCollectionObject(project); return View("AssignMembers", coll); } foreach (var item in membersToProjectColl.AllCutdownMembers) { var member = item; MemberToProject memberToProject; var memberToProjects = _unitOfWork.MemberToProjectsRepository.Get(filter: x => x.ProjectId == projectId && x.MemberId == member.MemberId).ToList(); if (memberToProjects.Count > 0) { memberToProject = memberToProjects[0]; } else { memberToProject = GetEmptyMemberToProjectObject(); } memberToProject.MemberToProjectId = item.MemberToProjectId; memberToProject.ProjectId = item.ProjectId; memberToProject.MemberId = item.MemberId; memberToProject.AssignDate = item.AssignDate; memberToProject.MemberRoleId = item.RoleId; memberToProject.MemberRate = item.Rate; memberToProject.IsAssigned = item.IsAssigned; if (item.MemberAlreadyExists) { memberToProject.ModifiedBy = User.Identity.Name; memberToProject.ModifiedOn = DateTime.UtcNow; } if (item.MemberAlreadyExists) { _unitOfWork.MemberToProjectsRepository.Update(memberToProject); } else { _unitOfWork.MemberToProjectsRepository.Insert(memberToProject); } } _unitOfWork.Save(); return RedirectToAction("Index"); } catch (Exception ex) { ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator."); Utility.WriteToLog("ProjectController.AssignMembers() : " + ex, "Error"); throw; } } ViewBag.RoleId = GetRoleSelectList(membersToProjectColl.AllCutdownMembers[0].RoleId); return View(membersToProjectColl); }