diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/service/CalendarUtils.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/service/CalendarUtils.java index 59b156130..c77c273d2 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/service/CalendarUtils.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/service/CalendarUtils.java @@ -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; + } } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/RecurringDepositAccount.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/RecurringDepositAccount.java index d46e8c007..536aa9f86 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/RecurringDepositAccount.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/RecurringDepositAccount.java @@ -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 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(); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java index d3d6a60dd..16c2a4404 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java @@ -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); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java index 8b27097af..92dced3eb 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java @@ -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();