/// <summary>
        /// Permet de supprimer un cabinet de la base de données
        /// Méthode utilisé seulement dans les tests pour éviter de se retrouver avec des cabinets factice
        /// </summary>
        /// <param name="unCabinet">Un objet Cabinet</param>
        public static void supprimerCabinet(Cabinet unCabinet)
        {
            try
            {
                // Ouverture de la connection
                MySqlConnection maConnection = new MySqlConnection(connectionString);
                maConnection.Open();


                // Création de la requête
                MySqlCommand maCommande = maConnection.CreateCommand();


                // On se sert de l'objet passé en paramètre pour supprimer le bon champs
                maCommande.CommandText = "DELETE FROM `cabinet` WHERE `id` = @idCabinet;";
                maCommande.Parameters.AddWithValue("@idCabinet", unCabinet.getIdCabinet());


                // Exécution de la requête
                maCommande.ExecuteNonQuery();
                // Fermeture de la connection
                maConnection.Close();


                // On ve se synchroniser avec la base de données
                PasserelleSuiviA.initListeCabinet();
            }
            catch (Exception erreur)
            {
                // Permet la gestion des erreurs
                throw erreur;
            }
        }
        /// <summary>
        /// Permet d'insérer un objet Medecin sans visiteur en base de données
        /// </summary>
        /// <param name="unMedecin">Un objet Medecin</param>
        public static void ajoutMedecinSansVisiteur(Medecin unMedecin)
        {
            try
            {
                // Ouverture de la connection
                MySqlConnection maConnection = new MySqlConnection(connectionString);
                maConnection.Open();


                // Création de la requête
                MySqlCommand maCommande = maConnection.CreateCommand();
                maCommande.CommandText = "INSERT INTO `medecin`(`nom`, `prenom`, `idCabinet`) VALUES (@nom, @prenom, @idCabinet);";
                // On associe les attributs de l'objet passé en paramètre à ceux de la requête
                maCommande.Parameters.AddWithValue("@nom", unMedecin.getNom());
                maCommande.Parameters.AddWithValue("@prenom", unMedecin.getPrenom());
                maCommande.Parameters.AddWithValue("@idCabinet", unMedecin.getLeCabinet().getIdCabinet());


                // Exécution de la requête
                maCommande.ExecuteNonQuery();
                maCommande.Clone();


                // On se synchronise avec la BDD
                PasserelleSuiviA.initListeCabinet();
                PasserelleSuiviA.initListeActeur();
                PasserelleSuiviA.initListeMedecin();
            }
            catch (Exception erreur)
            {
                // Permet la gestion des erreurs
                throw erreur;
            }
        }
        /// <summary>
        /// Permet d'insérer un objet Cabinet en base de données
        /// </summary>
        /// <param name="unCabinet">Un objet Cabinet</param>
        public static void ajoutCabinet(Cabinet unCabinet)
        {
            try
            {
                // Ouverture de la connection
                MySqlConnection maConnection = new MySqlConnection(connectionString);
                maConnection.Open();


                // Création de la requête
                MySqlCommand maCommande = maConnection.CreateCommand();
                maCommande.CommandText = "INSERT INTO `cabinet`(`longitudeGPS`, `latitudeGPS`, `cp`, `ville`, `rue`) VALUES (@longitudeGPS, @latitudeGPS, @cp, @ville, @rue);";
                // On associe les attributs de l'objet passé en paramètre à ceux de la requête
                maCommande.Parameters.AddWithValue("@longitudeGPS", unCabinet.getLongitudeGPS());
                maCommande.Parameters.AddWithValue("@latitudeGPS", unCabinet.getLatitudeGPS());
                maCommande.Parameters.AddWithValue("@cp", unCabinet.getCP());
                maCommande.Parameters.AddWithValue("@ville", unCabinet.getVille());
                maCommande.Parameters.AddWithValue("@rue", unCabinet.getRue());


                // Exécution de la requête
                maCommande.ExecuteNonQuery();
                maCommande.Clone();


                // On se synchronise avec la BDD
                PasserelleSuiviA.initListeCabinet();
            }
            catch (Exception erreur)
            {
                // Permet la gestion des erreurs
                throw erreur;
            }
        }
        /// <summary>
        /// Permet de mettre à jour une visite présente en base de données
        /// </summary>
        /// <param name="uneVisite">Un objet Visite</param>
        public static void metAJourVisite(Visite uneVisite)
        {
            try
            {
                // Ouverture de la connection
                MySqlConnection maConnection = new MySqlConnection(connectionString);
                maConnection.Open();


                // Création de la requête
                MySqlCommand maCommande = maConnection.CreateCommand();


                // On se sert de l'objet passé en paramètre pour modifier plusieurs champs
                maCommande.CommandText = "UPDATE `visite` SET `dateVisite`=@dateVisite,`estVisiteProgramme`=@estVisiteProgramme,`heureArriveeCabinet`=@heureArriveeCabinet,`heureDebutEntretien`=@heureDebutEntretien,`heureDepartCabinet`=@heureDepartCabinet WHERE `id` = @idVisite;";
                maCommande.Parameters.AddWithValue("@idVisite", uneVisite.getIdVisite());
                maCommande.Parameters.AddWithValue("@dateVisite", uneVisite.getDateVisite());
                maCommande.Parameters.AddWithValue("@estVisiteProgramme", uneVisite.getEstVisiteProgramme());
                maCommande.Parameters.AddWithValue("@heureArriveeCabinet", uneVisite.getHeureArriveeCabinet());
                maCommande.Parameters.AddWithValue("@heureDebutEntretien", uneVisite.getHeureDebutEntretien());
                maCommande.Parameters.AddWithValue("@heureDepartCabinet", uneVisite.getHeureDepartCabinet());


                // Exécution de la requête
                maCommande.ExecuteNonQuery();
                // Fermeture de la connection
                maConnection.Close();



                // On va se synchroniser avec la base de données
                PasserelleSuiviA.initListeCabinet();
                PasserelleSuiviA.initListeActeur();
                PasserelleSuiviA.initListeMedecin();
                PasserelleSuiviA.initListeVisite(uneVisite.getLActeur().getIdActeur());
            }
            catch (Exception erreur)
            {
                // Permet la gestion des erreurs
                throw erreur;
            }
        }
        /// <summary>
        /// Permet d'insérer un objet Visite en base de données
        /// </summary>
        /// <param name="uneVisite">Un objet Visite</param>
        public static void ajoutVisiste(Visite uneVisite)
        {
            try
            {
                // Ouverture de la connection
                MySqlConnection maConnection = new MySqlConnection(connectionString);
                maConnection.Open();


                // Création de la requête
                MySqlCommand maCommande = maConnection.CreateCommand();
                maCommande.CommandText = "INSERT INTO `visite`(`dateVisite`, `estVisiteProgramme`, `heureArriveeCabinet`, `heureDebutEntretien`, `heureDepartCabinet`, `idMedecin`, `idActeur`) VALUES (@dateVisite, @estVisiteProgramme, @heureArriveeCabinet, @heureDebutEntretien, @heureDepartCabinet, @idMedecin, @idActeur);";
                // On associe les attributs de l'objet passé en paramètre à ceux de la requête
                maCommande.Parameters.AddWithValue("@dateVisite", uneVisite.getDateVisite());
                maCommande.Parameters.AddWithValue("@estVisiteProgramme", uneVisite.getEstVisiteProgramme());
                maCommande.Parameters.AddWithValue("@heureArriveeCabinet", uneVisite.getHeureArriveeCabinet());
                maCommande.Parameters.AddWithValue("@heureDebutEntretien", uneVisite.getHeureDebutEntretien());
                maCommande.Parameters.AddWithValue("@heureDepartCabinet", uneVisite.getHeureDepartCabinet());
                maCommande.Parameters.AddWithValue("@idMedecin", uneVisite.getLeMedecin().getIdMedecin());
                maCommande.Parameters.AddWithValue("@idActeur", uneVisite.getLActeur().getIdActeur());


                // Exécution de la requête
                maCommande.ExecuteNonQuery();
                maCommande.Clone();


                // On se synchronise avec la BDD
                PasserelleSuiviA.initListeCabinet();
                PasserelleSuiviA.initListeActeur();
                PasserelleSuiviA.initListeMedecin();
                PasserelleSuiviA.initListeVisite(uneVisite.getLActeur().getIdActeur());
            }
            catch (Exception erreur)
            {
                // Permet la gestion des erreurs
                throw erreur;
            }
        }
        /// <summary>
        /// Permet de mettre à jour un médecin et son visiteur présent en base de données
        /// </summary>
        /// <param name="unMedecin">Un objet Medecin</param>
        public static void metAJourMedecinEtActeur(Medecin unMedecin)
        {
            try
            {
                // Ouverture de la connection
                MySqlConnection maConnection = new MySqlConnection(connectionString);
                maConnection.Open();


                // Création de la requête
                MySqlCommand maCommande = maConnection.CreateCommand();


                // On se sert de l'objet passé en paramètre pour modifier plusieurs champs
                maCommande.CommandText = "UPDATE `medecin` SET `nom`=@nom,`prenom`=@prenom, `idActeur`=@idActeur WHERE `id` = @idMedecin;";
                maCommande.Parameters.AddWithValue("@idMedecin", unMedecin.getIdMedecin());
                maCommande.Parameters.AddWithValue("@nom", unMedecin.getNom());
                maCommande.Parameters.AddWithValue("@prenom", unMedecin.getPrenom());
                maCommande.Parameters.AddWithValue("@idActeur", unMedecin.getLActeur().getIdActeur());


                // Exécution de la requête
                maCommande.ExecuteNonQuery();
                // Fermeture de la connection
                maConnection.Close();


                // On va se synchroniser avec la base de données
                PasserelleSuiviA.initListeCabinet();
                PasserelleSuiviA.initListeActeur();
                PasserelleSuiviA.initListeMedecin();
            }
            catch (Exception erreur)
            {
                // Permet la gestion des erreurs
                throw erreur;
            }
        }
        /// <summary>
        /// Permet de mettre à jour un cabinet présent en base de données
        /// </summary>
        /// <param name="unCabinet">Un objet Cabinet</param>
        public static void metAJourCabinet(Cabinet unCabinet)
        {
            try
            {
                // Ouverture de la connection
                MySqlConnection maConnection = new MySqlConnection(connectionString);
                maConnection.Open();


                // Création de la requête
                MySqlCommand maCommande = maConnection.CreateCommand();


                // On se sert de l'objet passé en paramètre pour modifier plusieurs champs
                maCommande.CommandText = "UPDATE `cabinet` SET `cp`=@cp,`ville`=@ville,`rue`=@rue WHERE `id` = @idCabinet;";
                maCommande.Parameters.AddWithValue("@idCabinet", unCabinet.getIdCabinet());
                maCommande.Parameters.AddWithValue("@cp", unCabinet.getCP());
                maCommande.Parameters.AddWithValue("@ville", unCabinet.getVille());
                maCommande.Parameters.AddWithValue("@rue", unCabinet.getRue());


                // Exécution de la requête
                maCommande.ExecuteNonQuery();
                // Fermeture de la connection
                maConnection.Close();


                // On va se synchroniser avec la base de données
                PasserelleSuiviA.initListeCabinet();
            }
            catch (Exception erreur)
            {
                // Permet la gestion des erreurs
                throw erreur;
            }
        }
        /// <summary>
        /// Permet de s'authentifier
        /// </summary>
        /// <param name="login">String</param>
        /// <param name="MDP">String</param>
        /// <param name="connexionViaActiveDirectory">Boolean</param>
        /// <returns>String</returns>
        public static string seConnecter(string login, string MDP, Boolean connexionViaActiveDirectory)
        {
            #region Cas sans Active Directory
            if (connexionViaActiveDirectory == false)
            {
                // Initialisation des variables nécessaires à la fonction et à la boucle tant que
                string  typeUtilisateur = null;
                Boolean trouveOuPas     = false;
                int     compteur        = 0;

                // On encode le mot de passe saisi par l'utilisateur et on le stocke dans un tableau
                byte[] unTab = Encoding.ASCII.GetBytes(MDP);
                // Création d'une classe permettant de crypter en SHA1
                SHA1CryptoServiceProvider classeDeCryptage = new SHA1CryptoServiceProvider();
                // On crypte en SHA1
                string MDPCrypte = BitConverter.ToString(classeDeCryptage.ComputeHash(unTab)).Replace("-", "");

                // Permet de parcourir la liste des acteurs pour savoir si le login et mot de passe sont bon
                while (trouveOuPas == false && compteur < uneListeDActeur.Count)
                {
                    // On regarde si le login de l'acteur est celui entré par l'utilisateur
                    if (uneListeDActeur[compteur].getLogin() == login)
                    {
                        // On regarde si le mot de passe de l'acteur est celui entré par l'utilisateur
                        if (uneListeDActeur[compteur].getMDP().ToUpper() == MDPCrypte)
                        {
                            // On renvoit le type d'acteur
                            // Cas où le login et le mot de passe sont correct
                            if (uneListeDActeur[compteur].getTypeActeur() == 2)
                            {
                                // L'utilisateur est un "visiteur"
                                typeUtilisateur = "Visiteur";
                                trouveOuPas     = true;
                                // On stocke l'acteur connecté dans un variable de la classe
                                PasserelleSuiviA.setActeurConnecte(uneListeDActeur[compteur]);
                            }
                            else
                            {
                                // L'utilisateur est un "administrateur" ou un "comptable" ou autre
                                typeUtilisateur = "Autre";
                                trouveOuPas     = true;
                                // On stocke l'acteur connecté dans un variable de la classe
                                PasserelleSuiviA.setActeurConnecte(uneListeDActeur[compteur]);
                            }
                        }
                        else
                        {
                            // Cas où le login saisi existe mais que le mot de passe correspondant est incorrect
                            typeUtilisateur = "Incorrect";
                            // Mot de passe incorrect, on sort de la boucle
                            trouveOuPas = true;
                        }
                    }
                    else
                    {
                        // Cas où ce n'est pas le bon login
                        typeUtilisateur = "Incorrect";
                    }
                    compteur++;
                }
                // On retourne le type d'utilisateur
                return(typeUtilisateur);
            }
            #endregion
            #region Cas avec Active Directory
            else
            {
                // Initialisation des variables nécessaires à la fonction et à la boucle tant que
                string  typeUtilisateur = null;
                Boolean trouveOuPas     = false;
                int     compteur        = 0;

                // Permet de parcourir la liste des acteurs pour obtenir l'acteur qui a tenté de se connecter
                while (trouveOuPas == false && compteur < uneListeDActeur.Count)
                {
                    // On regarde si le login de l'acteur est celui entré par l'utilisateur
                    if (uneListeDActeur[compteur].getLogin() == login)
                    {
                        // On renvoit le type d'acteur
                        // Cas où le login et le mot de passe sont correct
                        if (uneListeDActeur[compteur].getTypeActeur() == 2)
                        {
                            // L'utilisateur est un "visiteur"
                            typeUtilisateur = "Visiteur";
                            trouveOuPas     = true;
                            // On stocke l'acteur connecté dans un variable de la classe
                            PasserelleSuiviA.setActeurConnecte(uneListeDActeur[compteur]);
                            // On retourne le type d'utilisateur
                            return(typeUtilisateur);
                        }
                        else
                        {
                            // L'utilisateur est un "administrateur" ou un "comptable" ou autre
                            typeUtilisateur = "Autre";
                            trouveOuPas     = true;
                            // On stocke l'acteur connecté dans un variable de la classe
                            PasserelleSuiviA.setActeurConnecte(uneListeDActeur[compteur]);
                            // On retourne le type d'utilisateur
                            return(typeUtilisateur);
                        }
                    }
                    compteur++;
                }
            }
            #endregion
            return("Erreur de connexion");
        }