Search in sources :

Example 1 with Schedule

use of org.mifos.accounts.loan.schedule.domain.Schedule in project head by mifos.

the class ScheduleCalculatorAdaptor method computeExtraInterest.

public void computeExtraInterest(LoanBO loan, Date asOfDate) {
    if (configurationBusinessService.isRecalculateInterestEnabled() && loan.isDecliningBalanceEqualPrincipleCalculation()) {
        Schedule schedule = scheduleMapper.mapToSchedule(new ArrayList<LoanScheduleEntity>(loan.getLoanScheduleEntities()), loan.getDisbursementDate(), getDailyInterest(loan.getInterestRate()), loan.getLoanAmount().getAmount());
        scheduleCalculator.computeExtraInterest(schedule, asOfDate);
        populateExtraInterestInLoanScheduleEntities(schedule, loan.getLoanScheduleEntityMap());
    } else if (loan.isDecliningBalanceInterestRecalculation()) {
        Schedule schedule = scheduleMapper.mapToSchedule(new ArrayList<LoanScheduleEntity>(loan.getLoanScheduleEntities()), loan.getDisbursementDate(), getDailyInterest(loan.getInterestRate()), loan.getLoanAmount().getAmount());
        scheduleCalculator.computeExtraInterest(schedule, asOfDate);
        populateExtraInterestInLoanScheduleEntities(schedule, loan.getLoanScheduleEntityMap());
    }
}
Also used : Schedule(org.mifos.accounts.loan.schedule.domain.Schedule) ArrayList(java.util.ArrayList)

Example 2 with Schedule

use of org.mifos.accounts.loan.schedule.domain.Schedule in project head by mifos.

the class ScheduleCalculatorAdaptor method applyPayment.

public void applyPayment(LoanBO loanBO, Money amount, Date paymentDate, PersonnelBO personnel, AccountPaymentEntity accountPaymentEntity, boolean adjustment) {
    Schedule schedule = scheduleMapper.mapToSchedule(loanBO.getLoanScheduleEntities(), loanBO.getDisbursementDate(), getDailyInterest(loanBO.getInterestRate()), loanBO.getLoanAmount().getAmount());
    scheduleCalculator.applyPayment(schedule, amount.getAmount(), paymentDate, adjustment);
    scheduleMapper.populatePaymentDetails(schedule, loanBO, paymentDate, personnel, accountPaymentEntity);
}
Also used : Schedule(org.mifos.accounts.loan.schedule.domain.Schedule)

Example 3 with Schedule

use of org.mifos.accounts.loan.schedule.domain.Schedule in project head by mifos.

the class ScheduleCalculatorTest method overdueOnLastInstallmentIsRecoveredInLastInstallment.

@Test
public void overdueOnLastInstallmentIsRecoveredInLastInstallment() {
    Installment installment1 = getInstallment(1, getDate(25, 9, 2010), 242.24, 20.40, 0);
    Installment installment2 = getInstallment(2, getDate(25, 10, 2010), 247.67, 14.96, 0);
    schedule = new Schedule(getDate(25, 8, 2010), 0.000658, BigDecimal.valueOf(1000d), asList(installment1, installment2));
    scheduleCalculator.computeExtraInterest(schedule, getDate(20, 11, 2010));
    assertThat(installment1.getExtraInterest().doubleValue(), is(0.0));
    assertThat(installment2.getExtraInterest().doubleValue(), is(13.17));
}
Also used : Installment(org.mifos.accounts.loan.schedule.domain.Installment) Schedule(org.mifos.accounts.loan.schedule.domain.Schedule) Test(org.junit.Test)

Example 4 with Schedule

use of org.mifos.accounts.loan.schedule.domain.Schedule in project head by mifos.

the class ScheduleCalculatorTest method withOverDueInterestsAndFeesAndPenalty.

