public async Task <IActionResult> Create(BenevoleWithAdresse benevoleWithAddress) { if (!_context.ContainsCentre(benevoleWithAddress.Adresse.CentreID)) { ModelState.AddModelError("CentreID", "Le centre n'existe pas"); } SetViewBagCentres(); if (!ModelState.IsValid) { return(View(benevoleWithAddress)); } benevoleWithAddress.Adresse.IsCurrent = true; benevoleWithAddress.Adresse.Benevole = benevoleWithAddress.Benevole; _context.Add(benevoleWithAddress.Adresse); _context.Add(benevoleWithAddress.Benevole); await _context.SaveChangesAsync(); LogInfo("Benevole #{BenevoleID} ({BenevolePrenom} {BenevoleNom}) créé", benevoleWithAddress.Benevole.ID, benevoleWithAddress.Benevole.Prenom, benevoleWithAddress.Benevole.Nom); SetGlobalMessage("Le bénévole a été créé avec succès", EGlobalMessageType.Success); return(RedirectToAction(nameof(Index))); }
// GET: Benevoles/ChangeAddress/5 public async Task <IActionResult> ChangeAddress(int id, bool?force = false) { var benevole = await _context.Benevoles.Include(b => b.Adresses).ThenInclude(a => a.Centre) .SingleOrDefaultAsync(m => m.ID == id); if (benevole == null) { return(NotFound()); } if (GetCurrentUser().CentreID != null && GetCurrentUser().CentreID != benevole.CurrentAdresse.CentreID) { return(Forbid()); } SetViewBagCentres(); var benevoleWithAddress = new BenevoleWithAdresse { Benevole = benevole, Adresse = new Adresse { BenevoleID = id, CentreID = benevole.CurrentAdresse.CentreID, Centre = benevole.CurrentAdresse.Centre, DateChangement = DateTime.Today, } }; ViewBag.Force = force; return(View(benevoleWithAddress)); }
// GET: Benevoles/Create public IActionResult Create() { SetViewBagCentres(); var benevole = new BenevoleWithAdresse { Benevole = new Benevole(), Adresse = new Adresse(), }; return(View(benevole)); }
public async Task <IActionResult> ChangeAddress(int id, BenevoleWithAdresse benevoleWithAddress, bool force = false) { ViewBag.Force = force; if (!_context.ContainsCentre(benevoleWithAddress.Adresse.CentreID)) { ModelState.AddModelError("Adresse.CentreID", "Le centre n'existe pas"); } foreach (var ms in new List <string>(ModelState.Keys)) { if (ms.StartsWith("Benevole.")) { ModelState.Remove(ms); } } SetViewBagCentres(); benevoleWithAddress.Benevole = _context.Benevoles.SingleOrDefault(b => b.ID == benevoleWithAddress.Adresse.BenevoleID); if (!ModelState.IsValid) { return(View(benevoleWithAddress)); } var benevole = await _context.Benevoles.Include(b => b.Adresses).ThenInclude(a => a.Centre) .SingleOrDefaultAsync(b => b.ID == id); // Recherche d'adresses déjà présentes à une date ultérieure var anyAddress = benevole.Adresses.Any(a => a.DateChangement >= benevoleWithAddress.Adresse.DateChangement); if (anyAddress) { ModelState.AddModelError("Adresse.DateChangement", "Une adresse existe déjà à une date ultérieure. Veuillez supprimer l'adresse postérieure d'abord"); return(View(benevoleWithAddress)); } // Recherche de pointages sur une adresse différente à une date ultérieure var pointagesFromDate = _context.Pointages .Where(p => p.BenevoleID == id) .Where(p => p.AdresseID != benevoleWithAddress.Adresse.ID) .Where(p => p.Date >= benevoleWithAddress.Adresse.DateChangement); if (pointagesFromDate.Count() > 0) { if (!force) { ViewBag.Force = true; ViewBag.ImpactedCount = pointagesFromDate.Count(); return(View(benevoleWithAddress)); } else { // suppression des pointages précédents _context.Pointages.RemoveRange(pointagesFromDate); } } benevole.CurrentAdresse.IsCurrent = false; benevoleWithAddress.Adresse.BenevoleID = benevole.ID; benevole.Adresses.Add(benevoleWithAddress.Adresse); benevole.Adresses.OrderByDescending(a => a.DateChangement).First().IsCurrent = true; _context.Add(benevoleWithAddress.Adresse); await _context.SaveChangesAsync(); if (pointagesFromDate.Count() > 0) { LogInfo("Suppression de {NombrePointages} pointages du benevole #{BenevoleID} ({BenevolePrenom} {BenevoleNom}) après le {DateChangement:dd/MM/yyyy}", pointagesFromDate.Count(), benevole.ID, benevole.Prenom, benevole.Nom, benevoleWithAddress.Adresse.DateChangement); } LogInfo("Adresse {AdresseID} créée pour le benevole #{BenevoleID} ({BenevolePrenom} {BenevoleNom})", benevoleWithAddress.Adresse.ID, benevole.ID, benevole.Prenom, benevole.Nom); SetGlobalMessage("L'adresse a été créée avec succès", EGlobalMessageType.Success); return(RedirectToAction(nameof(Details), new { id = id })); }