private void btnEnregistrerPatient_Click(object sender, RoutedEventArgs e)
        {
            // Verification si tous les champs obligatoires de Parent sont remplis
            bool continuerAjout = false; // Pour permetre l'ajout de Patient sans Parent

            bool ok = true;

            ok = string.IsNullOrEmpty(txtParentNom.Text.Trim()) ? false : true;
            ok = string.IsNullOrEmpty(txtParentPrenom.Text.Trim()) || !ok ? false : true;
            //ok = string.IsNullOrEmpty(txtParentTelephone.Text.Trim()) || !ok ? false : true;

            Parent nouveauParent = null;

            if (ok)
            {
                // Si le numéro de téléphone du parent est fourni, on valide le format (000)000-0000
                Regex regexNumTel = new Regex(@"^[(]{1}[0-9]{3}[)]{1}[0-9]{3}[-]{1}[0-9]{4}$");
                if (string.IsNullOrEmpty(txtParentTelephone.Text.Trim()) || regexNumTel.IsMatch(txtParentTelephone.Text))
                {
                    // Si le code postal du parent est fourni, on valide le format A0A 0A0
                    Regex regexCodePostal = new Regex(@"^[a-zA-Z]{1}[0-9]{1}[a-zA-Z]{1}[ -]?[0-9]{1}[a-zA-Z]{1}[0-9]{1}$");
                    if (string.IsNullOrEmpty(txtParentCodePostal.Text.Trim()) || regexCodePostal.IsMatch(txtParentCodePostal.Text))
                    {
                        // Creation de nouveau Parent pour le nouveau Patient
                        nouveauParent = new Parent
                        {
                            Nom        = txtParentNom.Text,
                            Prenom     = txtParentPrenom.Text,
                            Telephone  = txtParentTelephone.Text,
                            Adresse    = txtParentAdresse.Text,
                            Ville      = txtParentVille.Text,
                            Province   = cboParentProvince.Text,
                            CodePostal = txtParentCodePostal.Text.ToUpper()
                        };

                        // Creation et verification de ID du nouveau Parent
                        int    compteur   = 1;
                        string nouvelleId = nouveauParent.Nom.Substring(0, 3).ToUpper() + nouveauParent.Prenom.Substring(0, 1).ToUpper() + "0" + compteur.ToString();

                        Parent parent = myBdd.Parents.SingleOrDefault(x => x.IdParent.Trim() == nouvelleId);
                        while (parent != null) // Id appartient à un autre parent
                        {
                            if (++compteur < 10)
                            {
                                nouvelleId = nouveauParent.Nom.Substring(0, 3).ToUpper() + nouveauParent.Prenom.Substring(0, 1).ToUpper() + "0" + compteur.ToString();
                            }
                            else
                            {
                                nouvelleId = nouveauParent.Nom.Substring(0, 3).ToUpper() + nouveauParent.Prenom.Substring(0, 1).ToUpper() + compteur.ToString();
                            }

                            parent = myBdd.Parents.SingleOrDefault(x => x.IdParent.Trim() == nouvelleId);
                        }

                        nouveauParent.IdParent = nouvelleId;

                        //Ajout du nouvelle parent à la collection
                        myBdd.Parents.Add(nouveauParent);

                        // Saving nouveau parent dans la BDD;
                        try
                        {
                            myBdd.SaveChanges();
                            MessageBox.Show("Le parent " + nouveauParent.Prenom.Trim() + " " + nouveauParent.Nom.Trim() +
                                            " ajouté avec succès", "Confirmation", MessageBoxButton.OK, MessageBoxImage.Information);

                            continuerAjout = true; // Pour qu'on puisse proceder a l'enregistrement du Patient
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "Erreur d'enregistrement de parent",
                                            MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Le code postal doit être saisi en format A0A 0A0", "Erreur de format - Parent", MessageBoxButton.OK, MessageBoxImage.Warning);
                    }
                }
                else
                {
                    MessageBox.Show("Le numéro de téléphone doit être saisi en format (000)000-0000", "Erreur de format - Parent", MessageBoxButton.OK, MessageBoxImage.Warning);
                }
            }
            else
            {
                var resultat = MessageBox.Show("Remplissez Nom, Prenom et Telephone du Parent. Sinon continuez sans ajout de Parent", "Alerte", MessageBoxButton.YesNo, MessageBoxImage.Warning);

                if (resultat == MessageBoxResult.No) // On veut continuer sans creer un Parent
                {
                    continuerAjout = true;
                }
            }

            if (continuerAjout)
            {
                // Verification si tous les champs obligatoires de Patient sont remplis
                ok = true;
                ok = string.IsNullOrEmpty(txtNom.Text.Trim()) ? false : true;
                ok = string.IsNullOrEmpty(txtPrenom.Text.Trim()) || !ok ? false : true;
                ok = string.IsNullOrEmpty(txtNAM.Text.Trim()) || !ok ? false : true;
                ok = dpDateNaissance.SelectedDate == null || !ok ? false : true;

                // Verification si un Parent a été ajouté
                string idNouveauParent = nouveauParent != null ? nouveauParent.IdParent : null;

                // Recupération de l'ID de compagnie d'assurance à partir de combobox
                Nullable <int>     idCompAss = null;
                CompagnieAssurance compAss   = (CompagnieAssurance)cboAssurancePrivee.SelectedItem;
                if (compAss != null)
                {
                    idCompAss = compAss.IdCompagnie;
                }

                if (ok)
                {
                    // Si le numéro de téléphone du patient est fourni, on valide le format (000)000-0000
                    Regex regexNumTel = new Regex(@"^[(]{1}[0-9]{3}[)]{1}[0-9]{3}[-]{1}[0-9]{4}$");
                    if (string.IsNullOrEmpty(txtTelephone.Text.Trim()) || regexNumTel.IsMatch(txtTelephone.Text))
                    {
                        // Si le code postal du patient est fourni, on valide le format A0A 0A0
                        Regex regexCodePostal = new Regex(@"^[a-zA-Z]{1}[0-9]{1}[a-zA-Z]{1}[ -]?[0-9]{1}[a-zA-Z]{1}[0-9]{1}$");
                        if (string.IsNullOrEmpty(txtCodePostal.Text.Trim()) || regexCodePostal.IsMatch(txtCodePostal.Text))
                        {
                            // Creation de nouveau Patient
                            Patient nouveauPatient = new Patient()
                            {
                                NumAssuranceMaladie = txtNAM.Text.Trim().ToUpper(),
                                Nom            = txtNom.Text,
                                Prenom         = txtPrenom.Text,
                                Telephone      = txtTelephone.Text,
                                Adresse        = txtAdresse.Text,
                                Ville          = txtVille.Text,
                                Province       = cboProvince.Text,
                                CodePostal     = txtCodePostal.Text.ToUpper(),
                                DateNaissance  = (DateTime)dpDateNaissance.SelectedDate,
                                AssurancePrive = idCompAss,
                                IdParent       = idNouveauParent
                            };

                            // Verification pour le doublon de patient
                            Patient patient = myBdd.Patients.SingleOrDefault(x => x.NumAssuranceMaladie.Trim() == nouveauPatient.NumAssuranceMaladie.Trim());
                            if (patient == null) // Le patient ne se trouve pas encore dans BDD
                            {
                                myBdd.Patients.Add(nouveauPatient);

                                // Saving nouveau patient dans la BDD;
                                try
                                {
                                    myBdd.SaveChanges();
                                    MessageBox.Show("Le patient " + nouveauPatient.Prenom.Trim() + " " + nouveauPatient.Nom.Trim() +
                                                    " ajouté avec succès", "Confirmation", MessageBoxButton.OK, MessageBoxImage.Information);

                                    PreposeAccueil fenetrePA = new PreposeAccueil();
                                    fenetrePA.ShowDialog();
                                    this.Close();
                                }
                                catch (Exception ex)
                                {
                                    MessageBox.Show(ex.Message, "Erreur d'enregistrement de patient",
                                                    MessageBoxButton.OK, MessageBoxImage.Error);
                                }
                            }
                            else // Le patient se trouve deja dans la BDD
                            {
                                MessageBox.Show("Ajout impossible: le patient était déjà ajouté", "Alerte", MessageBoxButton.OK, MessageBoxImage.Warning);
                            }
                        }
                        else
                        {
                            MessageBox.Show("Le code postal doit être saisi en format A0A 0A0", "Erreur de format - Patient", MessageBoxButton.OK, MessageBoxImage.Warning);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Le numéro de téléphone doit être saisi en format (000)000-0000", "Erreur de format - Patient", MessageBoxButton.OK, MessageBoxImage.Warning);
                    }
                }
                else
                {
                    MessageBox.Show("Remplissez Numéro AM, Nom, Prenom, Date Naissance du Patient", "Alerte", MessageBoxButton.OK, MessageBoxImage.Warning);
                }
            } // if (continuerAjout)
        }     // btnEnregistrerPatient_Click
        private void btnEnregistrerMedecin_Click(object sender, RoutedEventArgs e)
        {
            bool    ok       = true;
            Medecin sMedecin = (Medecin)dgListeMedecins.SelectedItem;

            if (sMedecin != null && sMedecin.Prenom != null && sMedecin.Nom != null && sMedecin.Specialite != null)
            {
                // Verification de la validite des informations saisies
                ok = string.IsNullOrEmpty(sMedecin.Prenom.Trim()) ? false : true;
                ok = string.IsNullOrEmpty(sMedecin.Nom.Trim()) || !ok ? false : true;
                ok = string.IsNullOrEmpty(sMedecin.Specialite.Trim()) || !ok ? false : true;
                //ok = (sMedecin.EmbaucheParHopital != true && sMedecin.EmbaucheParHopital != false) || !ok ? false : true;
                ok = sMedecin.EmbaucheParHopital == null || !ok ? false : true;

                if (ok)
                {
                    // Se l'ID est egal a null, il s'agit d'un nouveau medecin
                    if (sMedecin.IdMedecin == null)
                    {
                        // Vérification si le médecin saisi existe déjà dans la liste
                        Medecin med = myBdd.Medecins.SingleOrDefault(x => x.Nom.Trim() == sMedecin.Nom.Trim() &&
                                                                     x.Prenom.Trim() == sMedecin.Prenom.Trim() &&
                                                                     x.Specialite.Trim() == sMedecin.Specialite.Trim());
                        if (med == null) // Le medecin n'existe pas
                        {
                            // Composition et verification de la nouvelle ID de medecin
                            int    compteur   = 1;
                            string nouvelleId = "MED" + sMedecin.Prenom.Substring(0, 1).ToUpper() + sMedecin.Nom.Substring(0, 1).ToUpper() + "0" + compteur.ToString();

                            med = myBdd.Medecins.SingleOrDefault(x => x.IdMedecin.Trim() == nouvelleId);
                            while (med != null) // Id appartient à un autre médecin
                            {
                                if (++compteur < 10)
                                {
                                    nouvelleId = "MED" + sMedecin.Prenom.Substring(0, 1).ToUpper() + sMedecin.Nom.Substring(0, 1).ToUpper() + "0" + compteur.ToString();
                                }
                                else
                                {
                                    nouvelleId = "MED" + sMedecin.Prenom.Substring(0, 1).ToUpper() + sMedecin.Nom.Substring(0, 1).ToUpper() + compteur.ToString();
                                }

                                med = myBdd.Medecins.SingleOrDefault(x => x.IdMedecin.Trim() == nouvelleId);
                            }

                            // Creation de nouveau objet de type Medecin
                            Medecin nouveauMedecin = new Medecin
                            {
                                IdMedecin          = nouvelleId,
                                Nom                = sMedecin.Nom,
                                Prenom             = sMedecin.Prenom,
                                Specialite         = sMedecin.Specialite,
                                EmbaucheParHopital = sMedecin.EmbaucheParHopital
                            };

                            // Ajout du nouvel médecin à la collection Medecins
                            myBdd.Medecins.Add(nouveauMedecin);

                            // Saving changes to the DB
                            try
                            {
                                myBdd.SaveChanges();
                                MessageBox.Show("Le médecin " + sMedecin.Prenom.Trim() + " " + sMedecin.Nom.Trim() +
                                                " ajouté avec succès", "Confirmation", MessageBoxButton.OK, MessageBoxImage.Information);
                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show(ex.Message, "Erreur d'enregistrement",
                                                MessageBoxButton.OK, MessageBoxImage.Error);
                            }
                        }
                        else // Le medecin deja existe
                        {
                            MessageBox.Show("Le médecin " + sMedecin.Prenom.Trim() + " " + sMedecin.Nom.Trim() + ", " +
                                            sMedecin.Specialite.Trim() + ", existe déjà dans la liste: saisie impossible", "Alerte",
                                            MessageBoxButton.OK, MessageBoxImage.Warning);
                        }
                    } // if (sMedecin.IdMedecin == null) - nouveau médecin

                    // Sinon, il s'agit d'un medecin existant
                    else
                    {
                        Medecin med = myBdd.Medecins.SingleOrDefault(x => x.IdMedecin.Trim() == sMedecin.IdMedecin.Trim());
                        med.Nom                = sMedecin.Nom.Trim();
                        med.Prenom             = sMedecin.Prenom.Trim();
                        med.Specialite         = sMedecin.Specialite.Trim();
                        med.EmbaucheParHopital = sMedecin.EmbaucheParHopital;

                        // Saving changes to the DB
                        try
                        {
                            myBdd.SaveChanges();
                            MessageBox.Show("Le médecin " + sMedecin.Prenom.Trim() + " " + sMedecin.Nom.Trim() +
                                            " modifié avec succès", "Confirmation", MessageBoxButton.OK, MessageBoxImage.Information);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "Erreur d'enregistrement",
                                            MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                    }

                    afficherMedecins();
                } // if (ok)
                else
                {
                    MessageBox.Show("Vous devez remplir tous les champs sauf ID", "Alerte",
                                    MessageBoxButton.OK, MessageBoxImage.Warning);
                }
            }
            else
            {
                MessageBox.Show("Aucun changement n'a été fait. \nVous devez remplir tous les champs sauf ID", "Alerte", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
        } // btnEnregistrerMedecin_Click
        } // listerAdmissions()

        private void btnDonnerConge_Click(object sender, RoutedEventArgs e)
        {
            AdmissionAffichee admissionAffichee = dgListeAdmissions.SelectedItem as AdmissionAffichee;

            if (admissionAffichee != null)
            {
                // On retrouve l'admission choisie dans notre table Admissions
                Admission sAdmission = myBdd.Admissions.SingleOrDefault(a => a.IdAdmission == admissionAffichee.IdAdmission);

                if (sAdmission != null)
                {
                    if (sAdmission.DateConge == null)
                    {
                        // On met la date d'aujourd'hui comme la date de congé et on libère le lit
                        sAdmission.DateConge  = DateTime.Today;
                        sAdmission.Lit.Occupe = false;

                        // On calcule la facture à payer
                        double totalFacture  = 0;
                        double coutQuotidien = 0;

                        if (sAdmission.ChambrePriveGratuit != true && sAdmission.Patient.AssurancePrive == null)
                        {
                            if (sAdmission.Lit.IdTypeLit == 2)
                            {
                                coutQuotidien += 267;
                            }
                            else if (sAdmission.Lit.IdTypeLit == 3)
                            {
                                coutQuotidien += 571;
                            }
                        }

                        if (sAdmission.LocationTelephone == true)
                        {
                            coutQuotidien += 7.50;
                        }

                        if (sAdmission.LocationTeleviseur == true)
                        {
                            coutQuotidien += 42.50;
                        }

                        // Calcul des jours passés à l'hôpital et du total de la facture
                        if (coutQuotidien > 0)
                        {
                            int Nbjours = (sAdmission.DateConge.Value.Date - sAdmission.DateAdmission.Date).Days;
                            totalFacture = coutQuotidien * Nbjours;
                        }

                        // Sauvegarde des changements et affichage de la facture
                        try
                        {
                            myBdd.SaveChanges();
                            MessageBox.Show("Le patient " + sAdmission.Patient.Nom.Trim() + " " + sAdmission.Patient.Prenom.Trim() +
                                            " a reçu son congé et le total de sa facture est: " + totalFacture + "$",
                                            "Congé", MessageBoxButton.OK, MessageBoxImage.Information);

                            listerAdmissions();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "Erreur d'enregistrement", MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                    }
                    else
                    {
                        MessageBox.Show("L'admission choisie était déjà fermée", "Alerte", MessageBoxButton.OK, MessageBoxImage.Warning);
                    }
                }
                else
                {
                    MessageBox.Show("Aucune admission n'est sélectionnée!", "Alerte",
                                    MessageBoxButton.OK, MessageBoxImage.Warning);
                }
            }
            else
            {
                MessageBox.Show("Aucune admission n'est sélectionnée!", "Alerte",
                                MessageBoxButton.OK, MessageBoxImage.Warning);
            }
        } // btnDonnerConge_Click
        private void btnEnregistrerAdmission_Click(object sender, RoutedEventArgs e)
        {
            // On vérifie s'il y a des lits disponibles dans l'hôpital
            int nbreLits = calculerLitsTotalDispHopital(myBdd);

            if (nbreLits > 0)
            {
                if (cboNAM.SelectedItem != null)
                {
                    Patient sPatient  = (Patient)cboNAM.SelectedItem;
                    string  idPatient = sPatient.NumAssuranceMaladie;

                    // Vérification si le patient choisi n'est pas hospitalisé présentement
                    var resultat = (from adm in myBdd.Admissions
                                    where adm.NumAssuranceMaladie.Trim() == idPatient.Trim() &&
                                    adm.DateConge == null
                                    select adm).FirstOrDefault();

                    if (resultat == null) // Il n'y a pas d'admission en cours pour le patient
                    {
                        // On declare les variables dont nous aurons besoin pour creer une nouvelle admission
                        DateTime            dateAdmission = (DateTime)dpDateDebutAdmission.SelectedDate;
                        Nullable <DateTime> dateChirurgie = null;
                        int  age = calculerAge(sPatient);
                        bool chirurgieProgrammee = false;
                        int  categorieLitChoisie, idLitAssigne;
                        bool chambrePriveGratuit = false;
                        bool locationTV          = false;
                        bool locationTelephone   = false;

                        // On choisit le departement
                        int idDept = 5; // Par défault: 5 - Général dpt
                        if (chChirurgiePrevue.IsChecked == true)
                        {
                            chirurgieProgrammee = true;
                            idDept = 1; // 1 - ID de dept Chirurgie;
                            if (dpDateChirurgie.SelectedDate != null)
                            {
                                dateChirurgie = (DateTime)dpDateChirurgie.SelectedDate;
                            }
                        }
                        else if (age <= 16)
                        {
                            idDept = 2; // 2 - ID de dept Pédiatrie
                        }
                        else
                        {
                            Departement dept = (Departement)cboDepartement.SelectedItem;
                            if (dept != null)
                            {
                                idDept = dept.IdDepartement;
                            }
                        }

                        // On assigne un medecin
                        string  idMedecin = "";
                        Medecin medecin   = (Medecin)cboMedecin.SelectedItem;
                        if (medecin != null)
                        {
                            idMedecin = medecin.IdMedecin;
                        }

                        //On choisit un lit
                        if (rbLitStandard.IsChecked == true)
                        {
                            categorieLitChoisie = 1;
                        }
                        else if (rbLitSemiPrive.IsChecked == true)
                        {
                            categorieLitChoisie = 2;
                        }
                        else
                        {
                            categorieLitChoisie = 3;
                        }

                        // On cherche un lit de la catégorie choisie dans le departement assigné
                        Lit sLit = trouverLit(myBdd, categorieLitChoisie, idDept);

                        // On vérifie le résultat de recherche
                        if (sLit != null)
                        {
                            // Un lit est retrouvé, on vérifie si c'est de la même catégorie que désiré
                            if (sLit.IdTypeLit != categorieLitChoisie && categorieLitChoisie == 1)
                            {
                                MessageBox.Show("La catégorie du lit assigné est différent de celle choisie. Surclassement gratuit",
                                                "Avertissement", MessageBoxButton.OK, MessageBoxImage.Information);
                                chambrePriveGratuit = true;
                            }
                            sLit.Occupe  = true;
                            idLitAssigne = sLit.IdLit;

                            if (chLocationTV.IsChecked == true)
                            {
                                locationTV = true;
                            }

                            if (chLocationTelephone.IsChecked == true)
                            {
                                locationTelephone = true;
                            }

                            // Verification si tous les champs obligatoires sont remplis
                            bool ok = true;
                            ok = dateAdmission == null ? false : true;
                            ok = (chirurgieProgrammee == true && dateChirurgie == null) || !ok ? false : true;
                            ok = sLit == null || medecin == null || !ok ? false : true;

                            if (ok)
                            {
                                // On crée une nouvelle instance de la classe Admission
                                Admission admission = new Admission()
                                {
                                    ChirurgieProgramme  = chirurgieProgrammee,
                                    DateAdmission       = dateAdmission,
                                    DateChirurgie       = dateChirurgie,
                                    DateConge           = null,
                                    LocationTeleviseur  = locationTV,
                                    LocationTelephone   = locationTelephone,
                                    NumAssuranceMaladie = idPatient,
                                    idLit               = idLitAssigne,
                                    idMedecin           = idMedecin,
                                    ChambrePriveGratuit = chambrePriveGratuit
                                };

                                // On ajoute la nouvelle admission à notre collection d'admissions
                                myBdd.Admissions.Add(admission);

                                // On sauvegarde les changement dans la BDD
                                try
                                {
                                    myBdd.SaveChanges();

                                    // On cherche la nouvelle admission dans la BD pour afficher son numéro
                                    Admission admAjoutee = (from a in myBdd.Admissions
                                                            where a.NumAssuranceMaladie == idPatient
                                                            select a).FirstOrDefault();
                                    if (admAjoutee != null)
                                    {
                                        MessageBox.Show("L'admission numéro " + admAjoutee.IdAdmission + " ajoutée avec succès", "Confirmation", MessageBoxButton.OK, MessageBoxImage.Information);

                                        // Affichage de la nouvelle admission
                                        AfficherAdmission fenetreAffAdm = new AfficherAdmission(admAjoutee);
                                        fenetreAffAdm.ShowDialog();
                                        this.Close();
                                    }
                                }
                                catch (Exception ex)
                                {
                                    MessageBox.Show(ex.Message, "Erreur d'enregistrement d'admission",
                                                    MessageBoxButton.OK, MessageBoxImage.Error);
                                }
                            }
                            else // Pas tous les chemps sont remplis
                            {
                                MessageBox.Show("Remplissez tous le champs obligatoires", "Avertissement",
                                                MessageBoxButton.OK, MessageBoxImage.Warning);
                            }
                        }
                        else // Il n'y a aucun lit dans le departement choisi
                        {    // Donc on suggère de choisir un autre departement
                            MessageBox.Show("Il n'y a aucun lit disponible dans le departement choisi. " +
                                            "Vous pouvez choisir un autre departement pour y placer le patient",
                                            "Avertissement", MessageBoxButton.OK, MessageBoxImage.Warning);
                        }
                    }
                    else // Le patient est presentement hospitalisé
                    {
                        MessageBox.Show("Ajout d'admission impossible: le patient choisi est présentement hospitalisé",
                                        "Erreur", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                }
                else // le patient n'est pas choisi
                {
                    MessageBox.Show("Choisissez un patient pour ajouter une admission", "Alerte",
                                    MessageBoxButton.OK, MessageBoxImage.Warning);
                }
            }
            else // Il n'y pas de lit disponible dans tout l'hopital
            {
                MessageBox.Show("Ajout d'admission impossible: pas de lits disponibles", "Alerte",
                                MessageBoxButton.OK, MessageBoxImage.Error);
            }
        } // bthEnregistrerAdmission_Click