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));
        }