Esempio n. 1
0
bool operator ==(const Evenement& e1, const Evenement& e2){
    return(e1.getDate()==e2.getDate() && e1.getEcheance()==e2.getEcheance() && e1.getId()==e2.getId() && e1.getTitre()==e2.getTitre());
}
Esempio n. 2
0
int Pret::calculerEcheancier() {
    double capitalRestantDu = this->capitalEmprunte;
    double capitalRembourse,
           interets = 0,
           mensualiteEcheance = this->mensualite;
    double assurance = getCoutMensuelAssurance();
    QDate dateMensualite = this->dateDebloquage;
    bool evenementTraite = true;

    // Créer l'échéancier
    int echeancierId = creerEcheancier("Echéancier prêt", QDate::currentDate(), 1);

    std::cout << "Echeancier id : " << echeancierId << "\n";
    if (echeancierId != -1) {
        // Récupérer les événements relatifs au prêt
        QList<Evenement> evts = getEvenements(this->id);
        QListIterator<Evenement> evtsIterator(evts);
        std::cout << "evts size = " << evts.count() << std::endl;
        Evenement event;

        // Calculer les échéances
        while (capitalRestantDu > 0) {
            if ( !evenementTraite || (evenementTraite && evtsIterator.hasNext()) ) {
                // Si evenement traité, passer au suivant
                if ( evenementTraite ) {
                    event = evtsIterator.next();
                    evenementTraite = false;
                }
                // Si la date de mensualité est antérieure à la date de l'évènement, rien à faire : on attend l'échéance suivante.
                if (dateMensualite >= event.getDate()) {
                    std::cout << "evenement a traiter : " << event.getType() << " " << event.getDate().toString().toStdString() << std::endl;
                    switch(event.getType()) {
                    case Evenement::DIFFERE_TOTAL :
                        std::cout << "differe total" << std::endl;
                        for (int nbReports = event.getValeur(); nbReports > 0; nbReports--) {
                            // capital restant du est augmenté des frais intercalaires générés par le différé total
                            capitalRestantDu += calculerInteretsMensuels(capitalRestantDu, this->tauxInteret);
                            // mensualite = assurance
                            ajouterEcheance(echeancierId, dateMensualite, capitalRestantDu, assurance, 0, interets, assurance);
                            dateMensualite = dateMensualite.addMonths(1);
                        }
                        break;
                    case Evenement::DIFFERE_PARTIEL :
                        std::cout << "differe partiel" << std::endl;
                        interets = calculerInteretsMensuels(capitalRestantDu, this->tauxInteret);
                        for (int nbReports = event.getValeur(); nbReports > 0; nbReports--) {
                            // mensualite = cout des frais intercalaires + assurance
                            ajouterEcheance(echeancierId, dateMensualite, capitalRestantDu, interets + assurance, 0, interets, assurance);
                            dateMensualite = dateMensualite.addMonths(1);
                        }
                        break;
                    case Evenement::MAJ_MENSUALITE :
                        std::cout << "maj mensualite" << std::endl;
                        mensualiteEcheance = event.getValeur() - getCoutMensuelAssurance();
                        this->duree = calculerDureeRemboursement(mensualiteEcheance);
                        break;
                    case Evenement::MAJ_TAUX :
                        std::cout << "maj taux" << std::endl;
                        break;
                    case Evenement::RBT_ANTICIPE :
                        std::cout << "rbt anticipe" << std::endl;
                        capitalRestantDu -= event.getValeur();
                        break;
                    case Evenement::REPORT_MENSUALITE : // utile? utiliser report partiel/total?
                        std::cout << "report mensualite" << std::endl;
                        break;
                    }
                    evenementTraite = true;
                }
            }

            interets = calculerInteretsMensuels(capitalRestantDu, this->tauxInteret);
            if ( (capitalRestantDu+interets) >= mensualiteEcheance) {
                capitalRembourse = mensualiteEcheance - interets;
            } else {
                capitalRembourse = capitalRestantDu;
                mensualiteEcheance = capitalRestantDu+interets;
            }
            capitalRestantDu -= capitalRembourse;
            ajouterEcheance(echeancierId, dateMensualite, capitalRestantDu, mensualiteEcheance + assurance, capitalRembourse, interets, assurance);
            dateMensualite = dateMensualite.addMonths(1);
        }
    }
//    std::cout.flush();
    return echeancierId;
}