@Test
public void withOverDueInterestsAndFeesAndPenalty() {
    Installment installment1 = getInstallment(1, getDate(25, 9, 2010), 242.24, 20.40, 0, 1, 2, 3, 4);
    Installment installment2 = getInstallment(2, getDate(25, 10, 2010), 247.67, 14.96, 0, 1, 2, 3, 4);
    Installment installment3 = getInstallment(3, getDate(25, 11, 2010), 252.22, 10.40, 0);
    Installment installment4 = getInstallment(4, getDate(25, 12, 2010), 257.87, 5.09, 0);
    schedule = new Schedule(getDate(25, 8, 2010), 0.000658, BigDecimal.valueOf(1000d), asList(installment1, installment2, installment3, installment4));
    scheduleCalculator.applyPayment(schedule, BigDecimal.valueOf(560d), getDate(30, 9, 2010), false);
    assertInstallmentPrincipals(installment1, 242.24, 0, 242.24);
    assertInstallmentPrincipals(installment2, 247.67, 0, 247.67);
    assertInstallmentPrincipals(installment3, 252.22, 215.82, 36.4);
    assertInstallmentPrincipals(installment4, 257.87, 257.87, 0);
    assertInstallmentInterests(installment1, 20.40, 0, 20.40);
    assertInstallmentInterests(installment2, 7.79, 7.79, 2.49);
    assertInstallmentInterests(installment3, 9.66, 9.66, 0);
    assertInstallmentInterests(installment4, 5.09, 5.09, 0);
}
Also used : Installment(org.mifos.accounts.loan.schedule.domain.Installment) Schedule(org.mifos.accounts.loan.schedule.domain.Schedule) Test(org.junit.Test)

Example 5 with Schedule

use of org.mifos.accounts.loan.schedule.domain.Schedule in project head by mifos.

the class ScheduleCalculatorTest method shouldComputeExtraFullPayment.

@Test
public void shouldComputeExtraFullPayment() {
    Installment installment1 = getInstallment(1, getDate(25, 9, 2010), 242.24, 20.40, 0);
    Installment installment2 = getInstallment(2, getDate(25, 10, 2010), 247.67, 14.96, 0);
    schedule = new Schedule(getDate(25, 8, 2010), 0.000658, BigDecimal.valueOf(1000d), asList(installment1, installment2));
    scheduleCalculator.applyPayment(schedule, new BigDecimal(262.64), getDate(25, 9, 2010), false);
    scheduleCalculator.applyPayment(schedule, new BigDecimal(262.63), getDate(25, 10, 2010), false);
    scheduleCalculator.computeExtraInterest(schedule, getDate(30, 12, 2010));
    assertThat(installment1.getExtraInterest().doubleValue(), is(0.0));
    assertThat(installment2.getExtraInterest().doubleValue(), is(0.0));
}
Also used : Installment(org.mifos.accounts.loan.schedule.domain.Installment) Schedule(org.mifos.accounts.loan.schedule.domain.Schedule) BigDecimal(java.math.BigDecimal) Test(org.junit.Test)

Aggregations

Schedule (org.mifos.accounts.loan.schedule.domain.Schedule)39 Test (org.junit.Test)36 Installment (org.mifos.accounts.loan.schedule.domain.Installment)34 BigDecimal (java.math.BigDecimal)4 RepaymentResultsHolder (org.mifos.accounts.loan.business.RepaymentResultsHolder)4 ArrayList (java.util.ArrayList)2 ScheduleMatcher (org.mifos.accounts.loan.schedule.domain.ScheduleMatcher)2 Date (java.util.Date)1 LinkedHashSet (java.util.LinkedHashSet)1 AccountPaymentEntity (org.mifos.accounts.business.AccountPaymentEntity)1 LoanScheduleEntityMatcher (org.mifos.accounts.loan.business.matchers.LoanScheduleEntityMatcher)1 ScheduleCalculator (org.mifos.accounts.loan.schedule.calculation.ScheduleCalculator)1 InstallmentBuilder (org.mifos.accounts.loan.schedule.domain.InstallmentBuilder)1 TestUtils.getDate (org.mifos.framework.TestUtils.getDate)1 Money (org.mifos.framework.util.helpers.Money)1