예제 #1
0
        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)));
        }
예제 #2
0
        // 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));
        }
예제 #3
0
        // GET: Benevoles/Create
        public IActionResult Create()
        {
            SetViewBagCentres();

            var benevole = new BenevoleWithAdresse
            {
                Benevole = new Benevole(),
                Adresse  = new Adresse(),
            };

            return(View(benevole));
        }
예제 #4
0
        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 }));
        }