in service/src/main/java/org/apache/fineract/cn/individuallending/internal/service/schedule/ScheduledActionHelpers.java [130:151]
private static LocalDate generateNextPaymentDate(final CaseParameters caseParameters, final LocalDate lastPaymentDate) {
final PaymentCycle paymentCycle = caseParameters.getPaymentCycle();
final ChronoUnit maximumSpecifiedAlignmentChronoUnit =
paymentCycle.getAlignmentMonth() != null ? ChronoUnit.MONTHS :
paymentCycle.getAlignmentWeek() != null ? ChronoUnit.WEEKS :
paymentCycle.getAlignmentDay() != null ? ChronoUnit.DAYS :
ChronoUnit.HOURS;
final ChronoUnit maximumPossibleAlignmentChronoUnit =
paymentCycle.getTemporalUnit().equals(ChronoUnit.YEARS) ? ChronoUnit.MONTHS :
paymentCycle.getTemporalUnit().equals(ChronoUnit.MONTHS) ? ChronoUnit.WEEKS :
paymentCycle.getTemporalUnit().equals(ChronoUnit.WEEKS) ? ChronoUnit.DAYS :
ChronoUnit.HOURS; //Hours as a placeholder.
final ChronoUnit maximumAlignmentChronoUnit = min(maximumSpecifiedAlignmentChronoUnit, maximumPossibleAlignmentChronoUnit);
final LocalDate incrementedPaymentDate = incrementPaymentDate(lastPaymentDate, paymentCycle);
final LocalDate orientedPaymentDate = orientPaymentDate(incrementedPaymentDate, maximumSpecifiedAlignmentChronoUnit, paymentCycle);
return alignPaymentDate(orientedPaymentDate, maximumAlignmentChronoUnit, paymentCycle);
}