/// <summary>
        /// Maj des Etats des éléments de suivi du dessus
        /// </summary>
        /// <param name="suiviNiveau"></param>
        private void MajEtats(SuiviNiveau suiviNiveau)
        {
            var suiviPrerequis = _context.SuiviPrerequis.Where(x => x.Id == suiviNiveau.SuiviPrerequis.SuiviCompetence.Id)
                                 .Include(s => s.LesSuiviNiveaux)
                                 .Single();

            suiviPrerequis.Etat = suiviPrerequis.EtatMaj();
            _context.Update(suiviPrerequis);

            var suiviCompetence = _context.SuiviCompetence.Where(x => x.Id == suiviPrerequis.SuiviCompetence.Id)
                                  .Include(s => s.LesSuiviPrerequis)
                                  .Single();

            suiviCompetence.Etat = suiviCompetence.EtatMaj();
            _context.Update(suiviCompetence);

            var suivi = _context.Suivi.Where(x => x.Id == suiviCompetence.Suivi.Id)
                        .Include(s => s.LesSuiviCompetences)
                        .Single();

            suivi.Etat = suivi.EtatMaj();
            _context.Update(suivi);
        }
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        public async Task <IActionResult> Create(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }
            else
            {
                Patient patient = await _context.Patient.Where(x => x.Id == id).SingleAsync();

                var listeDomaines = await _context.Domaine.ToListAsync();

                PatientUser patientUserAjoute = new PatientUser
                {
                    Patient         = patient,
                    ApplicationUser = await _userManager.GetUserAsync(User)
                };
                _context.Add(patientUserAjoute);

                foreach (Domaine d in listeDomaines)
                {
                    Suivi suiviAjoute = new Suivi
                    {
                        Patient = patient,
                        Domaine = d
                    };
                    _context.Add(suiviAjoute);

                    await _context.SaveChangesAsync();

                    var listeDomaineCompetences = await _context.DomaineCompetence.Where(x => x.Domaine == d)
                                                  .Include(domaineComp => domaineComp.Competence)
                                                  .ToListAsync();


                    foreach (DomaineCompetence dc in listeDomaineCompetences)
                    {
                        var uneCompetence = dc.Competence;

                        SuiviCompetence suiviCompetenceAjoute = new SuiviCompetence
                        {
                            Competence = uneCompetence,
                            Suivi      = suiviAjoute,
                            Etat       = EtatEnum.e1
                        };
                        _context.Add(suiviCompetenceAjoute);
                        await _context.SaveChangesAsync();

                        var listeCompetencePrerequis = await _context.CompetencePrerequis.Where(x => x.Competence == uneCompetence)
                                                       .Include(compPrerequis => compPrerequis.Prerequis)
                                                       .ToListAsync();

                        foreach (CompetencePrerequis cp in listeCompetencePrerequis)
                        {
                            var            unPrerequis          = cp.Prerequis;
                            SuiviPrerequis suiviPrerequisAjoute = new SuiviPrerequis
                            {
                                Prerequis       = unPrerequis,
                                SuiviCompetence = suiviCompetenceAjoute,
                                Etat            = EtatEnum.e1
                            };
                            _context.Add(suiviPrerequisAjoute);
                            await _context.SaveChangesAsync();

                            var listePrerequisNiveaux = await _context.PrerequisNiveau.Where(x => x.Prerequis == unPrerequis)
                                                        .Include(prerequisNiv => prerequisNiv.Niveau)
                                                        .ToListAsync();

                            foreach (PrerequisNiveau pn in listePrerequisNiveaux)
                            {
                                var         unNiveau          = pn.Niveau;
                                SuiviNiveau suiviNiveauAjoute = new SuiviNiveau
                                {
                                    Niveau         = unNiveau,
                                    SuiviPrerequis = suiviPrerequisAjoute,
                                    Etat           = EtatEnum.e1
                                };
                                _context.Add(suiviNiveauAjoute);

                                int nbSuiviExercicesDefaut = 5;
                                for (int i = 0; i < nbSuiviExercicesDefaut; i++)
                                {
                                    SuiviExercice suiviExerciceAjoute = new SuiviExercice
                                    {
                                        Valide      = false,
                                        SuiviNiveau = suiviNiveauAjoute,
                                    };
                                    _context.Add(suiviExerciceAjoute);
                                }
                                await _context.SaveChangesAsync();
                            }
                        }
                    }
                }
                ;

                await _context.SaveChangesAsync();

                return(RedirectToAction("Index", "Patients"));
            }
        }