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
/**
* 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