/// <summary>
        /// Met à jour l'état en bas pour l'utilisateur
        /// </summary>
        /// <param name="typeEtat">texte : "Filtrage", "Ajout", "Modification", "Suppression", "Look", "" ("" = Chargement)</param>
        /// <param name="rhf">un objet Releve_heure_forfait soit pour l'ajouter au listing, soit pour afficher qui a été modifié ou supprimé</param>
        public void MiseAJourEtat(string typeEtat, Releve_Heure_Forfait rhf)
        {
            //Je racalcul le nombre max d'élements
            this.recalculMax();
            //En fonction de l'action, j'affiche le message
            if (typeEtat == "Filtrage")
            {
            ((App)App.Current)._theMainWindow.changementTexteStatusBar("filtrage des Relevés d'heures de chantier terminé : " + this.listReleveHeureForfait.Count() + " / " + this.max);
            }
            else if (typeEtat == "Ajout")
            {
                //J'ajoute la commande_fournisseur dans le linsting
                this.listReleveHeureForfait.Add(rhf);
                //Je racalcul le nombre max d'élements après l'ajout
                this.recalculMax();
            ((App)App.Current)._theMainWindow.changementTexteStatusBar("Ajout d'un Relevés d'heures de chantier supervisé par '" + rhf.Salarie1.Personne.fullname + "' effectué avec succès. Nombre d'élements : " + this.listReleveHeureForfait.Count() + " / " + this.max);
            }
            else if (typeEtat == "Modification")
            {
                //Je raffraichis mon datagrid
                this._DataGridMain.Items.Refresh();
            ((App)App.Current)._theMainWindow.changementTexteStatusBar("Modification du Relevés d'heures de chantier supervisé par '" + rhf.Salarie1.Personne.fullname + "' effectuée avec succès. Nombre d'élements : " + this.listReleveHeureForfait.Count() + " / " + this.max);
            }
            else if (typeEtat == "Suppression")
            {
                //Je supprime de mon listing l'élément supprimé
                this.listReleveHeureForfait.Remove(rhf);
                //Je racalcul le nombre max d'élements après la suppression
                this.recalculMax();
            ((App)App.Current)._theMainWindow.changementTexteStatusBar("Suppression du Relevés d'heures de chantier effectuée avec succès. Nombre d'élements : " + this.listReleveHeureForfait.Count() + " / " + this.max);
            }
            else if (typeEtat == "Look")
            {

            }
            else if (typeEtat == "Duplicate")
            {
                //J'ajoute la commande_fournisseur dans le linsting
                this.listReleveHeureForfait.Add(rhf);
                //Je racalcul le nombre max d'élements après l'ajout
                this.recalculMax();
            ((App)App.Current)._theMainWindow.changementTexteStatusBar("Dupliquer un Relevés d'heures de chantier effectué avec succès. Nombre d'élements : " + this.listReleveHeureForfait.Count() + " / " + this.max);
            }
            else
            {
            ((App)App.Current)._theMainWindow.changementTexteStatusBar("Chargement des Relevés d'heures de chantier terminé : " + this.listReleveHeureForfait.Count() + " / " + this.max);
            }
            //Je retri les données dans le sens par défaut
            this.triDatas();
            //J'arrete la progressbar
            ((App)App.Current)._theMainWindow.progressBarMainWindow.IsIndeterminate = false;
        }
        /// <summary>
        /// duplique la commande passée en paramètre
        /// </summary>
        /// <param name="commande1">commande à dupliquer</param>
        private Releve_Heure_Forfait duplicateReleve(Releve_Heure_Forfait itemToCopy)
        {
            Releve_Heure_Forfait tmp = new Releve_Heure_Forfait();

            tmp.Affaire1 = itemToCopy.Affaire1;
            tmp.Salarie1 = itemToCopy.Salarie1;
            foreach (Heure_Forfait ccf in itemToCopy.Heure_Forfait)
            {
                Heure_Forfait toAdd = new Heure_Forfait();

                toAdd.Salarie1 = ccf.Salarie1;
                toAdd.Heures_Dimanche_Jour = ccf.Heures_Dimanche_Jour;
                toAdd.Heures_Dimanche_Nuit = ccf.Heures_Dimanche_Nuit;
                toAdd.Heures_Jeudi_Jour = ccf.Heures_Jeudi_Jour;
                toAdd.Heures_Jeudi_Nuit = ccf.Heures_Jeudi_Nuit;
                toAdd.Heures_Lundi_Jour = ccf.Heures_Lundi_Jour;
                toAdd.Heures_Lundi_Nuit = ccf.Heures_Lundi_Nuit;
                toAdd.Heures_Mardi_Jour = ccf.Heures_Mardi_Jour;
                toAdd.Heures_Mardi_Nuit = ccf.Heures_Mardi_Nuit;
                toAdd.Heures_Mercredi_Jour = ccf.Heures_Mercredi_Jour;
                toAdd.Heures_Mercredi_Nuit = ccf.Heures_Mercredi_Nuit;
                toAdd.Heures_Samedi_Jour = ccf.Heures_Samedi_Jour;
                toAdd.Heures_Samedi_Nuit = ccf.Heures_Samedi_Nuit;
                toAdd.Heures_Vendredi_Jour = ccf.Heures_Vendredi_Jour;
                toAdd.Heures_Vendredi_Nuit = ccf.Heures_Vendredi_Nuit;
                toAdd.Vehicule_Dimanche = ccf.Vehicule_Dimanche;
                toAdd.Vehicule_Jeudi = ccf.Vehicule_Jeudi;
                toAdd.Vehicule_Lundi = ccf.Vehicule_Lundi;
                toAdd.Vehicule_Mardi = ccf.Vehicule_Mardi;
                toAdd.Vehicule_Mercredi = ccf.Vehicule_Mercredi;
                toAdd.Vehicule_Samedi = ccf.Vehicule_Samedi;
                toAdd.Vehicule_Vendredi = ccf.Vehicule_Vendredi;

                tmp.Heure_Forfait.Add(toAdd);
            }

            return tmp;
        }
        /// <summary>
        /// duplique un relevé à la liste à l'aide d'une nouvelle fenêtre
        /// </summary>
        public Releve_Heure_Forfait Duplicate()
        {
            if (this._DataGridMain.SelectedItem != null)
            {
                if (this._DataGridMain.SelectedItems.Count == 1)
                {
                    //Affichage du message "ajout en cours"
                    ((App)App.Current)._theMainWindow.progressBarMainWindow.IsIndeterminate = true;
            ((App)App.Current)._theMainWindow.changementTexteStatusBar("Dupliquer un relevé d'heures forfait en cours ...");

                    //Création de la fenêtre
                    ReleveHeureForfaitWindow releveHeureForfaitWindow = new ReleveHeureForfaitWindow();

                    //Duplication de la commande sélectionnée
                    Releve_Heure_Forfait tmp = new Releve_Heure_Forfait();
                    tmp = duplicateReleve((Releve_Heure_Forfait)this._DataGridMain.SelectedItem);

                    //Association de l'élement dupliqué au datacontext de la fenêtre
                    releveHeureForfaitWindow.DataContext = tmp;

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

                    if (dialogResult.HasValue && dialogResult.Value == true)
                    {
                        //Si j'appuie sur le bouton Ok, je renvoi l'objet se trouvant dans le datacontext de la fenêtre
                        return (Releve_Heure_Forfait)releveHeureForfaitWindow.DataContext;
                    }
                    else
                    {
                        try
                        {
                            //On détache tous les élements liés au relevé Heure_Forfait
                            ObservableCollection<Heure_Forfait> toRemove = new ObservableCollection<Heure_Forfait>();
                            foreach (Heure_Forfait item in ((Releve_Heure_Forfait)releveHeureForfaitWindow.DataContext).Heure_Forfait)
                            {
                                toRemove.Add(item);
                            }
                            foreach (Heure_Forfait item in toRemove)
                            {
                                ((App)App.Current).mySitaffEntities.Detach(item);
                            }

                            //On détache tous les élements liés au relevé Heure_Regie
                            ObservableCollection<Heure_Regie> toRemove1 = new ObservableCollection<Heure_Regie>();
                            foreach (Heure_Regie item in ((Releve_Heure_Forfait)releveHeureForfaitWindow.DataContext).Heure_Regie)
                            {
                                toRemove1.Add(item);
                            }
                            foreach (Heure_Regie item in toRemove1)
                            {
                                ((App)App.Current).mySitaffEntities.Detach(item);
                            }

                            //On détache tous les élements liés au relevé Travail_Sur_Regie
                            ObservableCollection<Travail_Sur_Regie> toRemove2 = new ObservableCollection<Travail_Sur_Regie>();
                            foreach (Travail_Sur_Regie item in ((Releve_Heure_Forfait)releveHeureForfaitWindow.DataContext).Travail_Sur_Regie)
                            {
                                toRemove2.Add(item);
                            }
                            foreach (Travail_Sur_Regie item in toRemove2)
                            {
                                ((App)App.Current).mySitaffEntities.Detach(item);
                            }

                            //On détache tous les élements liés au relevé Releve_Heure_Forfait_Bouteille_Gaz
                            ObservableCollection<Releve_Heure_Forfait_Bouteille_Gaz> toRemove3 = new ObservableCollection<Releve_Heure_Forfait_Bouteille_Gaz>();
                            foreach (Releve_Heure_Forfait_Bouteille_Gaz item in ((Releve_Heure_Forfait)releveHeureForfaitWindow.DataContext).Releve_Heure_Forfait_Bouteille_Gaz)
                            {
                                toRemove3.Add(item);
                            }
                            foreach (Releve_Heure_Forfait_Bouteille_Gaz item in toRemove3)
                            {
                                ((App)App.Current).mySitaffEntities.Detach(item);
                            }

                            //On détache le relevé
                            ((App)App.Current).mySitaffEntities.Detach((Releve_Heure_Forfait)releveHeureForfaitWindow.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;
            ((App)App.Current)._theMainWindow.changementTexteStatusBar("Dupliquer un relevé d'heures forfait annulé.");

                        return null;
                    }
                }
                else
                {
                    MessageBox.Show("Vous ne devez sélectionner qu'un seul relevé.", "Attention", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                    return null;
                }
            }
            else
            {
                MessageBox.Show("Vous devez sélectionner un relevé.", "Attention", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                return null;
            }
        }