Search in sources :

Example 11 with SavingsScheduleEntity

use of org.mifos.accounts.savings.business.SavingsScheduleEntity in project head by mifos.

the class SavingsPaymentStrategyForVoluntarySavingsAccountsTest method whenUnpaidScheduledInstallmentsExistAllAreMarkedAsPaid.

@Test
public void whenUnpaidScheduledInstallmentsExistAllAreMarkedAsPaid() {
    // setup
    final Money balanceBeforeDeposit = new Money(TestUtils.RUPEE, "0.0");
    final Money fullDepositAmount = new Money(TestUtils.RUPEE, "100.0");
    final Date dateOfDeposit = new DateTime().toDate();
    final SavingsScheduleEntity unpaidSaving1 = new SavingsScheduleBuilder().withInstallmentNumber(1).withAccount(savingsAccount).withCustomer(payingCustomer).build();
    final SavingsScheduleEntity unpaidSaving2 = new SavingsScheduleBuilder().withInstallmentNumber(2).withAccount(savingsAccount).withCustomer(payingCustomer).build();
    final List<SavingsScheduleEntity> unpaidDepositsForPayingCustomer = Arrays.asList(unpaidSaving1, unpaidSaving2);
    // stubbing
    when(accountPayment.getAmount()).thenReturn(fullDepositAmount);
    when(accountPayment.getPaymentDate()).thenReturn(dateOfDeposit);
    // exercise test
    paymentStrategy.makeScheduledPayments(accountPayment, unpaidDepositsForPayingCustomer, payingCustomer, SavingsType.VOLUNTARY, balanceBeforeDeposit);
    // verification
    assertThat(unpaidSaving1.isPaid(), is(true));
    assertThat(unpaidSaving2.isPaid(), is(true));
}
Also used : SavingsScheduleBuilder(org.mifos.domain.builders.SavingsScheduleBuilder) Money(org.mifos.framework.util.helpers.Money) SavingsScheduleEntity(org.mifos.accounts.savings.business.SavingsScheduleEntity) Date(java.util.Date) DateTime(org.joda.time.DateTime) Test(org.junit.Test)

Example 12 with SavingsScheduleEntity

use of org.mifos.accounts.savings.business.SavingsScheduleEntity in project head by mifos.

the class SavingsPaymentStrategyForVoluntarySavingsAccountsTest method whenUnpaidScheduledInstallmentsExistAnyExcessPaymentOverDepositDueShouldBeReturnedAsRemainingAmount.

@Test
public void whenUnpaidScheduledInstallmentsExistAnyExcessPaymentOverDepositDueShouldBeReturnedAsRemainingAmount() {
    // setup
    final Money balanceBeforeDeposit = new Money(TestUtils.RUPEE, "0.0");
    final Money fullDepositAmount = new Money(TestUtils.RUPEE, "100.0");
    final Money recommendedDepositDue = new Money(TestUtils.RUPEE, "36.0");
    final Date dateOfDeposit = new DateTime().toDate();
    final SavingsScheduleEntity unpaidSaving1 = new SavingsScheduleBuilder().withInstallmentNumber(1).withAccount(savingsAccount).withCustomer(payingCustomer).build();
    final SavingsScheduleEntity unpaidSaving2 = new SavingsScheduleBuilder().withInstallmentNumber(2).withAccount(savingsAccount).withCustomer(payingCustomer).withDepositDue(recommendedDepositDue).build();
    final List<SavingsScheduleEntity> unpaidDepositsForPayingCustomer = Arrays.asList(unpaidSaving1, unpaidSaving2);
    // stubbing
    when(accountPayment.getAmount()).thenReturn(fullDepositAmount);
    when(accountPayment.getPaymentDate()).thenReturn(dateOfDeposit);
    // exercise test
    final Money remainingAmount = paymentStrategy.makeScheduledPayments(accountPayment, unpaidDepositsForPayingCustomer, payingCustomer, SavingsType.VOLUNTARY, balanceBeforeDeposit);
    // verification
    assertThat(remainingAmount, is(fullDepositAmount.subtract(recommendedDepositDue)));
}
Also used : SavingsScheduleBuilder(org.mifos.domain.builders.SavingsScheduleBuilder) Money(org.mifos.framework.util.helpers.Money) SavingsScheduleEntity(org.mifos.accounts.savings.business.SavingsScheduleEntity) Date(java.util.Date) DateTime(org.joda.time.DateTime) Test(org.junit.Test)

