static string Modifier(TypeUtilisateur unTypeUtilisateur, string loginUtilisateur, string nomUtilisateur, string prenomUtilisateur,
                               string mailUtilisateur, string telUtilisateur, string adresseUtilisateur, string villeUtilisateur, string cpUtilisateur, string libellePortefeuille,
                               Utilisateur utilisateur, bool changePassword)
        {
            string motdepasse = "reste le même.";

            sessionFactory = new Configuration().Configure().BuildSessionFactory();
            ISession session = sessionFactory.OpenSession();

            using (ITransaction transaction = session.BeginTransaction())
            {
                if (loginUtilisateur != null)
                {
                    utilisateur.loginUtilisateur = loginUtilisateur;
                }
                else
                {
                    return("Merci d'entrer un login d'utilisateur");
                }
                if (nomUtilisateur != null)
                {
                    utilisateur.nomUtilisateur = nomUtilisateur;
                }
                else
                {
                    return("Merci d'entrer un nom d'utilisateur");
                }
                if (prenomUtilisateur != null)
                {
                    utilisateur.prenomUtilisateur = prenomUtilisateur;
                }
                else
                {
                    return("Merci d'entrer un prénom d'utilisateur");
                }
                if (mailUtilisateur != null)
                {
                    utilisateur.mailUtilisateur = mailUtilisateur;
                }
                else
                {
                    return("Merci d'entrer un mail d'utilisateur");
                }
                if (telUtilisateur != null)
                {
                    utilisateur.telUtilisateur = telUtilisateur;
                }
                else
                {
                    return("Merci d'entrer un numéro téléphone d'utilisateur");
                }
                if (adresseUtilisateur != null)
                {
                    utilisateur.adresseUtilisateur = adresseUtilisateur;
                }
                else
                {
                    return("Merci d'entrer une adresse d'utilisateur");
                }
                if (villeUtilisateur != null)
                {
                    utilisateur.villeUtilisateur = villeUtilisateur;
                }
                else
                {
                    return("Merci d'entrer une ville d'utilisateur");
                }
                if (cpUtilisateur != null)
                {
                    utilisateur.cpUtilisateur = cpUtilisateur;
                }
                else
                {
                    return("Merci d'entrer un code postal d'utilisateur");
                }

                //S'il s'agit d'une modifcation pour commercial
                if (unTypeUtilisateur.codeTypeUtilisateur == 3 && libellePortefeuille != "")
                {
                    //si l'utilisateur n'etait pas un commercial avant
                    if (utilisateur.typeUtilisateur.codeTypeUtilisateur != 3)
                    {
                        Planning     unNouveauPlanning     = new Planning();
                        PorteFeuille unNouveauPortefeuille = new PorteFeuille();
                        unNouveauPlanning.utilisateur             = utilisateur;
                        unNouveauPortefeuille.utilisateur         = utilisateur;
                        unNouveauPortefeuille.libellePortefeuille = libellePortefeuille;

                        utilisateur.planning     = unNouveauPlanning;
                        utilisateur.porteFeuille = unNouveauPortefeuille;
                    }
                    else
                    {
                        utilisateur.porteFeuille.libellePortefeuille = libellePortefeuille;
                    }
                }
                else if (unTypeUtilisateur.codeTypeUtilisateur == 3 && libellePortefeuille == "")
                {
                    return("Merci de rentrer un nom de portefeuille");
                }

                //Après une migration d'un commercial vers un autre type, on supprime son affectation au planning et portefeuille
                else if (unTypeUtilisateur.codeTypeUtilisateur != 3)
                {
                    //On supprime l'idUtilisateur dans la table portefeuille
                    PorteFeuille portefeuille = utilisateur.porteFeuille;
                    portefeuille.utilisateur = null;

                    session.SaveOrUpdate(portefeuille);

                    //On supprime l'idUtilisateur dans la table planing
                    Planning planing = utilisateur.planning;
                    planing.utilisateur = null;

                    session.SaveOrUpdate(planing);

                    //On supprime l'idPortefeuille/idPlanning dans la table Utilsiateur
                    utilisateur.porteFeuille = null;
                    utilisateur.planning     = null;
                }
                //Une fois tous les tests bons, on peut affecter le type:
                utilisateur.typeUtilisateur = unTypeUtilisateur;

                if (changePassword == true)
                {
                    //-------------------- DEBUT BLOC GENERATION DU MOT DE PASSE DU NOUVEL UTILISATEUR--------------------------
                    //On génère un mot de passe aléatoire pour le nouvel Utilisateur
                    Random       random = new Random();
                    const string chars  = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
                    motdepasse = new string(Enumerable.Repeat(chars, 10).Select(s => s[random.Next(s.Length)]).ToArray());
                    // on converti la phrase random en md5
                    InterLogin pourMD5 = new InterLogin();
                    //on associe le mot de passe
                    utilisateur.passwordUtilisateur = pourMD5.MD5Hash(motdepasse);
                    //-------------------- FIN BLOC GENERATION DU MOT DE PASSE DU NOUVEL UTILISATEUR--------------------------
                }
                session.SaveOrUpdate(utilisateur);
                transaction.Commit();
                session.Dispose();
            }



            // Une fois que tous les tests sont validés on envoie le MDP au mail du nouvel utilisateur
            MailMessage mail = new MailMessage();

            mail.Subject = "Utilisateur modifié!";
            mail.Body    = "Votre utilisateur a été modifié par l'administrateur" + utilisateur.nomUtilisateur + " " + utilisateur.prenomUtilisateur +
                           "! Votre mot de passe " + motdepasse;
            mail.From = new MailAddress("*****@*****.**");
            mail.To.Add(utilisateur.mailUtilisateur);

            SmtpClient client = new SmtpClient();

            client.Host = "localhost";
            client.Send(mail);

            return("L'utilisateur a été modifié, un email lui a été envoyé.");
        }
        private void AjouterUtilisateur(TypeUtilisateur unTypeUtilisateur, string loginUtilisateur, string nomUtilisateur, string prenomUtilisateur, string mailUtilisateur, string telUtilisateur, string adresseUtilisateur,
                                        string villeUtilisateur, string cpUtilisateur, string libellePortefeuille, string libellePlanning, bool changePassword)
        {
            sessionFactory = new Configuration().Configure().BuildSessionFactory();
            ISession session = sessionFactory.OpenSession();

            string motdepasse = "";
            string erreur     = "";

            //     try
            //       {


            using (ITransaction transaction = session.BeginTransaction())
            {
                // Si l'action n'a pas été faite par un gestionnaire on gère le changement de type
                if (!isGestionnaire)
                {
                    // si c'est une modification
                    if (utilisateur.typeUtilisateur != null)
                    {
                        //S'il s'agit d'une modification en commercial
                        if (unTypeUtilisateur.codeTypeUtilisateur == 3 || utilisateur.typeUtilisateur.codeTypeUtilisateur == 3)
                        {
                            //si l'utilisateur n'etait pas un commercial avant
                            if (utilisateur.typeUtilisateur.codeTypeUtilisateur != 3)
                            {
                                Planning unNouveauPlanning = new Planning();
                                unNouveauPlanning.libellePlanning = libellePlanning;
                                unNouveauPlanning.utilisateur     = utilisateur;
                                session.SaveOrUpdate(unNouveauPlanning);

                                PorteFeuille unNouveauPortefeuille = new PorteFeuille();
                                unNouveauPortefeuille.libellePortefeuille = libellePortefeuille;
                                unNouveauPortefeuille.utilisateur         = utilisateur;
                                session.SaveOrUpdate(unNouveauPortefeuille);

                                utilisateur.planning     = unNouveauPlanning;
                                utilisateur.porteFeuille = unNouveauPortefeuille;
                                session.SaveOrUpdate(utilisateur);
                            }
                        }



                        //Après une migration d'un commercial vers un autre type, on supprime son affectation au planning et portefeuille
                        if (unTypeUtilisateur.codeTypeUtilisateur != 3 && utilisateur.typeUtilisateur.codeTypeUtilisateur == 3)
                        {
                            //On supprime l'idUtilisateur dans la table portefeuille et planning
                            utilisateur.porteFeuille.utilisateur = null;
                            utilisateur.planning.utilisateur     = null;

                            session.SaveOrUpdate(utilisateur.porteFeuille);
                            session.SaveOrUpdate(utilisateur.planning);


                            //On supprime l'idPortefeuille/idPlanning dans la table Utilsiateur
                            utilisateur.porteFeuille = null;
                            utilisateur.planning     = null;
                        }
                    }
                }


                // on affecter le type:

                // Si l'utilisateur qui a fait l'action est un gestionnaire on met le type à commercial
                // On associe le type du nouvel utilisateur à 3 (commercial)
                if (isGestionnaire == true)
                {
                    TypeUtilisateur typeUtilisateur = new TypeUtilisateur();

                    IList <TypeUtilisateur> lesTypesUtilisateurs = typeUtilisateur.GetLesTypesUtilisateur();

                    foreach (TypeUtilisateur type in lesTypesUtilisateurs)
                    {
                        if (type.codeTypeUtilisateur == 3)
                        {
                            utilisateur.typeUtilisateur = type;
                        }
                    }
                }
                // Sinon on renseigne le type  de la form de l'admin
                else
                {
                    utilisateur.typeUtilisateur = unTypeUtilisateur;
                }

                // On check si l'utilisateur existe, si non on crée un nouveau mdp par défaut.
                bool exist = session.QueryOver <Utilisateur>().Where(x => x.numUtilisateur == utilisateur.numUtilisateur).RowCount() > 0;
                if (!exist)
                {
                    changePassword = true;
                }

                if (changePassword == true)
                {
                    //-------------------- DEBUT BLOC GENERATION DU MOT DE PASSE DU NOUVEL UTILISATEUR--------------------------
                    //On génère un mot de passe aléatoire pour le nouvel Utilisateur
                    Random       random = new Random();
                    const string chars  = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
                    motdepasse = new string(Enumerable.Repeat(chars, 10).Select(s => s[random.Next(s.Length)]).ToArray());
                    // on converti la phrase random en md5
                    InterLogin pourMD5 = new InterLogin();
                    //on associe le mot de passe
                    utilisateur.passwordUtilisateur = pourMD5.MD5Hash(motdepasse);
                    //-------------------- FIN BLOC GENERATION DU MOT DE PASSE DU NOUVEL UTILISATEUR--------------------------
                }

                if (loginUtilisateur != null)
                {
                    utilisateur.loginUtilisateur = loginUtilisateur;
                }
                else
                {
                    erreur += "\nMerci d'entrer un login d'utilisateur";
                }
                if (nomUtilisateur != null)
                {
                    utilisateur.nomUtilisateur = nomUtilisateur;
                }
                else
                {
                    erreur += "\nMerci d'entrer un nom d'utilisateur";
                }
                if (prenomUtilisateur != null)
                {
                    utilisateur.prenomUtilisateur = prenomUtilisateur;
                }
                else
                {
                    erreur += "\nMerci d'entrer un prénom d'utilisateur";
                }
                if (mailUtilisateur != null)
                {
                    utilisateur.mailUtilisateur = mailUtilisateur;
                }
                else
                {
                    erreur += "\nMerci d'entrer un mail d'utilisateur";
                }
                if (telUtilisateur != null)
                {
                    utilisateur.telUtilisateur = telUtilisateur;
                }
                else
                {
                    erreur += "\nMerci d'entrer un numéro téléphone d'utilisateur";
                }
                if (adresseUtilisateur != null)
                {
                    utilisateur.adresseUtilisateur = adresseUtilisateur;
                }
                else
                {
                    erreur += "\nMerci d'entrer une adresse d'utilisateur";
                }
                if (villeUtilisateur != null)
                {
                    utilisateur.villeUtilisateur = villeUtilisateur;
                }
                else
                {
                    erreur += "\nMerci d'entrer une ville d'utilisateur";
                }
                if (cpUtilisateur != null)
                {
                    utilisateur.cpUtilisateur = cpUtilisateur;
                }
                else
                {
                    erreur += "\nMerci d'entrer un code postal d'utilisateur";
                }


                //S'il s'agit d'un commercial:
                if (utilisateur.typeUtilisateur.codeTypeUtilisateur == 3)
                {
                    // Si il s'agit d'un ajout
                    if (utilisateur.planning == null || utilisateur.porteFeuille == null)
                    {
                        unNouveauPlanning.libellePlanning         = libellePlanning;
                        unNouveauPortefeuille.libellePortefeuille = libellePortefeuille;

                        unNouveauPlanning.utilisateur     = utilisateur;
                        unNouveauPortefeuille.utilisateur = utilisateur;


                        utilisateur.planning     = unNouveauPlanning;
                        utilisateur.porteFeuille = unNouveauPortefeuille;


                        session.SaveOrUpdate(unNouveauPlanning);
                        session.SaveOrUpdate(unNouveauPortefeuille);
                    }
                    // Sinon si il s'agit d'une modification
                    else
                    {
                        utilisateur.planning.libellePlanning = libellePlanning;
                        session.SaveOrUpdate(utilisateur.planning);

                        utilisateur.porteFeuille.libellePortefeuille = libellePortefeuille;
                        session.SaveOrUpdate(utilisateur.porteFeuille);
                    }
                }


                session.SaveOrUpdate(utilisateur);
                transaction.Commit();
                session.Dispose();
            }

            try
            {
                // Une fois que tout fonctionne on envoie le MDP au mail du nouvel utilisateur
                MailMessage mail = new MailMessage();
                mail.Subject = "Nouvel accès à GEPEV!";
                mail.Body    = "Bienvenue " + utilisateur.nomUtilisateur + " " + utilisateur.prenomUtilisateur + "! Votre mot de passe est: " + motdepasse;
                mail.From    = new MailAddress("*****@*****.**");
                mail.To.Add(utilisateur.mailUtilisateur);

                SmtpClient client = new SmtpClient();
                client.Host = "localhost";
                client.Send(mail);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erreur" + ex.Message);
            }
        }
        private void AjouterUtilisateur(TypeUtilisateur unTypeUtilisateur, string loginUtilisateur, string nomUtilisateur, string prenomUtilisateur, string mailUtilisateur, string telUtilisateur, string adresseUtilisateur,
                                        string villeUtilisateur, string cpUtilisateur, string libellePortefeuille, string libellePlanning, bool changePassword)
        {
            sessionFactory = new Configuration().Configure().BuildSessionFactory();
            ISession session = sessionFactory.OpenSession();

            string motdepasse = "";
            string erreur     = "";

            //     try
            //       {
            // si il s'agit d'une modification
            if (utilisateur.numUtilisateur != unNouvelUtilisateur.numUtilisateur)
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    unNouvelUtilisateur = utilisateur;

                    //S'il s'agit d'une modification en commercial
                    if (unTypeUtilisateur.codeTypeUtilisateur == 3)
                    {
                        //si l'utilisateur n'etait pas un commercial avant
                        if (unNouvelUtilisateur.typeUtilisateur.codeTypeUtilisateur != 3)
                        {
                            Planning unNouveauPlanning = new Planning();
                            unNouveauPlanning.libellePlanning = libellePlanning;
                            unNouveauPlanning.utilisateur     = unNouvelUtilisateur;
                            session.SaveOrUpdate(unNouveauPlanning);

                            PorteFeuille unNouveauPortefeuille = new PorteFeuille();
                            unNouveauPortefeuille.libellePortefeuille = libellePortefeuille;
                            unNouveauPortefeuille.utilisateur         = unNouvelUtilisateur;
                            session.SaveOrUpdate(unNouveauPortefeuille);

                            unNouvelUtilisateur.planning     = unNouveauPlanning;
                            unNouvelUtilisateur.porteFeuille = unNouveauPortefeuille;
                            session.SaveOrUpdate(unNouvelUtilisateur);
                        }
                        // sinon si il etait commercial
                        else
                        {
                            Planning unNouveauPlanning = unNouvelUtilisateur.planning;
                            unNouveauPlanning.libellePlanning = libellePlanning;
                            session.SaveOrUpdate(unNouveauPlanning);

                            PorteFeuille unNouveauPortefeuille = unNouvelUtilisateur.porteFeuille;
                            unNouveauPortefeuille.libellePortefeuille = libellePortefeuille;
                            session.SaveOrUpdate(unNouveauPortefeuille);
                        }
                    }
                    else if (unTypeUtilisateur.codeTypeUtilisateur == 3 && libellePortefeuille == "" || libellePlanning == "")
                    {
                        erreur += "\nMerci de rentrer un nom de portefeuille/planning";
                    }

                    //Après une migration d'un commercial vers un autre type, on supprime son affectation au planning et portefeuille
                    else if (unTypeUtilisateur.codeTypeUtilisateur != 3)
                    {
                        //On supprime l'idUtilisateur dans la table portefeuille et planning
                        PorteFeuille portefeuille = unNouvelUtilisateur.porteFeuille;
                        Planning     planning     = utilisateur.planning;
                        portefeuille.utilisateur = null;
                        planning.utilisateur     = null;

                        session.SaveOrUpdate(portefeuille);
                        session.SaveOrUpdate(planning);


                        //On supprime l'idPortefeuille/idPlanning dans la table Utilsiateur
                        unNouvelUtilisateur.porteFeuille = null;
                        unNouvelUtilisateur.planning     = null;
                    }
                    //Une fois tous les tests bons, on peut affecter le type:
                    unNouvelUtilisateur.typeUtilisateur = unTypeUtilisateur;



                    if (changePassword == true)
                    {
                        //-------------------- DEBUT BLOC GENERATION DU MOT DE PASSE DU NOUVEL UTILISATEUR--------------------------
                        //On génère un mot de passe aléatoire pour le nouvel Utilisateur
                        Random       random = new Random();
                        const string chars  = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
                        motdepasse = new string(Enumerable.Repeat(chars, 10).Select(s => s[random.Next(s.Length)]).ToArray());
                        // on converti la phrase random en md5
                        InterLogin pourMD5 = new InterLogin();
                        //on associe le mot de passe
                        unNouvelUtilisateur.passwordUtilisateur = pourMD5.MD5Hash(motdepasse);
                        //-------------------- FIN BLOC GENERATION DU MOT DE PASSE DU NOUVEL UTILISATEUR--------------------------
                    }
                    session.SaveOrUpdate(unNouvelUtilisateur);
                    transaction.Commit();
                    session.Dispose();
                }
            }
            // Sinon si il s'agit d'un ajout
            else
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    unNouvelUtilisateur.typeUtilisateur = unTypeUtilisateur;
                    if (loginUtilisateur != null)
                    {
                        unNouvelUtilisateur.loginUtilisateur = loginUtilisateur;
                    }
                    else
                    {
                        erreur += "\nMerci d'entrer un login d'utilisateur";
                    }
                    if (nomUtilisateur != null)
                    {
                        unNouvelUtilisateur.nomUtilisateur = nomUtilisateur;
                    }
                    else
                    {
                        erreur += "\nMerci d'entrer un nom d'utilisateur";
                    }
                    if (prenomUtilisateur != null)
                    {
                        unNouvelUtilisateur.prenomUtilisateur = prenomUtilisateur;
                    }
                    else
                    {
                        erreur += "\nMerci d'entrer un prénom d'utilisateur";
                    }
                    if (mailUtilisateur != null)
                    {
                        unNouvelUtilisateur.mailUtilisateur = mailUtilisateur;
                    }
                    else
                    {
                        erreur += "\nMerci d'entrer un mail d'utilisateur";
                    }
                    if (telUtilisateur != null)
                    {
                        unNouvelUtilisateur.telUtilisateur = telUtilisateur;
                    }
                    else
                    {
                        erreur += "\nMerci d'entrer un numéro téléphone d'utilisateur";
                    }
                    if (adresseUtilisateur != null)
                    {
                        unNouvelUtilisateur.adresseUtilisateur = adresseUtilisateur;
                    }
                    else
                    {
                        erreur += "\nMerci d'entrer une adresse d'utilisateur";
                    }
                    if (villeUtilisateur != null)
                    {
                        unNouvelUtilisateur.villeUtilisateur = villeUtilisateur;
                    }
                    else
                    {
                        erreur += "\nMerci d'entrer une ville d'utilisateur";
                    }
                    if (cpUtilisateur != null)
                    {
                        unNouvelUtilisateur.cpUtilisateur = cpUtilisateur;
                    }
                    else
                    {
                        erreur += "\nMerci d'entrer un code postal d'utilisateur";
                    }

                    //-------------------- DEBUT BLOC GENERATION DU MOT DE PASSE DU NOUVEL UTILISATEUR--------------------------
                    //On génère un mot de passe aléatoire pour le nouvel Utilisateur
                    Random       random = new Random();
                    const string chars  = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
                    motdepasse = new string(Enumerable.Repeat(chars, 10).Select(s => s[random.Next(s.Length)]).ToArray());
                    // on converti la phrase random en md5
                    InterLogin pourMD5 = new InterLogin();
                    //on associe le mot de passe
                    unNouvelUtilisateur.passwordUtilisateur = pourMD5.MD5Hash(motdepasse);
                    //-------------------- FIN BLOC GENERATION DU MOT DE PASSE DU NOUVEL UTILISATEUR--------------------------
                    //S'il s'agit d'un commercial:
                    if (unNouvelUtilisateur.typeUtilisateur.codeTypeUtilisateur == 3 && (libellePlanning != null || libellePortefeuille != null))
                    {
                        unNouveauPlanning.libellePlanning         = libellePlanning;
                        unNouveauPortefeuille.libellePortefeuille = libellePortefeuille;

                        unNouveauPlanning.utilisateur     = unNouvelUtilisateur;
                        unNouveauPortefeuille.utilisateur = unNouvelUtilisateur;


                        unNouvelUtilisateur.planning     = unNouveauPlanning;
                        unNouvelUtilisateur.porteFeuille = unNouveauPortefeuille;


                        session.SaveOrUpdate(unNouvelUtilisateur);
                        session.SaveOrUpdate(unNouveauPlanning);
                        session.SaveOrUpdate(unNouveauPortefeuille);
                    }
                    else
                    {
                        //On sauvegarde le nouvel utilisateur
                        session.SaveOrUpdate(unNouvelUtilisateur);
                    }

                    transaction.Commit();
                    session.Dispose();
                }
            }
            //     }
            //       catch (Exception ex)
            //    {
            //        MessageBox.Show(ex.Message+erreur);
            //     }

            try{
                // Une fois que tout fonctionne on envoie le MDP au mail du nouvel utilisateur
                MailMessage mail = new MailMessage();
                mail.Subject = "Nouvel accès à GEPEV!";
                mail.Body    = "Bienvenue " + unNouvelUtilisateur.nomUtilisateur + " " + unNouvelUtilisateur.prenomUtilisateur + "! Votre mot de passe est: " + motdepasse;
                mail.From    = new MailAddress("*****@*****.**");
                mail.To.Add(unNouvelUtilisateur.mailUtilisateur);

                SmtpClient client = new SmtpClient();
                client.Host = "localhost";
                client.Send(mail);
            }catch (Exception ex) {
                MessageBox.Show("Erreur" + ex.Message);
            }
        }