private void Button_Click(object sender, RoutedEventArgs e)
        {
            FrmFactureHorRegroupement frm = new FrmFactureHorRegroupement();

            frm.CallBack += frm_CallBack1;
            frm.Show();
        }
        private void btn_Actualiser_Click(object sender, RoutedEventArgs e)
        {
            dg_Paiement.SelectedItem = null;

            if (dg_Campagne.SelectedItem != null)
            {
                var                       mand = ((CsMandatementGc)dg_Campagne.SelectedItem);
                List <string>             LstfacturMandDejaPaye                 = new List <string>();
                List <string>             LstfacturMandDejaPaye_Totalement      = new List <string>();
                List <CsDetailPaiementGc> LstfacturMandDejaPaye_Paiement        = new List <CsDetailPaiementGc>();
                List <CsDetailPaiementGc> LstfacturMandDejaPaye_Paiement_Valide = new List <CsDetailPaiementGc>();
                #region Recupértion des factures deja payé pour le mandatement selectionné

                #region Commantaire
                //#region Premiere passage de boucle pour recupérer les facture qui on déja fait l'objet de paiement
                ////Pour chaque factur du mandatement
                //foreach (var FACTUREMANDATEMENT in mand.DETAILMANDATEMENTGC_)
                //{
                //    //On verifie Pour chaque facture de chaque paiement du mandatement
                //    if (mand.PAIEMENTGC_ != null && mand.PAIEMENTGC_.Count != 0)
                //    {
                //        foreach (var PAIEMENTGC in mand.PAIEMENTGC_)
                //        {
                //            foreach (var DETAILPAIEMENT in PAIEMENTGC.DETAILCAMPAGNEGC_)
                //            {
                //                //Recupértion des factures deja payé
                //                if (FACTUREMANDATEMENT.NDOC == DETAILPAIEMENT.NDOC)
                //                {
                //                    LstfacturMandDejaPaye.Add(DETAILPAIEMENT.NDOC);
                //                    if (LstfacturMandDejaPaye_Paiement.Select(c => c.NDOC).Contains(DETAILPAIEMENT.NDOC))
                //                    {
                //                        var facturMandDejaPaye_Paiement = LstfacturMandDejaPaye_Paiement.FirstOrDefault(c => c.NDOC == DETAILPAIEMENT.NDOC);
                //                        int index = LstfacturMandDejaPaye_Paiement.IndexOf(facturMandDejaPaye_Paiement);
                //                        facturMandDejaPaye_Paiement.MONTANT += DETAILPAIEMENT.MONTANT;
                //                        LstfacturMandDejaPaye_Paiement[index] = facturMandDejaPaye_Paiement;
                //                    }
                //                    else
                //                    {
                //                        LstfacturMandDejaPaye_Paiement.Add(DETAILPAIEMENT);
                //                    }

                //                }
                //            }
                //        }
                //    }
                //}

                //#endregion

                //#region Deuxième  passage de boucle pour recupérer les factures qui on été Totalement payé

                ////Pour chaque factur du mandatement
                //foreach (var FACTUREMANDATEMENT in mand.DETAILMANDATEMENTGC_)
                //{
                //    //On verifie Pour chaque facture de chaque paiement du mandatement
                //    if (mand.PAIEMENTGC_ != null && mand.PAIEMENTGC_.Count != 0)
                //    {
                //        foreach (var PAIEMENTGC in mand.PAIEMENTGC_)
                //        {
                //            foreach (var DETAILPAIEMENT in LstfacturMandDejaPaye_Paiement)
                //            {
                //                //Recupértion des factures deja payé
                //                if (FACTUREMANDATEMENT.NDOC == DETAILPAIEMENT.NDOC && FACTUREMANDATEMENT.MONTANT == DETAILPAIEMENT.MONTANT)
                //                {
                //                    LstfacturMandDejaPaye_Paiement_Valide.Add(DETAILPAIEMENT);
                //                    LstfacturMandDejaPaye_Totalement.Add(DETAILPAIEMENT.NDOC);
                //                }
                //            }
                //        }
                //    }
                //}
                #endregion

                #endregion

                #region Lettrage et validation des factures

                //Verifié qu'il exite des factures du mandatement qui non pa encore été payé

                decimal Montant_Paiement = 0;
                //Vérification qu'un montant a été saisi vu que le montant de paiment est indispensable pour fair le lettrage automatique des facture non encore payé
                if (!string.IsNullOrWhiteSpace(txt_Montant_Paiement.Text) && decimal.TryParse(txt_Montant_Paiement.Text, out Montant_Paiement))
                {
                    List <CsDetailMandatementGc> DataSource = new List <CsDetailMandatementGc>();
                    //Recupération des factures dont le paiement est non saisi
                    var detailmandatement = mand.DETAILMANDATEMENTGC_;
                    detailmandatement.ForEach(m => m.MONTANT_RESTANT = ((m.MONTANTHT != null ? m.MONTANTHT : 0) + (m.MONTANTTVA != null ? m.MONTANTTVA : 0)));
                    detailmandatement = detailmandatement.Where(m => m.MONTANT_RESTANT != 0).ToList();
                    //Lettrage automatiqunction en fonction du motant de paiement saisi pour chaque factures dont le paiement est non encore saisi en commenssant par les plus petite factures
                    foreach (var item in detailmandatement)
                    {
                        decimal?montant_facture_deja_payer = 0;
                        mand.PAIEMENTGC_.ForEach(p => montant_facture_deja_payer = montant_facture_deja_payer + p.DETAILCAMPAGNEGC_.Where(d => d.NDOC == item.NDOC).Sum(m => m.MONTANT));
                        var montant_facture_selon_option = (rbt_ht.IsChecked.Value ? (item.MONTANTHT != null ? item.MONTANTHT : 0) : (rbt_tva.IsChecked.Value ? (item.MONTANTTVA != null ? item.MONTANTTVA : 0) : (item.MONTANT_RESTANT != null ? item.MONTANT_RESTANT : 0)));

                        if (rbt_ht.IsChecked.Value == true)
                        {
                            item.MONTANT_REGLER  = item.MONTANTHT;
                            item.MONTANT_RESTANT = item.MONTANT_RESTANT - item.MONTANT_REGLER;
                        }
                        if (rbt_tva.IsChecked.Value == true)
                        {
                            item.MONTANT_REGLER  = item.MONTANTTVA;
                            item.MONTANT_RESTANT = item.MONTANT_RESTANT - item.MONTANT_REGLER;
                        }
                        if (rbt_ttc.IsChecked.Value == true)
                        {
                            item.MONTANT_REGLER  = item.MONTANT;
                            item.MONTANT_RESTANT = item.MONTANT_RESTANT - item.MONTANT_REGLER;
                        }

                        //if (montant_facture_deja_payer <= (item.MONTANTHT != null ? item.MONTANTHT : 0) + (item.MONTANTTVA != null ? item.MONTANTTVA : 0))
                        //{
                        //    if (Montant_Paiement <= 0) break;

                        //    if ((rbt_ht.IsChecked.Value ? (item.MONTANTHT != null ? item.MONTANTHT : 0) : (rbt_tva.IsChecked.Value ? (item.MONTANTTVA != null ? item.MONTANTTVA : 0) : (item.MONTANT_RESTANT != null ? item.MONTANT_RESTANT : 0))) >= Montant_Paiement)
                        //    {
                        //        item.MONTANT_REGLER = Montant_Paiement;
                        //        //Facture_Payer_Partiellement = item;
                        //        //Facture_Payer_Partiellement.MONTANT  = item.MONTANT - item.MONTANT_REGLER;
                        //    }
                        //    else
                        //        item.MONTANT_REGLER = rbt_ht.IsChecked.Value ? (item.MONTANTHT != null ? item.MONTANTHT : 0) : (rbt_tva.IsChecked.Value ? (item.MONTANTTVA != null ? item.MONTANTTVA : 0) : (item.MONTANT_RESTANT != null ? item.MONTANT_RESTANT : 0));
                        //    item.MONTANT_RESTANT = (item.MONTANT_RESTANT != null ? item.MONTANT_RESTANT : 0) - (item.MONTANT_REGLER != null ? item.MONTANT_REGLER : 0) - montant_facture_deja_payer;

                        //    Montant_Paiement = Montant_Paiement - item.MONTANT_REGLER.Value;
                        DataSource.Add(item);
                        //}
                    }
                    if (Montant_Paiement > 1)
                    {
                        FrmFactureHorRegroupement frm = new FrmFactureHorRegroupement();
                        frm.CallBack += frm_CallBack;
                        frm.Show();
                        return;
                    }

                    // Validé les facture pris en compte pour le lettrage
                    DataSource.ForEach(d => d.IsMontantValide = true);
                    //Mise à jour de la liste des paiement pris en compte
                    MiseAJourMandatement(true, DataSource);

                    //Récupération du mandatement
                    var leMandat = (CsMandatementGc)dg_Campagne.SelectedItem;


                    //Mise à jour des montant versé lié aux facture du mandatement correspondant
                    foreach (var item in leMandat.DETAILMANDATEMENTGC_)
                    {
                        if (DataSource.FirstOrDefault(d => d.NDOC == item.NDOC) != null)
                        {
                            item.MONTANT_VERSER = DataSource.FirstOrDefault(d => d.NDOC == item.NDOC).MONTANT_REGLER;
                        }
                        //item.MONTANT_VERSER = DataSource.FirstOrDefault(d => d.NDOC == item.NDOC).MONTANT;
                    }

                    //Mise à jour de la grille qui affiche les facture du mandatement en tenant compte les montant versé(c-d-a les montant lettré)
                    dg_facture.ItemsSource = null;
                    dg_facture.ItemsSource = leMandat.DETAILMANDATEMENTGC_;
                }
                else
                {
                    Message.ShowWarning("Veuillez saisir le montant du paiement avec un bon format", "Information");
                }
            }
            else
            {
                dg_facture.ItemsSource = new List <CsDetailMandatementGc>();
            }
            #endregion
        }
        private void btn_Actualiser_Click(object sender, RoutedEventArgs e)
        {
            dg_Paiement.SelectedItem = null;

            if (dg_Campagne.SelectedItem != null)
            {
                var                       mand = ((CsMandatementGc)dg_Campagne.SelectedItem);
                List <string>             LstfacturMandDejaPaye                 = new List <string>();
                List <string>             LstfacturMandDejaPaye_Totalement      = new List <string>();
                List <CsDetailPaiementGc> LstfacturMandDejaPaye_Paiement        = new List <CsDetailPaiementGc>();
                List <CsDetailPaiementGc> LstfacturMandDejaPaye_Paiement_Valide = new List <CsDetailPaiementGc>();
                #region Recupértion des factures deja payé pour le mandatement selectionné

                //#region Premiere passage de boucle pour recupérer les facture qui on déja fait l'objet de paiement
                ////Pour chaque factur du mandatement
                //foreach (var FACTUREMANDATEMENT in mand.DETAILMANDATEMENTGC_)
                //{
                //    //On verifie Pour chaque facture de chaque paiement du mandatement
                //    if (mand.PAIEMENTGC_ != null && mand.PAIEMENTGC_.Count != 0)
                //    {
                //        foreach (var PAIEMENTGC in mand.PAIEMENTGC_)
                //        {
                //            foreach (var DETAILPAIEMENT in PAIEMENTGC.DETAILCAMPAGNEGC_)
                //            {
                //                //Recupértion des factures deja payé
                //                if (FACTUREMANDATEMENT.NDOC == DETAILPAIEMENT.NDOC)
                //                {
                //                    LstfacturMandDejaPaye.Add(DETAILPAIEMENT.NDOC);
                //                    if (LstfacturMandDejaPaye_Paiement.Select(c => c.NDOC).Contains(DETAILPAIEMENT.NDOC))
                //                    {
                //                        var facturMandDejaPaye_Paiement = LstfacturMandDejaPaye_Paiement.FirstOrDefault(c => c.NDOC == DETAILPAIEMENT.NDOC);
                //                        int index = LstfacturMandDejaPaye_Paiement.IndexOf(facturMandDejaPaye_Paiement);
                //                        facturMandDejaPaye_Paiement.MONTANT += DETAILPAIEMENT.MONTANT;
                //                        LstfacturMandDejaPaye_Paiement[index] = facturMandDejaPaye_Paiement;
                //                    }
                //                    else
                //                    {
                //                        LstfacturMandDejaPaye_Paiement.Add(DETAILPAIEMENT);
                //                    }

                //                }
                //            }
                //        }
                //    }
                //}

                //#endregion

                //#region Deuxième  passage de boucle pour recupérer les factures qui on été Totalement payé

                ////Pour chaque factur du mandatement
                //foreach (var FACTUREMANDATEMENT in mand.DETAILMANDATEMENTGC_)
                //{
                //    //On verifie Pour chaque facture de chaque paiement du mandatement
                //    if (mand.PAIEMENTGC_ != null && mand.PAIEMENTGC_.Count != 0)
                //    {
                //        foreach (var PAIEMENTGC in mand.PAIEMENTGC_)
                //        {
                //            foreach (var DETAILPAIEMENT in LstfacturMandDejaPaye_Paiement)
                //            {
                //                //Recupértion des factures deja payé
                //                if (FACTUREMANDATEMENT.NDOC == DETAILPAIEMENT.NDOC && FACTUREMANDATEMENT.MONTANT == DETAILPAIEMENT.MONTANT)
                //                {
                //                    LstfacturMandDejaPaye_Paiement_Valide.Add(DETAILPAIEMENT);
                //                    LstfacturMandDejaPaye_Totalement.Add(DETAILPAIEMENT.NDOC);
                //                }
                //            }
                //        }
                //    }
                //}
                //#endregion
                #endregion

                //#region Lettrage et validation des factures

                ////Verifié qu'il exite des factures du mandatement qui non pa encore été payé
                //if (mand.DETAILMANDATEMENTGC_.Where(m => !LstfacturMandDejaPaye_Totalement.Contains(m.NDOC)) != null && mand.DETAILMANDATEMENTGC_.Where(m => !LstfacturMandDejaPaye_Totalement.Contains(m.NDOC)).Count() > 0)
                //{
                //    decimal Montant_Paiement = 0;
                //    //Vérification qu'un montant a été saisi vu que le montant de paiment est indispensable pour fair le lettrage automatique des facture non encore payé
                //    if (!string.IsNullOrWhiteSpace(txt_Montant_Paiement.Text) && decimal.TryParse(txt_Montant_Paiement.Text, out Montant_Paiement))
                //    {
                //        List<CsDetailMandatementGc> DataSource = new List<CsDetailMandatementGc>();
                //        //Recupération des factures dont le paiement est non saisi
                //        var detailmandatement = mand.DETAILMANDATEMENTGC_.Where(m => !LstfacturMandDejaPaye_Totalement.Contains(m.NDOC)).ToList();
                //        decimal Montant = 0;
                //        //Lettrage automatiqunction en fonction du motant de paiement saisi pour chaque factures dont le paiement est non encore saisi en commenssant par les plus petite factures
                //        //foreach (var item in detailmandatement.OrderBy(d => d.MONTANT))
                //        foreach (var item in detailmandatement)
                //        {
                //            //On increment le montant de la facture
                //            Montant += item.MONTANT.Value;
                //            //Si le montant devient superieur au montant saisi
                //            if (Montant >= Montant_Paiement)
                //            {
                //                //Si on rentre de cette boucle cela veut dire que le montant à payé est ateint ou dépassé
                //                //on verifie si le montatnt des factures lettré est égale au montant effectivement payé
                //                if (Montant == Montant_Paiement)
                //                {
                //                    //Recupération des factures pris en compte pour le lettrage
                //                    DataSource.Add(item);

                //                    //On vide la variable "Facture_Payer_Partiellement" pour éviter la mise à jour de la facture en question à la validation
                //                    Facture_Payer_Partiellement = null;
                //                    break;
                //                }
                //                //sinon cela voudrai dir  que le montatnt des factures lettré est devenu supérieur au montant effectivement payé:il faut donc gérer un paiement partiel sur la derniere facture
                //                else
                //                {
                //                    #region gestion udun paiement partiel sur la derniere facture à lettrer

                //                    //Calcule du montant qu'il devrai resté à payé pour la fcature qui fait l'objet de paiement partiel
                //                    Montant_Facture_RestAPayer = Montant - Montant_Paiement;

                //                    //Recuperation du motant de la facture concerné
                //                    var MontantFacture = item.MONTANT;

                //                    //Récupération de la facture partiellment réglé
                //                    var obj = item;
                //                    Facture_Payer_Partiellement = obj;
                //                    //Mise à jour du montant restant à payer sur la facture
                //                    //Facture_Payer_Partiellement.MONTANT = Montant_Facture_RestAPayer;
                //                    //Mise à jour du montant partiel à prendre en compte
                //                    var Montant_Partiel_Facture = MontantFacture - Montant_Facture_RestAPayer;

                //                    //Mise du montatnt partiel paiyé
                //                    item.MONTANT = Montant_Partiel_Facture;

                //                    //Recupération des factures pris en compte pour le lettrage
                //                    DataSource.Add(item);
                //                    break;

                //                    #endregion
                //                }
                //            }
                //            DataSource.Add(item);
                //        }
                //        // Validé les facture pris en compte pour le lettrage
                //        DataSource.ForEach(d => d.IsMontantValide = true);
                //        //Mise à jour de la liste des paiement pris en compte
                //        MiseAJourMandatement(true, DataSource);

                //        //Récupération du mandatement
                //        var leMandat = (CsMandatementGc)dg_Campagne.SelectedItem;


                //        //Mise à jour des montant versé lié aux facture du mandatement correspondant
                //        foreach (var item in leMandat.DETAILMANDATEMENTGC_)
                //        {
                //            if (DataSource.FirstOrDefault(d => d.NDOC == item.NDOC) != null)
                //                item.MONTANT_VERSER = DataSource.FirstOrDefault(d => d.NDOC == item.NDOC).MONTANT;
                //        }

                //        //Mise à jour de la grille qui affiche les facture du mandatement en tenant compte les montant versé(c-d-a les montant lettré)
                //        dg_facture.ItemsSource = leMandat.DETAILMANDATEMENTGC_;
                //    }
                //    else
                //    {
                //        Message.ShowWarning("Veuillez saisir le montant du paiement avec un bon format", "Information");
                //    }
                //}
                //else
                //{
                //    dg_facture.ItemsSource = new List<CsDetailMandatementGc>();
                //}
                //#endregion

                #region Lettrage et validation des factures

                //Verifié qu'il exite des factures du mandatement qui non pa encore été payé
                //if (mand.DETAILMANDATEMENTGC_.Where(m => !LstfacturMandDejaPaye_Totalement.Contains(m.NDOC)) != null && mand.DETAILMANDATEMENTGC_.Where(m => !LstfacturMandDejaPaye_Totalement.Contains(m.NDOC)).Count() > 0)

                decimal Montant_Paiement = 0;
                //Vérification qu'un montant a été saisi vu que le montant de paiment est indispensable pour fair le lettrage automatique des facture non encore payé
                if (!string.IsNullOrWhiteSpace(txt_Montant_Paiement.Text) && decimal.TryParse(txt_Montant_Paiement.Text, out Montant_Paiement))
                {
                    List <CsDetailMandatementGc> DataSource = new List <CsDetailMandatementGc>();
                    //Recupération des factures dont le paiement est non saisi
                    var detailmandatement = mand.DETAILMANDATEMENTGC_.Where(m => m.MONTANT_RESTANT != 0).ToList();
                    //Lettrage automatiqunction en fonction du motant de paiement saisi pour chaque factures dont le paiement est non encore saisi en commenssant par les plus petite factures
                    //foreach (var item in detailmandatement.OrderBy(d => d.MONTANT))
                    foreach (var item in detailmandatement)
                    {
                        if (Montant_Paiement <= 0)
                        {
                            break;
                        }

                        if (item.MONTANT_RESTANT >= Montant_Paiement)
                        {
                            item.MONTANT_REGLER = Montant_Paiement;
                            //Facture_Payer_Partiellement = item;
                            //Facture_Payer_Partiellement.MONTANT  = item.MONTANT - item.MONTANT_REGLER;
                        }
                        else
                        {
                            item.MONTANT_REGLER = item.MONTANT_RESTANT;
                        }
                        item.MONTANT_RESTANT = item.MONTANT_RESTANT - item.MONTANT_REGLER;

                        Montant_Paiement = Montant_Paiement - item.MONTANT_REGLER.Value;
                        DataSource.Add(item);
                    }
                    if (Montant_Paiement > 0)
                    {
                        FrmFactureHorRegroupement frm = new FrmFactureHorRegroupement();
                        frm.CallBack += frm_CallBack;
                        frm.Show();
                        return;
                    }

                    // Validé les facture pris en compte pour le lettrage
                    DataSource.ForEach(d => d.IsMontantValide = true);
                    //Mise à jour de la liste des paiement pris en compte
                    MiseAJourMandatement(true, DataSource);

                    //Récupération du mandatement
                    var leMandat = (CsMandatementGc)dg_Campagne.SelectedItem;


                    //Mise à jour des montant versé lié aux facture du mandatement correspondant
                    foreach (var item in leMandat.DETAILMANDATEMENTGC_)
                    {
                        if (DataSource.FirstOrDefault(d => d.NDOC == item.NDOC) != null)
                        {
                            item.MONTANT_VERSER = DataSource.FirstOrDefault(d => d.NDOC == item.NDOC).MONTANT;
                        }
                    }

                    //Mise à jour de la grille qui affiche les facture du mandatement en tenant compte les montant versé(c-d-a les montant lettré)
                    dg_facture.ItemsSource = null;
                    dg_facture.ItemsSource = leMandat.DETAILMANDATEMENTGC_;
                }
                else
                {
                    Message.ShowWarning("Veuillez saisir le montant du paiement avec un bon format", "Information");
                }
            }
            else
            {
                dg_facture.ItemsSource = new List <CsDetailMandatementGc>();
            }
            #endregion
        }