// GET: Parcours/Edit/5
        public async Task <ActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Parcours parcours = await db.Parcours.FindAsync(id);

            if (parcours == null)
            {
                return(HttpNotFound());
            }
            List <Module> modules = db.Modules.ToList();

            ViewBag.IdModule = new SelectList(modules, "Id", "Resume");

            ParcoursVM parcoursVm = new ParcoursVM();

            parcoursVm.Designation = parcours.Designation;
            parcoursVm.Id          = parcours.Id;
            parcoursVm.NbHeures    = parcours.NbHeures;
            parcoursVm.Modules     = parcours.Modules;

            return(View(parcoursVm));
        }
        public async Task <ActionResult> AjoutModule(int?IdModule, int?IdParcours)
        {
            if (IdModule == null || IdParcours == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Parcours parcours = await db.Parcours.FindAsync(IdParcours);

            Module module = await db.Modules.FindAsync(IdModule);

            if (parcours == null || module == null)
            {
                return(HttpNotFound());
            }
            if (!parcours.Modules.Any(x => (x.Id == IdModule)))
            {
                parcours.Modules.Add(module);
            }
            await db.SaveChangesAsync();

            ParcoursVM parcoursVm = new ParcoursVM();

            parcoursVm.Designation = parcours.Designation;
            parcoursVm.Id          = parcours.Id;
            parcoursVm.NbHeures    = parcours.NbHeures;
            parcoursVm.Modules     = parcours.Modules;
            return(RedirectToAction("Edit", parcoursVm));
            // L'élément sélectionné par défaut doit être resélectionné pour être pris en compte
        }
        /*public async Task<ActionResult> AddModule(int? id)
         * {
         *
         * }*/
        public async Task <ActionResult> RetraitModule(int?IdModule, int?IdParcours)
        {
            if (IdModule == null || IdParcours == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Parcours parcours = await db.Parcours.FindAsync(IdParcours);

            Module module = await db.Modules.FindAsync(IdModule);

            if (parcours == null || module == null)
            {
                return(HttpNotFound());
            }
            if (parcours.Modules.Any(x => (x.Id == IdModule)))
            {
                parcours.Modules.Remove(module);
            }
            await db.SaveChangesAsync();

            ParcoursVM parcoursVm = new ParcoursVM();

            parcoursVm.Designation = parcours.Designation;
            parcoursVm.Id          = parcours.Id;
            parcoursVm.NbHeures    = parcours.NbHeures;
            parcoursVm.Modules     = parcours.Modules;
            return(RedirectToAction("Edit", parcoursVm));
        }
        public async Task <ActionResult> Create([Bind(Include = "Id,Designation,NbHeures,IdModule")] ParcoursVM parcoursVm)
        {
            if (ModelState.IsValid)
            {
                MapperConfiguration config = new MapperConfiguration(cfg => cfg.CreateMap <ParcoursVM, Parcours>());
                // 2 : créer un Mapper
                Mapper mapper = new Mapper(config);
                // 3 : mappage
                Parcours parcours = mapper.Map <Parcours>(parcoursVm);
                Module   module   = db.Modules.SingleOrDefault(x => x.Id == parcoursVm.IdModule);
                parcours.Modules = new List <Module>();
                parcours.Modules.Add(module);

                db.Parcours.Add(parcours);
                await db.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }

            return(View(parcoursVm));
        }