} // afficherMedecins

        private void btnCongedierMedecin_Click(object sender, RoutedEventArgs e)
        {
            Medecin sMedecin = (Medecin)dgListeMedecins.SelectedItem;

            if (sMedecin != null && sMedecin.IdMedecin != null)
            {
                Medecin med = myBdd.Medecins.SingleOrDefault(x => x.IdMedecin.Trim() == sMedecin.IdMedecin.Trim());
                med.EmbaucheParHopital = false;

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

                afficherMedecins();
            }
            else
            {
                MessageBox.Show("Aucun médecin n'est choisi", "Alerte", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
        } // btnCongedierMedecin_Click
        } // btnCongedierMedecin_Click

        private void btnSupprimerMedecin_Click(object sender, RoutedEventArgs e)
        {
            Medecin sMedecin = dgListeMedecins.SelectedItem as Medecin;

            if (sMedecin != null && sMedecin.IdMedecin != null)
            {
                // Verification si le medecin choisi pour suppression est lie a un dossier d'admission
                Admission dossierAdmission = myBdd.Admissions.FirstOrDefault(x => x.idMedecin == sMedecin.IdMedecin);

                if (dossierAdmission != null)
                {
                    MessageBox.Show("Suppression est impossible: le médecin " + sMedecin.Prenom.Trim() + " " + sMedecin.Nom.Trim() + "est lié à un dossier d'admission",
                                    "Alerte", MessageBoxButton.OK, MessageBoxImage.Warning);
                }
                else
                {
                    var resultat = MessageBox.Show("Êtes-vous certain de vouloir supprimer le médecin " + sMedecin.Prenom.Trim() + " " + sMedecin.Nom.Trim() + "?",
                                                   "Attention", MessageBoxButton.YesNo, MessageBoxImage.Question);

                    if (resultat == MessageBoxResult.Yes)
                    {
                        Medecin med = myBdd.Medecins.SingleOrDefault(x => x.IdMedecin == sMedecin.IdMedecin);
                        myBdd.Medecins.Remove(med);

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

                        afficherMedecins();
                    } // if MessageBoxResult.Yes
                }     // else i.e. dossierAdmission == null
            }         // if (sMedecin != null)
            else
            {
                MessageBox.Show("Choisissez un médecin à supprimer", "Rappel", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
        } // btnSupprimerMedecin_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
        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