public ActionResult Edit(TrajetsViewModels vm)
        {
            vm.Trajet            = db.Trajets.Find(vm.Trajet.Id);
            vm.listeEmplacements = vm.Trajet.Conducteur.EmplacementsFavoris.ToList();
            vm.listeEmplacements.Add(vm.Trajet.Conducteur.Ecole.Emplacement);

            if (ModelState.IsValid)
            {
                vm.Trajet.Depart = db.Emplacements.Find(vm.selectedDepart);
                vm.Trajet.Arrive = db.Emplacements.Find(vm.selectedArrivee);
                vm.Trajet.Date   = new DateTime(vm.selectedDate.Year, vm.selectedDate.Month, vm.selectedDate.Day, vm.selectedHeureDepart.Hour, vm.selectedHeureDepart.Minute, 0);

                // Verifier que l'utilisateur courant n'ai pas déjà des trajets sur ce jour
                if (db.Trajets.Where(t => t.Conducteur.Id == currentUser.Id && t.Id != vm.Trajet.Id).Where(t => t.Date.Equals(vm.Trajet.Date)).Any())
                {
                    ModelState.AddModelError("", $"Vous avez déja des Trajets de prévu sur cette période");
                    return(View(vm));
                }
                // Remove Holidays and week-ends
                // https://stackoverflow.com/questions/3709584/business-holiday-date-handling/38366429

                //db.Entry(vm.Trajet).State = EntityState.Modified;
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }
            return(View(vm));
        }
        public ActionResult Create(TrajetsViewModels vm)
        {
            vm.Conducteur        = db.Users.Find(currentUser.Id);
            vm.listeEmplacements = vm.Conducteur.EmplacementsFavoris.ToList();
            vm.listeEmplacements.Add(vm.Conducteur.Ecole.Emplacement);

            if (ModelState.IsValid)
            {
                if (vm.selectedDepart == vm.selectedArrivee)
                {
                    ModelState.AddModelError("", $"Départ et Arrivée ne peuvent pas être identiques");
                    return(View(vm));
                }

                if (vm.selectedDateDebut > vm.selectedDateFin)
                {
                    ModelState.AddModelError("", $"La date de Début doit être avant la date de Fin");
                    return(View(vm));
                }

                if (vm.selectedDateDebut.Date < DateTime.Now.Date)
                {
                    ModelState.AddModelError("", $"Impossible de choisir une date passé pour la date de début");
                    return(View(vm));
                }


                // Create listDate
                vm.selectedDateDebut = new DateTime(vm.selectedDateDebut.Year, vm.selectedDateDebut.Month, vm.selectedDateDebut.Day, vm.selectedHeureDepart.Hour, vm.selectedHeureDepart.Minute, 0);
                vm.selectedDateFin   = new DateTime(vm.selectedDateFin.Year, vm.selectedDateFin.Month, vm.selectedDateFin.Day, vm.selectedHeureDepart.Hour, vm.selectedHeureDepart.Minute, 0);
                var listeDates = Enumerable.Range(0, 1 + vm.selectedDateFin.Subtract(vm.selectedDateDebut).Days)
                                 .Select(offset => vm.selectedDateDebut.AddDays(offset))
                                 .ToArray();

                // Verifier que l'utilisateur courant n'ai pas déjà des trajets sur cette date
                if (db.Trajets.Where(t => t.Conducteur.Id == currentUser.Id).Where(t => listeDates.Contains(t.Date)).Any())
                {
                    ModelState.AddModelError("", $"Vous avez déja des Trajets de prévu sur cette période");
                    return(View(vm));
                }
                // Remove Holidays and week-ends
                // https://stackoverflow.com/questions/3709584/business-holiday-date-handling/38366429

                // Create list of Trajets
                foreach (DateTime date in listeDates)
                {
                    vm.Trajet = new Trajet()
                    {
                        Depart = db.Emplacements.SingleOrDefault(e => e.Id == vm.selectedDepart), Arrive = db.Emplacements.SingleOrDefault(e => e.Id == vm.selectedArrivee), Conducteur = db.Users.SingleOrDefault(u => u.Id == currentUser.Id), Date = new DateTime(date.Year, date.Month, date.Day, vm.selectedHeureDepart.Hour, vm.selectedHeureDepart.Minute, 0)
                    };
                    db.Trajets.Add(vm.Trajet);
                }

                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(vm));
        }
        public ActionResult Index()
        {
            var vm = new TrajetsViewModels();

            vm.currentUser  = currentUser;
            vm.listeTrajets = new List <Trajet>();
            if (User.IsInRole("Admin") || User.IsInRole("SuperAdmin"))
            {
                vm.listeTrajets = db.Trajets.ToList();
            }
            else
            {
                // vm.listeTrajets = db.Trajets.Where(t => t.Arrive.Id == currentUser.Ecole.Emplacement.Id || t.Depart.Id == currentUser.Ecole.Emplacement.Id).ToList();
                vm.listeTrajets = db.Trajets.ToList();
            }
            return(View(vm));
        }
        public ActionResult Create()
        {
            var vm = new TrajetsViewModels();

            vm.Conducteur        = db.Users.Find(currentUser.Id);
            vm.listeEmplacements = vm.Conducteur.EmplacementsFavoris.ToList();
            vm.listeEmplacements.Add(vm.Conducteur.Ecole.Emplacement);
            if (vm.Conducteur.EmplacementsFavoris.Any())
            {
                vm.selectedDepart = vm.Conducteur.EmplacementsFavoris[0].Id;
            }
            else
            {
                vm.selectedDepart = vm.Conducteur.Ecole.Emplacement.Id;
            }
            vm.selectedArrivee     = vm.Conducteur.Ecole.Emplacement.Id;
            vm.selectedHeureDepart = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 8, 30, 0);
            vm.selectedDateDebut   = DateTime.Now;

            return(View(vm));
        }
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var vm = new TrajetsViewModels();

            vm.Trajet            = db.Trajets.Find(id);
            vm.listeEmplacements = vm.Trajet.Conducteur.EmplacementsFavoris.ToList();
            vm.listeEmplacements.Add(vm.Trajet.Conducteur.Ecole.Emplacement);
            vm.selectedDepart      = vm.Trajet.Depart.Id;
            vm.selectedArrivee     = vm.Trajet.Arrive.Id;
            vm.selectedHeureDepart = vm.Trajet.Date;
            vm.selectedDate        = vm.Trajet.Date;

            if (vm.Trajet == null)
            {
                return(HttpNotFound());
            }
            return(View(vm));
        }