MIFOSX-1340 : corrected schedule generator to use calendar instance

This commit is contained in:
Pramod Nuthakki
2014-06-24 23:51:10 +05:30
parent 5ae0e0f62c
commit 5474e87227
4 changed files with 27 additions and 5 deletions
@@ -462,4 +462,18 @@ public class CalendarUtils {
return getNextRecurringDate(recur, seedDate, currentDate);
}
public static LocalDate getNextScheduleDate(final Calendar calendar, final LocalDate startDate) {
final Recur recur = CalendarUtils.getICalRecur(calendar.getRecurrence());
if (recur == null) { return null; }
LocalDate date = startDate;
final LocalDate seedDate = calendar.getStartDateLocalDate();
if (isValidRedurringDate(calendar.getRecurrence(), seedDate, date)) {
date = date.plusDays(1);
}
final LocalDate scheduleDate = getNextRecurringDate(recur, seedDate, date);
return scheduleDate;
}
}
@@ -42,6 +42,8 @@ import org.mifosplatform.infrastructure.core.service.DateUtils;
import org.mifosplatform.organisation.monetary.domain.Money;
import org.mifosplatform.organisation.staff.domain.Staff;
import org.mifosplatform.portfolio.accountdetails.domain.AccountType;
import org.mifosplatform.portfolio.calendar.domain.Calendar;
import org.mifosplatform.portfolio.calendar.service.CalendarUtils;
import org.mifosplatform.portfolio.client.domain.Client;
import org.mifosplatform.portfolio.common.domain.PeriodFrequencyType;
import org.mifosplatform.portfolio.group.domain.Group;
@@ -1042,10 +1044,16 @@ public class RecurringDepositAccount extends SavingsAccount {
return this.accountTermAndPreClosure.isTransferInterestToLinkedAccount();
}
public void generateSchedule(final PeriodFrequencyType frequency, final Integer recurringEvery) {
public void generateSchedule(final PeriodFrequencyType frequency, final Integer recurringEvery, final Calendar calendar) {
final List<RecurringDepositScheduleInstallment> depositScheduleInstallments = depositScheduleInstallments();
depositScheduleInstallments.clear();
LocalDate installmentDate = depositStartDate();
LocalDate installmentDate = null;
if (this.isCalendarInherited()) {
installmentDate = CalendarUtils.getNextScheduleDate(calendar, accountSubmittedOrActivationDate());
} else {
installmentDate = depositStartDate();
}
final LocalDate maturityDate = calculateMaturityDate();
int installmentNumber = 1;
final BigDecimal depositAmount = this.recurringDetail.mandatoryRecommendedDepositAmount();
@@ -289,7 +289,7 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo
final PeriodFrequencyType frequencyType = CalendarFrequencyType.from(CalendarUtils.getFrequency(calendar.getRecurrence()));
Integer frequency = CalendarUtils.getInterval(calendar.getRecurrence());
frequency = frequency == -1 ? 1 : frequency;
account.generateSchedule(frequencyType, frequency);
account.generateSchedule(frequencyType, frequency, calendar);
account.updateMaturityDateAndAmount(mc, isPreMatureClosure);
}
@@ -240,7 +240,7 @@ public class DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl impl
final PeriodFrequencyType frequencyType = CalendarFrequencyType.from(CalendarUtils.getFrequency(calendar.getRecurrence()));
Integer frequency = CalendarUtils.getInterval(calendar.getRecurrence());
frequency = frequency == -1 ? 1 : frequency;
account.generateSchedule(frequencyType, frequency);
account.generateSchedule(frequencyType, frequency, calendar);
final boolean isPreMatureClosure = false;
account.updateMaturityDateAndAmount(mc, isPreMatureClosure);
account.validateApplicableInterestRate();
@@ -373,7 +373,7 @@ public class DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl impl
final PeriodFrequencyType frequencyType = CalendarFrequencyType.from(CalendarUtils.getFrequency(calendar.getRecurrence()));
Integer frequency = CalendarUtils.getInterval(calendar.getRecurrence());
frequency = frequency == -1 ? 1 : frequency;
account.generateSchedule(frequencyType, frequency);
account.generateSchedule(frequencyType, frequency, calendar);
final boolean isPreMatureClosure = false;
account.updateMaturityDateAndAmount(mc, isPreMatureClosure);
account.validateApplicableInterestRate();