Example 13 with SavingsScheduleEntity

use of org.mifos.accounts.savings.business.SavingsScheduleEntity in project head by mifos.

the class SavingsPaymentStrategyForVoluntarySavingsAccountsTest method whenUnpaidScheduledInstallmentsExistASavingsTrxnDetailIsCreatedWithLatestBalance.

@Test
public void whenUnpaidScheduledInstallmentsExistASavingsTrxnDetailIsCreatedWithLatestBalance() {
    // setup
    final Money balanceBeforeDeposit = new Money(TestUtils.RUPEE, "0.0");
    final Money fullDepositAmount = new Money(TestUtils.RUPEE, "100.0");
    final Money recommendedDepositDue = new Money(TestUtils.RUPEE, "36.0");
    final Date dateOfDeposit = new DateTime().toDate();
    final SavingsScheduleEntity unpaidSaving1 = new SavingsScheduleBuilder().withInstallmentNumber(1).withAccount(savingsAccount).withCustomer(payingCustomer).build();
    final SavingsScheduleEntity unpaidSaving2 = new SavingsScheduleBuilder().withInstallmentNumber(2).withAccount(savingsAccount).withCustomer(payingCustomer).withDepositDue(recommendedDepositDue).build();
    final List<SavingsScheduleEntity> unpaidDepositsForPayingCustomer = Arrays.asList(unpaidSaving1, unpaidSaving2);
    // stubbing
    when(accountPayment.getAmount()).thenReturn(fullDepositAmount);
    when(accountPayment.getPaymentDate()).thenReturn(dateOfDeposit);
    // exercise test
    paymentStrategy.makeScheduledPayments(accountPayment, unpaidDepositsForPayingCustomer, payingCustomer, SavingsType.VOLUNTARY, balanceBeforeDeposit);
    // verification
    verify(savingsTransactionActivityHelper, times(1)).createSavingsTrxnForDeposit(accountPayment, recommendedDepositDue, payingCustomer, unpaidSaving2, balanceBeforeDeposit.add(recommendedDepositDue));
}
Also used : SavingsScheduleBuilder(org.mifos.domain.builders.SavingsScheduleBuilder) Money(org.mifos.framework.util.helpers.Money) SavingsScheduleEntity(org.mifos.accounts.savings.business.SavingsScheduleEntity) Date(java.util.Date) DateTime(org.joda.time.DateTime) Test(org.junit.Test)

Example 14 with SavingsScheduleEntity

use of org.mifos.accounts.savings.business.SavingsScheduleEntity in project head by mifos.

the class SavingsPaymentStrategyForVoluntarySavingsAccountsTest method whenNoUnpaidScheduledInstallmentsExistNoPaymentsAreMade.

@Test
public void whenNoUnpaidScheduledInstallmentsExistNoPaymentsAreMade() {
    // setup
    final Money balanceBeforeDeposit = new Money(TestUtils.RUPEE, "0.0");
    final Money fullDepositAmount = new Money(TestUtils.RUPEE, "100.0");
    final Date dateOfDeposit = new DateTime().toDate();
    final List<SavingsScheduleEntity> unpaidDepositsForPayingCustomer = Arrays.asList();
    // stubbing
    when(accountPayment.getAmount()).thenReturn(fullDepositAmount);
    when(accountPayment.getPaymentDate()).thenReturn(dateOfDeposit);
    // exercise test
    paymentStrategy.makeScheduledPayments(accountPayment, unpaidDepositsForPayingCustomer, payingCustomer, SavingsType.VOLUNTARY, balanceBeforeDeposit);
    // verification
    verify(accountPayment, times(0)).addAccountTrxn(any(AccountTrxnEntity.class));
}
Also used : Money(org.mifos.framework.util.helpers.Money) AccountTrxnEntity(org.mifos.accounts.business.AccountTrxnEntity) SavingsScheduleEntity(org.mifos.accounts.savings.business.SavingsScheduleEntity) Date(java.util.Date) DateTime(org.joda.time.DateTime) Test(org.junit.Test)

