public async Task<ActionResult> Update(string id, ChangeUserViewModel vm) { try { var user = await UserManager.FindByIdAsync(id); if (user == null) { //Logger.LogInformation($"Update: Cannot find user with id {id}"); return HttpNotFound(); } user.UserName = vm.User.UserName; var uRole = await getRoleFromUser(user); var res = await UserManager.UpdateAsync(user); if (res.Succeeded) { var err = false; ////Rolle updaten? if (uRole != null && !string.IsNullOrEmpty(uRole.Id) && vm.IsAdministrator == false) { //War admin, wurde entfernt await UserManager.RemoveFromRoleAsync(user.Id, "admin"); } else if ((uRole == null || string.IsNullOrEmpty(uRole.Id)) && vm.IsAdministrator) { //War nix ist nun admin await UserManager.AddToRoleAsync(user.Id, "admin"); } //Employee-Link updaten? bool newAssignment = false; var emp = await _empService.GetEmployee(user); if (emp == null) { if (vm.EmployeeId != 0) { emp = await _empService.GetEmployee(vm.EmployeeId); newAssignment = true; } } if (emp != null) { //Spezialfall: //Es gibt einen zugeordneten Employee (emp != null) und die im ViewModel übergebene EmployeeId ist 0 (kein Employee ausgewählt) -> Mitarbeiter zuordnung entfernen if (vm.EmployeeId == 0) { try { await _empService.UnassignUser(user); err = false; } catch (Exception ex) { //Logger.LogError($"Cannot remove employee {emp.FirstName} {emp.LastName} from user {user.UserName}!", ex); ModelState.AddModelError(String.Empty, $"Der Mitarbeiter {emp.FirstName} {emp.LastName} konnte nicht vom Benutzer {user.UserName} entfernt werden! Bitte kontaktieren Sie den Administrator!"); err = true; } } else { //Updaten try { if (newAssignment) await _empService.AssignUser(emp, user); else await _empService.ChangeAssignedEmployee(user, vm.EmployeeId); err = false; } catch (Exception ex) { //Logger.LogError($"Cannot assign employee {emp.FirstName} {emp.LastName} to user {user.UserName}!", ex); ModelState.AddModelError(String.Empty, $"Der Mitarbeiter {emp.FirstName} {emp.LastName} konnte dem Benutzer {user.UserName} nicht zugeordnet werden! Bitte kontaktieren Sie den Administrator!"); err = true; } } } if (err == false) return RedirectToAction("Index"); } else { //Logger.LogError("Cannot update User: "******"Error updateing user!", ex); ModelState.AddModelError(string.Empty, "Unable to save changes."); } var emps = await _empService.GetEmployees(true, true); var list = emps.Select(e => new SelectListItem { Value = e.Id.ToString(), Text = $"{e.FirstName} {e.LastName}" }).ToList(); ViewBag.Employees = new SelectList(list, "Value", "Text"); return View(vm); }
public async Task<ActionResult> Edit(string id) { var user = await UserManager.FindByIdAsync(id); if (user == null) { //Logger.LogInformation($"Edit: Cannot find user with id {id}"); return HttpNotFound(); } var rId = getRoleIdFromUser(user); var emp = await _empService.GetEmployee(user); var eId = emp == null ? 0 : emp.Id; var vm = new ChangeUserViewModel { User = user, EmployeeId = eId }; if (!string.IsNullOrEmpty(rId)) { vm.IsAdministrator = true; } var emps = await _empService.GetEmployees(true, true); var list = emps.Select(e => new SelectListItem { Value = e.Id.ToString(), Text = $"{e.FirstName} {e.LastName}" }).ToList(); ViewBag.Employees = new SelectList(list, "Value", "Text"); return View(vm); }