/// <summary> /// Step #3, #4, #5, #6, #7 /// Test #7 /// </summary> /// <returns></returns> public ActionResult AddPeople(int id, string roleFilter) { if (id == 0) { Message = "Workgroup must be created before proceeding"; return(this.RedirectToAction(a => a.CreateWorkgroup())); } var workgroup = _workgroupRepository.GetNullableById(id); if (workgroup == null) { Message = "Workgroup not found."; return(this.RedirectToAction <WorkgroupController>(a => a.Index(false))); } if (workgroup.Administrative && roleFilter == Role.Codes.Requester) { return(this.RedirectToAction(a => a.AddPeople(id, Role.Codes.Approver))); } var viewModel = WorgroupPeopleCreateModel.Create(_roleRepository, workgroup); if (!string.IsNullOrWhiteSpace(roleFilter)) { viewModel.Role = _roleRepository.Queryable.SingleOrDefault(a => !a.IsAdmin && a.Id == roleFilter); } Check.Require(viewModel.Roles.Single(a => a.Level == 1).Id == "RQ", "RQ"); //Used for navigation in _StatusBar.cshtml Check.Require(viewModel.Roles.Single(a => a.Level == 2).Id == "AP", "AP"); //Used for navigation in _StatusBar.cshtml Check.Require(viewModel.Roles.Single(a => a.Level == 3).Id == "AM", "AM"); //Used for navigation in _StatusBar.cshtml Check.Require(viewModel.Roles.Single(a => a.Level == 4).Id == "PR", "PR"); //Used for navigation in _StatusBar.cshtml Check.Require(viewModel.Roles.Single(a => a.Level == 0).Id == "RV", "RV"); //Used for navigation in _StatusBar.cshtml ViewBag.rolefilter = roleFilter; if (viewModel.Role.Level == 0) { ViewBag.StepNumber = 3 + (5 - 1); // Ugliness because a reviewer is level zero } else { ViewBag.StepNumber = 3 + (viewModel.Role.Level - 1); } return(View(viewModel)); }
public ActionResult AddPeople(int id, WizardWorkgroupPeoplePostModel workgroupPeoplePostModel, string roleFilter, string bulkEmail, string bulkKerb) { var notAddedKvp = new List <KeyValuePair <string, string> >(); var workgroup = _workgroupRepository.GetNullableById(id); if (workgroup == null) { Message = "Workgroup not found."; this.RedirectToAction <WorkgroupController>(a => a.Index(false)); } if (workgroupPeoplePostModel.Users == null) { workgroupPeoplePostModel.Users = new List <string>(); } ModelState.Clear(); workgroupPeoplePostModel.Role = _roleRepository.Queryable.FirstOrDefault(a => a.Id == roleFilter); //Ensure role picked is valid. if (workgroupPeoplePostModel.Role != null) { if (!_roleRepository.Queryable.Any(a => !a.IsAdmin && a.Id == workgroupPeoplePostModel.Role.Id)) { ModelState.AddModelError("Role", "Invalid Role Selected - don't mess with the query string!"); } } if (!ModelState.IsValid) { var viewModel = WorgroupPeopleCreateModel.Create(_roleRepository, workgroup); if (workgroupPeoplePostModel.Role != null) { viewModel.Role = workgroupPeoplePostModel.Role; } if (workgroupPeoplePostModel.Users != null && workgroupPeoplePostModel.Users.Count > 0) { var users = new List <IdAndName>(); foreach (var user in workgroupPeoplePostModel.Users) { var temp = _userRepository.GetNullableById(user); if (temp != null) { users.Add(new IdAndName(temp.Id, temp.FullName)); } else { var ldapuser = _searchService.FindUser(user); if (ldapuser != null) { users.Add(new IdAndName(ldapuser.LoginId, string.Format("{0} {1}", ldapuser.FirstName, ldapuser.LastName))); } } } viewModel.Users = users; } ViewBag.rolefilter = roleFilter; if (!string.IsNullOrWhiteSpace(roleFilter)) { viewModel.Role = _roleRepository.Queryable.SingleOrDefault(a => !a.IsAdmin && a.Id == roleFilter); } if (viewModel.Role.Level == 0) { ViewBag.StepNumber = 3 + (5 - 1); // Ugliness because a reviewer is level zero } else { ViewBag.StepNumber = 3 + (viewModel.Role.Level - 1); } return(View(viewModel)); } int successCount = 0; int failCount = 0; int duplicateCount = 0; foreach (var u in workgroupPeoplePostModel.Users) { successCount = _workgroupService.TryToAddPeople(id, workgroupPeoplePostModel.Role, workgroup, successCount, u, ref failCount, ref duplicateCount, notAddedKvp); } #region Bulk Load Email successCount = _workgroupService.TryBulkLoadPeople(bulkEmail, true, id, workgroupPeoplePostModel.Role, workgroup, successCount, ref failCount, ref duplicateCount, notAddedKvp); //const string regexPattern = @"\b[A-Z0-9._-]+@[A-Z0-9][A-Z0-9.-]{0,61}[A-Z0-9]\.[A-Z.]{2,6}\b"; //// Find matches //System.Text.RegularExpressions.MatchCollection matches = System.Text.RegularExpressions.Regex.Matches(bulkEmail, regexPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase); //foreach(System.Text.RegularExpressions.Match match in matches) //{ // var temp = match.ToString().ToLower(); // successCount = _workgroupService.TryToAddPeople(id, workgroupPeoplePostModel.Role, workgroup, successCount, temp, ref failCount, notAddedKvp); //} #endregion #region Bulk Load Kerb successCount = _workgroupService.TryBulkLoadPeople(bulkKerb, false, id, workgroupPeoplePostModel.Role, workgroup, successCount, ref failCount, ref duplicateCount, notAddedKvp); //const string regexPattern4Kerb = @"\b[A-Z0-9]{2,10}\b"; //// Find matches //System.Text.RegularExpressions.MatchCollection matchesKerb = System.Text.RegularExpressions.Regex.Matches(bulkKerb, regexPattern4Kerb, System.Text.RegularExpressions.RegexOptions.IgnoreCase); //foreach(System.Text.RegularExpressions.Match match in matchesKerb) //{ // var temp = match.ToString().ToLower(); // successCount = _workgroupService.TryToAddPeople(id, workgroupPeoplePostModel.Role, workgroup, successCount, temp, ref failCount, notAddedKvp); //} #endregion Message = string.Format("Successfully added {0} people to workgroup as {1}. {2} not added because of duplicated role or not found.", successCount, workgroupPeoplePostModel.Role.Name, failCount); if (failCount > 0 || successCount == 0) { if (failCount == 0) { ModelState.AddModelError("Users", "Must add at least 1 user or Skip"); } else if (failCount == duplicateCount) { Message = string.Format("The {0} users you added already have the role {1}", duplicateCount, workgroupPeoplePostModel.Role.Name); return(this.RedirectToAction(a => a.People(id, workgroupPeoplePostModel.Role.Id))); } var viewModel = WorgroupPeopleCreateModel.Create(_roleRepository, workgroup); viewModel.ErrorDetails = notAddedKvp; // ViewBag.DetailedMessage = notAddedSb.ToString(); ViewBag.rolefilter = roleFilter; if (!string.IsNullOrWhiteSpace(roleFilter)) { viewModel.Role = _roleRepository.Queryable.SingleOrDefault(a => !a.IsAdmin && a.Id == roleFilter); } if (viewModel.Role.Level == 0) { ViewBag.StepNumber = 3 + (5 - 1); // Ugliness because a reviewer is level zero } else { ViewBag.StepNumber = 3 + (viewModel.Role.Level - 1); } return(View(viewModel)); } Message = string.Format("Successfully added {0} people to workgroup as {1}.", successCount, workgroupPeoplePostModel.Role.Name); return(this.RedirectToAction(a => a.People(id, workgroupPeoplePostModel.Role.Id))); }