private void MiseAJourMandatement(bool Isvalide)
        {
            CsMandatementGc CampAnSelectioner = new CsMandatementGc();

            CampAnSelectioner = (CsMandatementGc)dg_Campagne.SelectedItem;

            var datasource = (List <CsDetailMandatementGc>)dg_facture.ItemsSource;

            UpdateDataSource(Isvalide, datasource);

            var MandatementGc = ListMandatementGc.FirstOrDefault(m => m.FK_IDMANDATEMANT == CampAnSelectioner.PK_ID);

            if (MandatementGc == null)
            {
                var Mandatement = new CsPaiementGc {
                    FK_IDMANDATEMANT = CampAnSelectioner.PK_ID, MONTANT = datasource.Where(f => f.IsMontantValide == true).Sum(dm => dm.MONTANT), DATECREATION = DateTime.Now, DATEMODIFICATION = DateTime.Now, USERCREATION = UserConnecte.matricule, USERMODIFICATION = UserConnecte.matricule, NUMEROMANDATEMENT = txt_Numdeataire.Text
                };
                List <CsDetailPaiementGc> DETAILMANDATEMENTGC_ = new List <CsDetailPaiementGc>();
                foreach (var item in datasource)
                {
                    if (item.IsMontantValide == true)
                    {
                        CsDetailPaiementGc DetailMandatement = new CsDetailPaiementGc();

                        DetailMandatement.CENTRE                  = item.CENTRE;
                        DetailMandatement.CLIENT                  = item.CLIENT;
                        DetailMandatement.ORDRE                   = item.ORDRE;
                        DetailMandatement.DATECREATION            = DateTime.Now;
                        DetailMandatement.DATEMODIFICATION        = DateTime.Now;
                        DetailMandatement.FK_IDPAIEMENTCAMPAGNEGC = Mandatement.PK_ID;
                        DetailMandatement.MONTANT                 = item.MONTANT;
                        //DetailMandatement.MONTANT_REGLER = DetailMandatement.MONTANT;
                        //DetailMandatement.MONTANT_VERSER = DetailMandatement.MONTANT;
                        //DetailMandatement.MONTANT_RESTANT = 0;
                        DetailMandatement.NDOC             = item.NDOC;
                        DetailMandatement.PERIODE          = item.PERIODE;
                        DetailMandatement.STATUS           = item.STATUS;
                        DetailMandatement.USERCREATION     = UserConnecte.matricule;
                        DetailMandatement.USERMODIFICATION = UserConnecte.matricule;

                        DETAILMANDATEMENTGC_.Add(DetailMandatement);
                    }
                }
                Mandatement.DETAILCAMPAGNEGC_ = DETAILMANDATEMENTGC_;
                ListMandatementGc.Add(Mandatement);
            }
            else
            {
                MandatementGc.MONTANT           = datasource.Where(f => f.IsMontantValide == true).Sum(dm => dm.MONTANT);
                MandatementGc.NUMEROMANDATEMENT = txt_Numdeataire.Text;
                List <CsDetailPaiementGc> DETAILMANDATEMENTGC_ = new List <CsDetailPaiementGc>();
                foreach (var item in datasource)
                {
                    if (item.IsMontantValide == true)
                    {
                        CsDetailPaiementGc DetailMandatement = new CsDetailPaiementGc();

                        DetailMandatement.CENTRE                  = item.CENTRE;
                        DetailMandatement.CLIENT                  = item.CLIENT;
                        DetailMandatement.ORDRE                   = item.ORDRE;
                        DetailMandatement.DATECREATION            = DateTime.Now;
                        DetailMandatement.DATEMODIFICATION        = DateTime.Now;
                        DetailMandatement.FK_IDPAIEMENTCAMPAGNEGC = MandatementGc.PK_ID;
                        DetailMandatement.MONTANT                 = item.MONTANT;
                        //DetailMandatement.MONTANT_REGLER = DetailMandatement.MONTANT;
                        //DetailMandatement.MONTANT_VERSER = DetailMandatement.MONTANT;
                        //DetailMandatement.MONTANT_RESTANT = 0;
                        DetailMandatement.NDOC             = item.NDOC;
                        DetailMandatement.PERIODE          = item.PERIODE;
                        DetailMandatement.STATUS           = item.STATUS;
                        DetailMandatement.USERCREATION     = UserConnecte.matricule;
                        DetailMandatement.USERMODIFICATION = UserConnecte.matricule;

                        DETAILMANDATEMENTGC_.Add(DetailMandatement);
                    }
                }
                MandatementGc.DETAILCAMPAGNEGC_ = DETAILMANDATEMENTGC_;

                var mand  = ListMandatementGc.FirstOrDefault(m => m.PK_ID == MandatementGc.PK_ID);
                var index = ListMandatementGc.IndexOf(mand);
                ListMandatementGc[index] = MandatementGc;
            }

            txt_Montant_Mandatement.Text = datasource.Where(f => f.IsMontantValide == true).Sum(dm => dm.MONTANT).ToString();
        }
        //private void MiseAjourCompt(decimal? Monant, int Id)
        //{
        //    Galatee.Silverlight.ServiceRecouvrement.RecouvrementServiceClient service = new Galatee.Silverlight.ServiceRecouvrement.RecouvrementServiceClient(Utility.ProtocoleFacturation(), Utility.EndPoint("Recouvrement"));
        //    service.MiseAjourComptCompleted += (s, args) =>
        //    {
        //        if (args != null && args.Cancelled)
        //            return;
        //        if (args.Result == null)
        //            return;
        //        Message.Show("Mise à jour effectuée avec succès", "Resultat");
        //        Dictionary<string, string> param = new Dictionary<string, string>();

        //        Utility.ActionDirectOrientation<ServicePrintings.CsLclient, ServiceRecouvrement.CsLclient>(args.Result, param, SessionObject.CheminImpression, "MiseAJourGrandCompte", "Recouvrement", true);

        //        List<int> id = new List<int>();
        //        id.Add(Id);
        //        EnvoyerDemandeEtapeSuivante(id);
        //        return;
        //    };
        //    service.MiseAjourComptAsync(Monant, Id);
        //}

        #endregion

        #region Methodes

        private void MiseAJourMandatement(bool Isvalide, List <CsDetailMandatementGc> ItemsSource = null)
        {
            //Recuperation du mandatement selectionné
            CsMandatementGc CampAnSelectioner = new CsMandatementGc();

            CampAnSelectioner = (CsMandatementGc)dg_Campagne.SelectedItem;

            //Recupération des factures pris en compte dans le lettrage
            var datasource = ItemsSource == null ? (List <CsDetailMandatementGc>)dg_facture.ItemsSource : ItemsSource;

            //Mise à jour
            UpdateDataSource(Isvalide, datasource);


            //Récupération du mandatement
            var MandatementGc = ListMandatementGc.FirstOrDefault(m => m.FK_IDMANDATEMANT == CampAnSelectioner.PK_ID);

            if (MandatementGc == null)
            {
                //Création d'une instance de d'objet de paiement
                var Mandatement = new CsPaiementGc {
                    FK_IDMANDATEMANT  = CampAnSelectioner.PK_ID,
                    NUMEROMANDATEMENT = CampAnSelectioner.NUMEROMANDATEMENT,
                    MONTANT           = datasource.Where(f => f.MONTANT_REGLER != 0).Sum(dm => dm.MONTANT_REGLER),
                    DATECREATION      = DateTime.Now, DATEMODIFICATION = DateTime.Now,
                    USERCREATION      = UserConnecte.matricule,
                    USERMODIFICATION  = UserConnecte.matricule,
                    NumAvisCredit     = txt_Avis_Credit.Text,
                    TYPE_PAIEMENT     = rbt_ht.IsChecked == true?"0":rbt_ttc.IsChecked == true?"1":(rbt_ttc.IsChecked == true?"2":"0"),
                    EST_MIS_A_JOUR    = false
                };

                //Création des détail de paiement
                List <CsDetailPaiementGc> DETAILMANDATEMENTGC_ = new List <CsDetailPaiementGc>();
                foreach (var item in datasource)
                {
                    if (item.IsMontantValide == true)
                    {
                        CsDetailPaiementGc DetailMandatement = new CsDetailPaiementGc();

                        DetailMandatement.CENTRE                  = item.CENTRE;
                        DetailMandatement.CLIENT                  = item.CLIENT;
                        DetailMandatement.ORDRE                   = item.ORDRE;
                        DetailMandatement.DATECREATION            = DateTime.Now;
                        DetailMandatement.DATEMODIFICATION        = DateTime.Now;
                        DetailMandatement.FK_IDPAIEMENTCAMPAGNEGC = Mandatement.PK_ID;
                        DetailMandatement.MONTANT                 = item.MONTANT_REGLER;
                        DetailMandatement.NDOC             = item.NDOC;
                        DetailMandatement.PERIODE          = item.PERIODE;
                        DetailMandatement.STATUS           = item.STATUS;
                        DetailMandatement.USERCREATION     = UserConnecte.matricule;
                        DetailMandatement.USERMODIFICATION = UserConnecte.matricule;

                        DETAILMANDATEMENTGC_.Add(DetailMandatement);
                    }
                }
                //Mise à jour des detail de paiement dans l'objet de paiement
                Mandatement.DETAILCAMPAGNEGC_ = DETAILMANDATEMENTGC_;
                //Mise à jour de la liste des paiement pris en compte
                ListMandatementGc.Add(Mandatement);
            }
            else
            {
                MandatementGc.MONTANT           = datasource.Where(f => f.IsMontantValide == true).Sum(dm => dm.MONTANT_REGLER);
                MandatementGc.NUMEROMANDATEMENT = txt_Numdeataire.Text;
                List <CsDetailPaiementGc> DETAILMANDATEMENTGC_ = new List <CsDetailPaiementGc>();
                foreach (var item in datasource)
                {
                    if (item.IsMontantValide == true)
                    {
                        CsDetailPaiementGc DetailMandatement = new CsDetailPaiementGc();

                        DetailMandatement.CENTRE                  = item.CENTRE;
                        DetailMandatement.CLIENT                  = item.CLIENT;
                        DetailMandatement.ORDRE                   = item.ORDRE;
                        DetailMandatement.DATECREATION            = DateTime.Now;
                        DetailMandatement.DATEMODIFICATION        = DateTime.Now;
                        DetailMandatement.FK_IDPAIEMENTCAMPAGNEGC = MandatementGc.PK_ID;
                        DetailMandatement.MONTANT                 = item.MONTANT_REGLER;
                        //DetailMandatement.MONTANT_REGLER = DetailMandatement.MONTANT;
                        //DetailMandatement.MONTANT_VERSER = DetailMandatement.MONTANT;
                        //DetailMandatement.MONTANT_RESTANT = 0;
                        DetailMandatement.NDOC             = item.NDOC;
                        DetailMandatement.PERIODE          = item.PERIODE;
                        DetailMandatement.STATUS           = item.STATUS;
                        DetailMandatement.USERCREATION     = UserConnecte.matricule;
                        DetailMandatement.USERMODIFICATION = UserConnecte.matricule;

                        DETAILMANDATEMENTGC_.Add(DetailMandatement);
                    }
                }
                MandatementGc.DETAILCAMPAGNEGC_ = DETAILMANDATEMENTGC_;

                var mand  = ListMandatementGc.FirstOrDefault(m => m.PK_ID == MandatementGc.PK_ID);
                var index = ListMandatementGc.IndexOf(mand);
                ListMandatementGc[index] = MandatementGc;
            }
            var dg_factureItemsSource = ((List <CsDetailMandatementGc>)dg_facture.ItemsSource).Where(f => !datasource.Select(c => c.NDOC).Contains(f.NDOC));
            var Montant_Regle         = dg_factureItemsSource.Where(f => f.MONTANT_REGLER != 0).Sum(dm => dm.MONTANT_REGLER);
            var Montant_Restant       = dg_factureItemsSource.Where(f => f.MONTANT_RESTANT != 0).Sum(dm => dm.MONTANT_RESTANT);
            var Montant_TVA           = dg_factureItemsSource.Where(f => f.MONTANTTVA != 0).Sum(dm => dm.MONTANTTVA);
            var Montant_TTC           = dg_factureItemsSource.Where(f => f.MONTANT != 0).Sum(dm => dm.MONTANT);

            txt_Montant_Regle.Text   = (datasource.Where(f => f.MONTANT_REGLER != 0).Sum(dm => dm.MONTANT_REGLER) + Montant_Regle).ToString();
            txt_Montant_Restant.Text = (datasource.Where(f => f.MONTANT_RESTANT != 0).Sum(dm => dm.MONTANT_RESTANT) + Montant_Restant).ToString();
            txt_Montant_TVA.Text     = (datasource.Where(f => f.MONTANTTVA != 0).Sum(dm => dm.MONTANTTVA) + Montant_TVA).ToString();
            txt_Montant_HT.Text      = (datasource.Where(f => f.MONTANT != 0).Sum(dm => dm.MONTANT) + Montant_TTC).ToString();
        }
        private void dg_facture_CellEditEnded(object sender, DataGridCellEditEndedEventArgs e)
        {
            var DetailCampagne = (CsDetailCampagneGc)dg_facture.SelectedItem;

            if (DetailCampagne != null)
            {
                if (DetailCampagne.MONTANT_VERSER > DetailCampagne.MONTANT_RESTANT)
                {
                    Message.ShowWarning("Le montant du mandatement doit être inférieur ou egale au montant restant à payer", "Avertissement");

                    var DataSource = (List <CsDetailCampagneGc>)dg_facture.ItemsSource;
                    int index      = DataSource.IndexOf(DetailCampagne);
                    DetailCampagne.MONTANT_VERSER = 0;
                    DataSource[index]             = DetailCampagne;

                    dg_facture.ItemsSource = DataSource.OrderBy(d => d.NOM).ToList();
                }
                else
                {
                    CsMandatementGc CampAnSelectioner = new CsMandatementGc();
                    CampAnSelectioner = (CsMandatementGc)dg_Campagne.SelectedItem;

                    var datasource = (List <CsDetailMandatementGc>)dg_facture.ItemsSource;
                    txt_Montant_Mandatement.Text = datasource.Sum(dm => dm.MONTANT_VERSER).ToString();

                    var MandatementGc = ListMandatementGc.FirstOrDefault(m => m.FK_IDMANDATEMANT == CampAnSelectioner.PK_ID);
                    if (MandatementGc == null)
                    {
                        var Mandatement = new CsPaiementGc {
                            FK_IDMANDATEMANT = CampAnSelectioner.PK_ID, MONTANT = datasource.Sum(dm => dm.MONTANT_VERSER), DATECREATION = DateTime.Now, DATEMODIFICATION = DateTime.Now, USERCREATION = UserConnecte.matricule, USERMODIFICATION = UserConnecte.matricule, NUMEROMANDATEMENT = txt_Numdeataire.Text
                        };
                        List <CsDetailPaiementGc> DETAILMANDATEMENTGC_ = new List <CsDetailPaiementGc>();
                        foreach (var item in datasource)
                        {
                            if (item.MONTANT_VERSER != null && item.MONTANT_VERSER > 0)
                            {
                                CsDetailPaiementGc DetailMandatement = new CsDetailPaiementGc();

                                DetailMandatement.CENTRE                  = item.CENTRE;
                                DetailMandatement.CLIENT                  = item.CLIENT;
                                DetailMandatement.ORDRE                   = item.ORDRE;
                                DetailMandatement.DATECREATION            = DateTime.Now;
                                DetailMandatement.DATEMODIFICATION        = DateTime.Now;
                                DetailMandatement.FK_IDPAIEMENTCAMPAGNEGC = Mandatement.PK_ID;
                                DetailMandatement.MONTANT                 = item.MONTANT_VERSER;
                                DetailMandatement.NDOC             = item.NDOC;
                                DetailMandatement.PERIODE          = item.PERIODE;
                                DetailMandatement.STATUS           = item.STATUS;
                                DetailMandatement.USERCREATION     = UserConnecte.matricule;
                                DetailMandatement.USERMODIFICATION = UserConnecte.matricule;

                                DETAILMANDATEMENTGC_.Add(DetailMandatement);
                            }
                        }
                        Mandatement.DETAILCAMPAGNEGC_ = DETAILMANDATEMENTGC_;
                        ListMandatementGc.Add(Mandatement);
                    }
                    else
                    {
                        MandatementGc.MONTANT           = datasource.Sum(dm => dm.MONTANT_VERSER);
                        MandatementGc.NUMEROMANDATEMENT = txt_Numdeataire.Text;
                        List <CsDetailPaiementGc> DETAILMANDATEMENTGC_ = new List <CsDetailPaiementGc>();
                        foreach (var item in datasource)
                        {
                            if (item.MONTANT_VERSER != null && item.MONTANT_VERSER > 0)
                            {
                                CsDetailPaiementGc DetailMandatement = new CsDetailPaiementGc();

                                DetailMandatement.CENTRE                  = item.CENTRE;
                                DetailMandatement.CLIENT                  = item.CLIENT;
                                DetailMandatement.ORDRE                   = item.ORDRE;
                                DetailMandatement.DATECREATION            = DateTime.Now;
                                DetailMandatement.DATEMODIFICATION        = DateTime.Now;
                                DetailMandatement.FK_IDPAIEMENTCAMPAGNEGC = MandatementGc.PK_ID;
                                DetailMandatement.MONTANT                 = item.MONTANT_VERSER;
                                DetailMandatement.NDOC             = item.NDOC;
                                DetailMandatement.PERIODE          = item.PERIODE;
                                DetailMandatement.STATUS           = item.STATUS;
                                DetailMandatement.USERCREATION     = UserConnecte.matricule;
                                DetailMandatement.USERMODIFICATION = UserConnecte.matricule;

                                DETAILMANDATEMENTGC_.Add(DetailMandatement);
                            }
                        }
                        MandatementGc.DETAILCAMPAGNEGC_ = DETAILMANDATEMENTGC_;

                        var mand  = ListMandatementGc.FirstOrDefault(m => m.PK_ID == MandatementGc.PK_ID);
                        var index = ListMandatementGc.IndexOf(mand);
                        ListMandatementGc[index] = MandatementGc;
                    }
                }
            }
        }