Example 15 with SavingsScheduleEntity

use of org.mifos.accounts.savings.business.SavingsScheduleEntity in project head by mifos.

the class SavingsScheduleIntegrationTest method createWeeklySavingScheduleSecondInstallmentFallsInNextMeetingHoliday.

@Ignore
@Test
public void createWeeklySavingScheduleSecondInstallmentFallsInNextMeetingHoliday() throws Exception {
    buildAndPersistHoliday(expectedFirstDepositDate.plusWeeks(1), expectedFirstDepositDate.plusWeeks(1), RepaymentRuleTypes.NEXT_MEETING_OR_REPAYMENT);
    createClientSavingsAccount();
    short installmentId = 1;
    DateTime installmentDate = expectedFirstDepositDate;
    for (AccountActionDateEntity accountActionDate : getActionDatesSortedByDate(savingsAccount)) {
        SavingsScheduleEntity scheduleEntity = (SavingsScheduleEntity) accountActionDate;
        assertThat(scheduleEntity.getInstallmentId(), is(installmentId));
        if (installmentId == 2) {
            // only second installment pushed out one week.
            assertThat(new LocalDate(scheduleEntity.getActionDate()), is(new LocalDate(installmentDate.plusWeeks(1).toDate())));
        } else {
            assertThat(new LocalDate(scheduleEntity.getActionDate()), is(new LocalDate(installmentDate.toDate())));
        }
        assertThat(scheduleEntity.getDeposit().getAmountDoubleValue(), is(13.0));
        installmentId++;
        installmentDate = installmentDate.plusWeeks(1);
    }
}
Also used : AccountActionDateEntity(org.mifos.accounts.business.AccountActionDateEntity) SavingsScheduleEntity(org.mifos.accounts.savings.business.SavingsScheduleEntity) LocalDate(org.joda.time.LocalDate) DateTime(org.joda.time.DateTime) Ignore(org.junit.Ignore) Test(org.junit.Test)

Aggregations

SavingsScheduleEntity (org.mifos.accounts.savings.business.SavingsScheduleEntity)56 Test (org.junit.Test)48 Money (org.mifos.framework.util.helpers.Money)33 DateTime (org.joda.time.DateTime)32 Date (java.util.Date)27 AccountActionDateEntity (org.mifos.accounts.business.AccountActionDateEntity)19 SavingsScheduleBuilder (org.mifos.domain.builders.SavingsScheduleBuilder)18 LocalDate (org.joda.time.LocalDate)13 Ignore (org.junit.Ignore)13 DateMidnight (org.joda.time.DateMidnight)6 SavingsOfferingBO (org.mifos.accounts.productdefinition.business.SavingsOfferingBO)5 ArrayList (java.util.ArrayList)4 SavingsBO (org.mifos.accounts.savings.business.SavingsBO)3 Holiday (org.mifos.application.holiday.business.Holiday)3 MeetingBO (org.mifos.application.meeting.business.MeetingBO)3 HolidayBuilder (org.mifos.domain.builders.HolidayBuilder)3 SavingsProductBuilder (org.mifos.domain.builders.SavingsProductBuilder)3 Session (org.hibernate.Session)2 AccountTrxnEntity (org.mifos.accounts.business.AccountTrxnEntity)2 UserContext (org.mifos.security.util.UserContext)2