/// <summary>
        /// Ouvre le Frais séléctionné à l'aide d'une nouvelle fenêtre
        /// </summary>
        public Frais Open()
        {
            if (this._DataGridMain.SelectedItem != null)
            {
                if (this._DataGridMain.SelectedItems.Count == 1)
                {
                    //Affichage du message "modification en cours"
                    ((App)App.Current)._theMainWindow.progressBarMainWindow.IsIndeterminate = true;
                    ((App)App.Current)._theMainWindow.textBlockMainWindow.Text = "Modification d'un Frais en cours ...";

                    bool EstAutoriser = false;
                    FraisWindow fraisWindowtemp = new FraisWindow();
                    //test si le frais est rattacher a l'utilisateur courant ou si l'utilisateur courant est un administrateur du module
                    if (((Frais)this._DataGridMain.SelectedItem).Salarie1 != null && ((Frais)this._DataGridMain.SelectedItem).Salarie1.Salarie_Interne != null && ((Frais)this._DataGridMain.SelectedItem).Salarie1.Salarie_Interne.Utilisateur != null &&  ((Frais)this._DataGridMain.SelectedItem).Salarie1.Salarie_Interne.Utilisateur.Contains(((App)App.Current)._connectedUser) || fraisWindowtemp.GetListAdministrateur().Contains(((App)App.Current)._connectedUser.Salarie_Interne1.Utilisateur.ElementAtOrDefault(0).Nom_Utilisateur))
                    {
                        EstAutoriser = true;
                    }

                    if (EstAutoriser)
                    {

                        //Création de la fenêtre
                        FraisWindow fraisWindow = new FraisWindow();
                        fraisWindow._comboBoxNomSalarie.IsEnabled = false;
                        fraisWindow._datePickerDateDeDebut.IsEnabled = true;
                        //Initialisation du Datacontext en Frais et association au Frais sélectionné
                        fraisWindow.DataContext = new Frais();
                        fraisWindow.DataContext = (Frais)this._DataGridMain.SelectedItem;

                        //booléen nullable vrai ou faux ou null
                        bool? dialogResult = fraisWindow.ShowDialog();

                        if (dialogResult.HasValue && dialogResult.Value == true)
                        {
                            //Si j'appuie sur le bouton Ok, je renvoi l'objet Frais dans le datacontext de la fenêtre
                            return (Frais)fraisWindow.DataContext;
                        }
                        else
                        {
                            //Je récupère les anciennes données de la base sur les modifications effectuées
                            ((App)App.Current).mySitaffEntities.Refresh(System.Data.Objects.RefreshMode.StoreWins, (Frais)(this._DataGridMain.SelectedItem));
                            //je refresh l'edmx et je relance le filtrage s'il y en avait un afin d'avoir les mêmes infos (invisible pour l'user)
                            ((App)App.Current).refreshEDMXSansVidage();
                            this.filtrage();

                            //Si j'appuie sur le bouton annuler, je préviens que j'annule ma modification
                            ((App)App.Current)._theMainWindow.progressBarMainWindow.IsIndeterminate = false;
                            this.recalculMax();
                            ((App)App.Current)._theMainWindow.textBlockMainWindow.Text = "Modification d'un Frais annulé : " + this.Frais.Count() + " / " + this.max;

                            return null;
                        }
                    }
                    else
                    {
                        MessageBox.Show("Ce n'est pas un de vos frais.", "Attention", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                        return null;
                    }
                }
                else
                {
                    MessageBox.Show("Vous ne devez sélectionner qu'un Frais.", "Attention", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                    return null;
                }
            }
            else
            {
                MessageBox.Show("Vous devez sélectionner un Frais.", "Attention", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                return null;
            }
        }
        //renvoi True si ca met en Affichage Administrateur, voir initialisationListAdministrateur() pour les noms des administrateurs
        private bool ChoixAffichage()
        {
            bool estAdministrateur = false;
            FraisWindow ftemp = new FraisWindow();
            if (((App)App.Current)._connectedUser != null)
            {
                if (((App)App.Current)._connectedUser.Nom_Utilisateur != null && !String.IsNullOrEmpty(((App)App.Current)._connectedUser.Nom_Utilisateur))
                {
                    if (ftemp.GetListAdministrateur().Contains(((App)App.Current)._connectedUser.Nom_Utilisateur))
                    {
                        AffichageAdministration();
                        estAdministrateur = true;
                    }
                    else
                    {
                        AffichageSalarie();
                    }
                }
                else
                {
                    MessageBox.Show("Votre nom d'utilisateur n'a pas été trouver en base de donnée. Veuillez contacter un administrateur", "Compte", MessageBoxButton.OK, MessageBoxImage.Error);
                    this.DialogResult = false;
                    this.Close();
                }
            }
            else
            {
                MessageBox.Show("Erreur compte. Veuillez contacter un administrateur", "Compte", MessageBoxButton.OK, MessageBoxImage.Error);
                this.DialogResult = false;
                this.Close();
            }

            try
            {
                //Detachement de tous les éléments de ftemp
                ((App)App.Current).mySitaffEntities.Detach((Frais)ftemp.DataContext);
            }
            catch (Exception)
            {

            }

            return estAdministrateur;
        }
        /// <summary>
        /// Ajoute un nouveau Frais à la liste à l'aide d'une nouvelle fenêtre
        /// </summary>
        public Frais Add()
        {
            bool FraisExist = false;
            //Affichage du message "ajout en cours"
            ((App)App.Current)._theMainWindow.progressBarMainWindow.IsIndeterminate = true;
            ((App)App.Current)._theMainWindow.textBlockMainWindow.Text = "Ajout d'un Frais en cours ...";

            //Initialisation de la fenêtre
            FraisWindow fraisWindow = new FraisWindow();

            foreach (Frais f in Frais.OfType<Frais>())
            {
                if (f.Date_Debut.Value.Month == DateTime.Today.Month)
                {
                    if (fraisWindow.GetListAdministrateur() != null && f.Salarie1 != null &&  f.Salarie1.Salarie_Interne != null && f.Salarie1.Salarie_Interne.Utilisateur != null && f.Salarie1.Salarie_Interne.Utilisateur.Contains(((App)App.Current)._connectedUser) && !fraisWindow.GetListAdministrateur().Contains(((App)App.Current)._connectedUser.Salarie_Interne1.Utilisateur.ElementAtOrDefault(0).Nom_Utilisateur))
                    {
                        FraisExist = true;
                        this._DataGridMain.SelectedItem = f;
                        break;
                    }
                    else
                    {
                        FraisExist = false;
                    }
                }
            }
            if (FraisExist)
            {
                MessageBox.Show("Il existe déjà un frais pour ce mois.", "Attention", MessageBoxButton.OK, MessageBoxImage.Exclamation);
            }

            if (!FraisExist)
            {
                if (fraisWindow.GetListAdministrateur().Contains(((App)App.Current)._connectedUser.Salarie_Interne1.Utilisateur.ElementAtOrDefault(0).Nom_Utilisateur))
                {
                    fraisWindow._comboBoxNomSalarie.IsEnabled = true;
                }
                fraisWindow._datePickerDateDeDebut.IsEnabled = true;
                //booléen nullable vrai ou faux ou null
                bool? dialogResult = fraisWindow.ShowDialog();

                if (dialogResult.HasValue && dialogResult.Value == true)
                {
                    //Si j'appuie sur le bouton Ok, je renvoi l'objet frais dans le datacontext de la fenêtre
                    return ((Frais)fraisWindow.DataContext);
                }
                else
                {
                    try
                    {
                        //Detachement de tous les éléments
                        ((App)App.Current).mySitaffEntities.Detach((Frais)fraisWindow.DataContext);
                    }
                    catch (Exception)
                    {

                    }
                    //Si j'appuie sur le bouton annuler, je préviens que j'annule mon ajout
                    ((App)App.Current)._theMainWindow.progressBarMainWindow.IsIndeterminate = false;
                    this.recalculMax();
                    ((App)App.Current)._theMainWindow.textBlockMainWindow.Text = "Ajout d'un Frais annulé : " + this.Frais.Count() + " / " + this.max;

                    return null;
                }
            }
            else
            {
                try
                {
                    //Detachement de tous les éléments
                    ((App)App.Current).mySitaffEntities.Detach((Frais)fraisWindow.DataContext);
                }
                catch (Exception)
                {

                }
                //Si j'appuie sur le bouton annuler, je préviens que j'annule mon ajout
                ((App)App.Current)._theMainWindow.progressBarMainWindow.IsIndeterminate = false;
                this.recalculMax();
                ((App)App.Current)._theMainWindow.textBlockMainWindow.Text = "Ajout d'un Frais annulé : " + this.Frais.Count() + " / " + this.max;

                return null;
            }
        }