public AdminCreateViewModel AdminCreateFactory(IEnumerable<ApplicationUser> users, IEnumerable<string> roles, AdminCreateViewModel vm = null) { // Of the model does note exist, create it if (vm == null) vm = new AdminCreateViewModel(); // Populate users vm.Users = users.Select(e => new SelectListItem { Value = e.Id, Text = e.FullName }); // Populate role vm.Roles = roles.Select(e => new SelectListItem { Value = e, Text = e }).OrderByDescending(item => item.Text); // If not role exists, create it vm.User = vm.User ?? new AccountCreateViewModel(); // Return view model return vm; }
public async Task<ActionResult> Create(AdminCreateViewModel model) { // Disabled because we dynamically add to ModelState errors // ReSharper disable once InvertIf if (ModelState.IsValid) { try { // Map var user = Mapper.Map<AccountCreateViewModel, ApplicationUser>(model.User); // Assign the Reports To if (!model.SelectedUserId.IsNullOrWhiteSpace()) { user.ReportsToId = model.SelectedUserId; } // Attempt to create the user, await results var results = await _repo.Create(user, model.User.Password, model.SelectedRole); // If there are no errors if (!results.Any()) { // Add Success Alert Success($"The Employee {user.UserName} was Added"); // Return back to index return RedirectToAction("Index"); } // Remap the potential errors into Model Erros with the key LoginError results.ForEach(e => ModelState.AddModelError("LoginError", e)); } catch (EmployeeIdExistsException) { Danger("Something went wrong, a duplicate EmployeeId has been issued. Please try again"); } } // Return View return View(_factory.AdminCreateFactory(_repo.GetSortedUsers(), _repo.GetRoles(), model)); }