public async Task <IActionResult> Edit(int id, Buch buch) { if (ModelState.IsValid) { try { var buchVorher = await bibContext.Buch.AsNoTracking().SingleOrDefaultAsync(e => e.Id == id); var anzahlExemplareVorher = buchVorher.AnzahlExemplare; // Fall: Die Anzahl der Exemplare wurde erhöht if (anzahlExemplareVorher < buch.AnzahlExemplare) { var Differenz = buch.AnzahlExemplare - anzahlExemplareVorher; for (int i = 1; i <= Differenz; i++) { var exemplar = new Exemplar { ExemplarId = anzahlExemplareVorher + i, ISBN = buchVorher.ISBN, Verfügbarkeit = true }; bibContext.Exemplar.Add(exemplar); } } // Fall: Die Anzahl der Exemplare wurde verringert if (anzahlExemplareVorher > buch.AnzahlExemplare) { var differenz = anzahlExemplareVorher - buch.AnzahlExemplare; for (int i = 0; i < differenz; i++) { var exemplar = await bibContext.Exemplar.SingleOrDefaultAsync(e => e.ISBN == buchVorher.ISBN && e.ExemplarId == anzahlExemplareVorher - i); if (!exemplar.Verfügbarkeit) // Fall: Exemplar noch verliehen { toastNotification.AddToastMessage("Exemplar noch verliehen", "Das Exemplar ist noch verliehen und kann daher nicht gelöscht werden!", ToastEnums.ToastType.Error, new ToastOption() { PositionClass = ToastPositions.TopCenter }); return(RedirectToAction(nameof(Edit))); } else { bibContext.Exemplar.Remove(exemplar); } } } var warenkorbExemplare = bibContext.Warenkorb.Where(w => w.BuchTitel.Equals(buchVorher.Titel)); foreach (var exemplar in warenkorbExemplare) { exemplar.BuchTitel = buch.Titel; bibContext.Update(exemplar); } var leihauftraege = bibContext.Leihauftrag.Where(w => w.BuchTitel.Equals(buchVorher.Titel)); foreach (var leihauftrag in leihauftraege) { leihauftrag.BuchTitel = buch.Titel; bibContext.Update(leihauftrag); } bibContext.Update(buch); await bibContext.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { throw; } toastNotification.AddToastMessage("Buch geändert", "Das Buch \"" + buch.Titel + "\" wurde geändert!", ToastEnums.ToastType.Success, new ToastOption() { PositionClass = ToastPositions.TopCenter }); return(RedirectToAction(nameof(Index))); } return(View(buch)); }
public async Task <IActionResult> Edit(String id, [Bind("UserName, Email")] Benutzer model, String Role) { if (ModelState.IsValid) { try { var user = await userManager.FindByIdAsync(id); var newName = user.UserName; if (model.UserName == null) // Fall: Benutzername ist leer. { toastNotification.AddToastMessage("Kein Benutzername eingegeben", "Es muss ein Benutzername vergeben werden.", ToastEnums.ToastType.Error, new ToastOption() { PositionClass = ToastPositions.TopCenter }); return(RedirectToAction(nameof(Edit))); } else if (model.Email == null) // Fall: Email ist leer. { toastNotification.AddToastMessage("Kein Email eingegeben", "Es muss eine Email-Adresse vergeben werden.", ToastEnums.ToastType.Error, new ToastOption() { PositionClass = ToastPositions.TopCenter }); return(RedirectToAction(nameof(Edit))); } else { // Fall: Der Benutzername wurde geändert. if (model.UserName != newName) { var userExist = bibContext.Benutzer.SingleOrDefault(b => b.UserName == model.UserName); // Fall: Der neue Benutzername existiert bereits in der Datenbank. if (userExist != null) { toastNotification.AddToastMessage("Benutzername bereits vergeben", "Der Benutzername \"" + model.UserName + "\" ist bereits vergeben.", ToastEnums.ToastType.Error, new ToastOption() { PositionClass = ToastPositions.TopCenter }); return(RedirectToAction(nameof(Edit))); } // Alle bisherigern Referenzen auf den neuen Namen ändern var warenkorb = bibContext.Warenkorb.Where(e => e.Benutzer.Equals(user.UserName)); foreach (var warenkorbExemplar in warenkorb) { warenkorbExemplar.Benutzer = model.UserName; bibContext.Warenkorb.Update(warenkorbExemplar); } var leihauftraege = bibContext.Leihauftrag.Where(e => e.Benutzer.Equals(user.UserName)); foreach (var leihauftrag in leihauftraege) { leihauftrag.Benutzer = model.UserName; bibContext.Leihauftrag.Update(leihauftrag); } await bibContext.SaveChangesAsync(); var setNameResult = await userManager.SetUserNameAsync(user, model.UserName); } // Fall: Die Email-Adresse wurde geändert if (user.Email != model.Email) { await userManager.SetEmailAsync(user, model.Email); } // Rolle des Benutzers wird für die Datenbank aktualisiert if (Role == "Admin") { var role = await userManager.GetRolesAsync(user); await userManager.RemoveFromRolesAsync(user, role); await userManager.AddToRoleAsync(user, "Admin"); user.Role = "Admin"; bibContext.Update(user); bibContext.SaveChanges(); toastNotification.AddToastMessage("Benutzerdaten geändert", "Die Benutzerdaten von \"" + user.UserName + "\" wurden geändert.", ToastEnums.ToastType.Success, new ToastOption() { PositionClass = ToastPositions.TopCenter }); return(RedirectToAction(nameof(Index))); } if (Role == "Member") { var role = await userManager.GetRolesAsync(user); await userManager.RemoveFromRolesAsync(user, role); await userManager.AddToRoleAsync(user, "Member"); user.Role = "Member"; bibContext.Update(user); bibContext.SaveChanges(); toastNotification.AddToastMessage("Benutzerdaten geändert", "Der Benutzerdaten von \"" + user.UserName + "\" wurden geändert.", ToastEnums.ToastType.Success, new ToastOption() { PositionClass = ToastPositions.TopCenter }); return(RedirectToAction(nameof(Index))); } } return(RedirectToAction(nameof(Index))); } catch (DbUpdateConcurrencyException) { throw; } } return(RedirectToAction(nameof(Index))); }