in service/src/main/java/org/apache/fineract/cn/individuallending/internal/service/schedule/ScheduledActionHelpers.java [222:240]
private static LocalDate alignInWeeks(final LocalDate paymentDate, final PaymentCycle paymentCycle) {
final Integer alignmentWeek = paymentCycle.getAlignmentWeek();
if (alignmentWeek == null)
return paymentDate;
if ((alignmentWeek == 0) || (alignmentWeek == 1) || (alignmentWeek == 2))
return paymentDate.plusWeeks(alignmentWeek);
if (alignmentWeek == -1)
{
final LocalDate lastDayOfMonth = YearMonth.of(paymentDate.getYear(), paymentDate.getMonth()).atEndOfMonth();
int dayOfWeek = lastDayOfMonth.getDayOfWeek().getValue() - 1;
if (paymentCycle.getAlignmentDay() == null || dayOfWeek == paymentCycle.getAlignmentDay()) {
return lastDayOfMonth;
}
else
return lastDayOfMonth.minus(7, ChronoUnit.DAYS); //Will align days in next step.
}
throw new IllegalStateException("PaymentCycle.alignmentWeek should only ever be 0, 1, 2, or -1, but was " + alignmentWeek);
}