FINERACT-2181: fix prepayment functionality when prepayment happens in the first month of loan
This commit is contained in:
committed by
Arnold Gálovics
parent
dd2c29fb91
commit
cb82af119b
+15
-2
@@ -242,11 +242,24 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService {
|
||||
}
|
||||
|
||||
LocalDate recalculateFrom = null;
|
||||
if (loan.isInterestBearingAndInterestRecalculationEnabled()) {
|
||||
if (loan.isInterestBearingAndInterestRecalculationEnabled() && loan.getLoanProduct().getProductInterestRecalculationDetails()
|
||||
.getPreCloseInterestCalculationStrategy().calculateTillPreClosureDateEnabled()) {
|
||||
recalculateFrom = transactionDate;
|
||||
}
|
||||
final ScheduleGeneratorDTO scheduleGeneratorDTOForPrepay = this.loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom,
|
||||
transactionDate, holidayDetailDto);
|
||||
|
||||
Money outstanding = loanTransactionProcessingService.fetchPrepaymentDetail(scheduleGeneratorDTOForPrepay, transactionDate, loan)
|
||||
.getTotalOutstanding();
|
||||
LocalDate recalculateTill = null;
|
||||
if (repaymentAmount.isGreaterThanOrEqualTo(outstanding) && loan.isInterestBearingAndInterestRecalculationEnabled()
|
||||
&& loan.getLoanProduct().getProductInterestRecalculationDetails().getPreCloseInterestCalculationStrategy()
|
||||
.calculateTillPreClosureDateEnabled()) {
|
||||
recalculateTill = transactionDate;
|
||||
}
|
||||
|
||||
final ScheduleGeneratorDTO scheduleGeneratorDTO = this.loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom,
|
||||
holidayDetailDto);
|
||||
recalculateTill, holidayDetailDto);
|
||||
|
||||
if (!isHolidayValidationDone) {
|
||||
final HolidayDetailDTO holidayDetailDTO = scheduleGeneratorDTO.getHolidayDetailDTO();
|
||||
|
||||
+1
-1
@@ -200,7 +200,7 @@ public class LoanTransactionProcessingServiceImpl implements LoanTransactionProc
|
||||
loan.getTransactionProcessingStrategyCode());
|
||||
|
||||
return loanScheduleGenerator.rescheduleNextInstallments(mc, loanApplicationTerms, loan, generatorDTO.getHolidayDetailDTO(),
|
||||
loanRepaymentScheduleTransactionProcessor, generatorDTO.getRecalculateFrom());
|
||||
loanRepaymentScheduleTransactionProcessor, generatorDTO.getRecalculateFrom(), generatorDTO.getRecalculateTill());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+8
-2
@@ -76,10 +76,16 @@ public class LoanUtilService {
|
||||
|
||||
public ScheduleGeneratorDTO buildScheduleGeneratorDTO(final Loan loan, final LocalDate recalculateFrom) {
|
||||
final HolidayDetailDTO holidayDetailDTO = null;
|
||||
return buildScheduleGeneratorDTO(loan, recalculateFrom, holidayDetailDTO);
|
||||
return buildScheduleGeneratorDTO(loan, recalculateFrom, null, holidayDetailDTO);
|
||||
}
|
||||
|
||||
public ScheduleGeneratorDTO buildScheduleGeneratorDTO(final Loan loan, final LocalDate recalculateFrom,
|
||||
final LocalDate rescheduleTill) {
|
||||
final HolidayDetailDTO holidayDetailDTO = null;
|
||||
return buildScheduleGeneratorDTO(loan, recalculateFrom, rescheduleTill, holidayDetailDTO);
|
||||
}
|
||||
|
||||
public ScheduleGeneratorDTO buildScheduleGeneratorDTO(final Loan loan, final LocalDate recalculateFrom, final LocalDate recalculateTill,
|
||||
final HolidayDetailDTO holidayDetailDTO) {
|
||||
HolidayDetailDTO holidayDetails = holidayDetailDTO;
|
||||
if (holidayDetailDTO == null) {
|
||||
@@ -133,7 +139,7 @@ public class LoanUtilService {
|
||||
|
||||
ScheduleGeneratorDTO scheduleGeneratorDTO = new ScheduleGeneratorDTO(loanScheduleFactory, applicationCurrency.toData(),
|
||||
calculatedRepaymentsStartingFromDate, holidayDetails, restCalendarInstance, compoundingCalendarInstance, recalculateFrom,
|
||||
overdurPenaltyWaitPeriod, floatingRateDTO, calendar, calendarHistoryDataWrapper,
|
||||
recalculateTill, overdurPenaltyWaitPeriod, floatingRateDTO, calendar, calendarHistoryDataWrapper,
|
||||
isInterestChargedFromDateAsDisbursementDateEnabled, numberOfDays, isSkipRepaymentOnFirstMonth,
|
||||
isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled, isFirstRepaymentDateAllowedOnHoliday,
|
||||
isInterestToBeRecoveredFirstWhenGreaterThanEMI, isPrincipalCompoundingDisabledForOverdueLoans);
|
||||
|
||||
Reference in New Issue
Block a user