Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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)));
        }