package app.model;

/**
 * Nedbetalingsplan.java
 *
 * Generer selve nedbetalingsplanen.
 *
 * @author Hilde Vestøl (106288)
 * @version 0.9
 */

 
 
public class Nedbetalingsplan  {

    private Loan lån;
    private Termin[] tbl;

    /**
     * Konstruktør som tar inn ett låneobjekt
     * @param lån
     */

    protected Nedbetalingsplan(Loan lån) {
        this.lån = lån;

    }
        
    /**
     * Lager selve terminlisten
     */

    public void lagTerminliste() {
        int terminNr;
        tbl = new Termin[antallTerminer()];
        int restgjeld = lån.getLånebeløp();
        
        for ( terminNr = 1 ; terminNr < antallTerminer() ; terminNr++ ) {
            tbl[terminNr-1] =
                new Termin( terminNr,
                            beregnAvdrag(restgjeld),
                            renteBeløp(restgjeld),
                            (restgjeld -= beregnAvdrag(restgjeld)),
                            lån
                );
        }
        
        double sisteAvdrag = beregnAvdrag(restgjeld) + ( restgjeld - beregnAvdrag(restgjeld) );
        tbl[terminNr-1] =
            new Termin( terminNr,
                        sisteAvdrag,
                        renteBeløp(restgjeld),
                        0,
                        lån
            );
    }
    
    
    /**
     * Metode for å få tak i tabellen med Terminer
     * @return Termin[] tbl
     */

    protected Termin[] getTerminListe() {
        return tbl;
    }
    
    private int antallTerminer() {
        return lån.getLøpetid() * lån.getÅrligeTerminer() ;
    }
    
    
    private double rentesats() {
        return lån.getRentesats() / 100;
    }

    
    private double renteBeløp( int restgjeld ) {
        return Math.round(restgjeld * rentesats() / lån.getÅrligeTerminer() );
    }
    

    private double beregnAvdrag( int restgjeld ) {
        if (lån.getLånetype() == Loan.TYPE_ANNUITET) {
            double LB = lån.getLånebeløp();
            double r  = lån.getRentesats() / 100;
            double t  = lån.getÅrligeTerminer();
            double lp = lån.getLøpetid();
        
            double terminBeløp = LB * (r/t) / (1 - Math.pow((1 + (r/t) ), (-lp*t) ) );
               
            return Math.round(terminBeløp - renteBeløp(restgjeld));
        }else { //finnes to typer lån.
            return Math.round(lån.getLånebeløp() / (lån.getLøpetid() * lån.getÅrligeTerminer() ) );
        }
    }
    

} // end class Nedbetalingsplan

Kontaktinfo

Hilde Vestøl
98883064
hilde@vestol.net

kart