private List <LignePrestation> chargerGrid()
        {
            AppartenirBE            app         = new AppartenirBE();
            MontantTrancheBE        mt          = new MontantTrancheBE();
            List <LignePrestation>  liste       = new List <LignePrestation>();
            List <MontantTrancheBE> alltranches = new List <MontantTrancheBE>();

            totalAPayer = 0;
            totalVerse  = 0;
            totalRemise = 0;
            CultureInfo elGR = CultureInfo.CreateSpecificCulture("el-GR");

            alltranches = prestationBL.listerSuivantCritereMontanttranches("codecateleve = " + "'" + categorie + "' and annee = " + "'" + annee + "'");
            foreach (MontantTrancheBE m in alltranches)
            {
                totalAPayer += m.montant;
            }
            totalAPayer += (double)fraisInscription;

            payers = prestationBL.listerSuivantCriterePayer("matricule = " + "'" + matricule + "' and annee =" + "'" + annee + "'");
            foreach (PayerBE payer in payers)
            {
                //if (payer.codePrestation == INSCRIPTION)
                //{
                //    liste.Add(new LignePrestation(payer.codePrestation, payer.codeTranche, (decimal)payer.montant, payer.observation,
                //        fraisInscription - Convert.ToDecimal(payer.montant) - payer.remise, payer.remise, payer.datePaiement.ToShortDateString()));
                //}
                //else
                {
                    app           = new AppartenirBE();
                    app.matricule = payer.matricule;
                    app.annee     = payer.annee;
                    app           = prestationBL.rechercherCategorie(app);

                    mt                = new MontantTrancheBE();
                    mt.annee          = payer.annee;
                    mt.codeCatEleve   = app.codeCatEleve;
                    mt.codePrestation = payer.codePrestation;
                    mt.codeTranche    = payer.codeTranche;
                    mt                = prestationBL.rechercherMontantTranche(mt);

                    if (payer.observation == TRANCHE_INCOMPLET)
                    {
                        liste.Add(new LignePrestation(payer.codePrestation, payer.codeTranche, (decimal)payer.montant, payer.observation, (decimal)(mt.montant - payer.montant - Convert.ToDouble(payer.remise)),
                                                      payer.remise, payer.datePaiement.ToShortDateString()));
                    }
                    else
                    {
                        liste.Add(new LignePrestation(payer.codePrestation, payer.codeTranche, (decimal)payer.montant, payer.observation, 0,
                                                      payer.remise, payer.datePaiement.ToShortDateString()));
                    }
                }
                totalRemise += Convert.ToDouble(payer.remise);
                totalVerse  += payer.montant;
                totalAPayer -= Convert.ToDouble(payer.remise);
            }

            resteAPayer = totalAPayer - totalVerse;

            txtTotal.Text       = totalAPayer.ToString("0,0", elGR);
            txtTotalVerse.Text  = totalVerse.ToString("0,0", elGR);
            txtResteAPayer.Text = (totalAPayer - totalVerse).ToString("0,0", elGR);
            txtRemise.Text      = totalRemise.ToString("0,0", elGR);

            //txtReste.Text = "0";

            return(liste);
        }
        private void cmdValider_new_Click(object sender, RoutedEventArgs e)
        {
            if (cmbPrestation.SelectedValue == null || cmbPrestation.Text == "")
            {
                if (checkRemise.IsChecked == true)
                {
                    switch (cmbDispense.Text)
                    {
                    case REMISE:
                        MessageBox.Show("La réduction s'effectue sur une prestation, choisissez d'abord la prestation", "school brain:Alerte", MessageBoxButton.OK, MessageBoxImage.Information);
                        break;

                    case BOURSE:
                        gestionDispense();
                        break;
                    }
                }
            }
            else
            {
                if (txtMontant.Text != "")
                {
                    string codeprestation            = cmbPrestation.SelectedValue.ToString();
                    double remise                    = 0;
                    List <MontantTrancheBE> tranches = new List <MontantTrancheBE>();
                    montant        = Convert.ToDouble(txtMontant.Text);
                    matricule      = txtMatricule.Text.ToString();
                    codeprestation = cmbPrestation.SelectedValue.ToString();
                    login          = Ecole.UI.ConnexionUI.utilisateur.login;
                    tranches       = prestationBL.listerSuivantCritereMontanttranches("codeprestation = " + "'" + codeprestation + "' and codecateleve = " + "'" + categorie + "' and annee = " + "'" + annee + "'");
                    PayerBE   payerBE;
                    double    frais;
                    CreerEtat etat = null;
                    TrancheBE trancheBE;
                    switch (codeprestation)
                    {
                        #region gestion de cas d'un depot
                    case "Depot":
                        if (checkRemise.IsChecked == true)
                        {
                            if (cmbDispense.Text == BOURSE)
                            {
                                gestionDispense();
                            }
                        }

                        // on recherche dans la bd à la fois les tranches non complètement payées et les tranches qui n'ont pas encore commencé à être payées
                        bool             b          = true;
                        List <PayerBE>   listes     = prestationBL.listerTrancheNonPayees(categorie, matricule, annee);
                        MontantTrancheBE t          = new MontantTrancheBE();
                        string           numerorecu = "";

                        if (listes != null)
                        {
                            PayerBE p = new PayerBE();

                            foreach (PayerBE pa in listes)
                            {
                                if (b == true)
                                {
                                    t.codeCatEleve   = categorie;
                                    t.codePrestation = pa.codePrestation;
                                    t.codeTranche    = pa.codeTranche;
                                    t.annee          = pa.annee;
                                    t = prestationBL.rechercherMontantTranche(t);
                                    if (montant >= (t.montant - pa.montant - Convert.ToDouble(pa.remise)))
                                    {
                                        payerBE = new PayerBE(pa.matricule, login, pa.codePrestation, pa.codeTranche, t.montant - Convert.ToDouble(pa.remise),
                                                              dpiDateOp.SelectedDate.Value, annee, TRANCHE_COMPLET, pa.remise);
                                        p = new PayerBE(pa.matricule, login, pa.codePrestation, pa.codeTranche, t.montant - pa.montant - Convert.ToDouble(pa.remise),
                                                        dpiDateOp.SelectedDate.Value, annee, TRANCHE_COMPLET, pa.remise);
                                        if (prestationBL.modifierPayer(payerBE, p))
                                        {
                                            payers.Add(payerBE);
                                            numerorecu = prestationBL.rechercherNumeroPayer(payerBE);
                                        }
                                        montant -= (t.montant - pa.montant - Convert.ToDouble(pa.remise));
                                    }
                                    else
                                    {
                                        if (montant > 0)
                                        {
                                            payerBE = new PayerBE(pa.matricule, login, pa.codePrestation, pa.codeTranche, (pa.montant + montant), dpiDateOp.SelectedDate.Value, annee, TRANCHE_INCOMPLET, pa.remise);
                                            p       = new PayerBE(pa.matricule, login, pa.codePrestation, pa.codeTranche, montant, dpiDateOp.SelectedDate.Value, annee, TRANCHE_INCOMPLET, pa.remise);

                                            if (prestationBL.modifierPayer(payerBE, p))
                                            {
                                                payers.Add(payerBE);
                                                if (numerorecu == "")
                                                {
                                                    numerorecu = prestationBL.rechercherNumeroPayer(payerBE);
                                                }
                                            }
                                        }
                                        montant = 0;
                                        b       = false;
                                    }
                                }
                            }

                            //enregistrement du versement
                            //prestationBL.enregistrer_versement(matricule, "Opération de dépot d'argent pour les frais de : " + cmbPrestation.Text, (Convert.ToDouble(txtMontant.Text) - montant ),
                            //    dpiDateOp.SelectedDate.Value, annee);
                        }
                        lignes = chargerGrid();
                        etat   = new CreerEtat("Paiement_prestation" + matricule + DateTime.Today.ToShortDateString(), "Reçu de versement N° " + numerorecu + "\nDate " + dpiDateOp.SelectedDate.Value);
                        etat.factureDepot(Convert.ToDouble(txtMontant.Text), montant, totalAPayer, totalVerse, resteAPayer, eleve, cmbClasse.Text);
                        initialiser();
                        break;
                        #endregion

                        #region gestion d'un paiement normal d'une tranche
                    default:
                        if (checkRemise.IsChecked == true)
                        {
                            switch (cmbDispense.Text)
                            {
                            case REMISE:
                                gestionRemise();
                                break;

                            case BOURSE:
                                gestionDispense();
                                break;
                            }
                        }
                        else
                        {
                            if (cmbTranche.SelectedValue != null)
                            {
                                payerBE = new PayerBE(matricule, login, codeprestation, tranche, montant, dpiDateOp.SelectedDate.Value, annee, TRANCHE_COMPLET, 0);
                                if (prestationBL.rechercherPayer(payerBE) == null)
                                {
                                    if (prestationBL.ajouterAcheterPayer(payerBE))
                                    {
                                        trancheBE             = new TrancheBE();
                                        trancheBE.codetranche = payerBE.codeTranche;
                                        trancheBE             = prestationBL.rechercherTranche(trancheBE);
                                        etat = new CreerEtat("Paiement_prestation" + matricule + DateTime.Today.ToShortDateString(), "Reçu de paiement N° " + prestationBL.rechercherNumeroPayer(payerBE) + "\nDate " + dpiDateOp.SelectedDate.Value);
                                        etat.facturePrestation(payerBE, eleve, cmbClasse.Text, prestation.nomPrestation, 0, trancheBE.nomtranche);
                                        montant -= montant;

                                        //enregistrement du versement
                                        //prestationBL.enregistrer_versement(matricule, "Opération de dépot d'argent pour les frais de : " + cmbPrestation.Text, Convert.ToDouble(txtMontant.Text),
                                        //    dpiDateOp.SelectedDate.Value, annee);
                                    }
                                    else
                                    {
                                        MessageBox.Show("Enregistrement echoue");
                                    }
                                }
                                else
                                {
                                    MessageBox.Show("Cette tranche a déjà été payée pour cet étudiant, pour modifier cliquer sur la ligne correspondante dans la grille du bas");
                                }
                            }
                            else
                            {
                                double m = montant;
                                numerorecu = "";
                                foreach (MontantTrancheBE mt in tranches)
                                {
                                    payerBE = new PayerBE(matricule, Ecole.UI.ConnexionUI.utilisateur.login, codeprestation, mt.codeTranche, mt.montant, dpiDateOp.SelectedDate.Value, annee, TRANCHE_COMPLET, Convert.ToDecimal(remise));
                                    if (prestationBL.ajouterAcheterPayer(payerBE))
                                    {
                                        if (numerorecu == "")
                                        {
                                            numerorecu = prestationBL.rechercherNumeroPayer(payerBE);
                                        }
                                        montant -= mt.montant;
                                    }
                                    else
                                    {
                                        MessageBox.Show("Enregistrement echoue");
                                    }
                                }

                                //enregistrement du versement
                                //prestationBL.enregistrer_versement(matricule, "Opération de dépot d'argent pour les frais de : " + cmbPrestation.Text, Convert.ToDouble(txtMontant.Text),
                                //    dpiDateOp.SelectedDate.Value, annee);

                                etat = new CreerEtat("Paiement_prestation" + matricule + DateTime.Today.ToShortDateString(), "Reçu de paiement N° " + numerorecu + "\nDate " + dpiDateOp.SelectedDate.Value);
                                etat.facturePrestation(prestation, eleve, cmbClasse.Text, m, remise);
                            }
                        }
                        initialiser();
                        break;
                        #endregion
                    }
                }
                else
                {
                    MessageBox.Show("Veuillez renseigner le montant!", "school brain:Alerte", MessageBoxButton.OK, MessageBoxImage.Information);
                }
            }

            //enregistrement du versement
            prestationBL.enregistrer_versement(matricule, "Opération de dépot d'argent pour les frais de : " + cmbPrestation.Text, (Convert.ToDouble(txtMontant.Text) - montant),
                                               dpiDateOp.SelectedDate.Value, annee);

            txtReste.Text = montant.ToString();
            lignes.Clear();
            lignes = chargerGrid();
            grdStatus.ItemsSource = lignes;
            grdStatus.Items.Refresh();

            txtMontant.Clear();
            cmbTranche.Text = "";
        }