San-43 commented on code in PR #5689:
URL: https://github.com/apache/fineract/pull/5689#discussion_r3031899110
##########
fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java:
##########
@@ -289,32 +279,111 @@ private void
createLoanTermVariationsForRegularLoans(final Loan loan, final Inte
parent = createLoanTermVariations(loanRescheduleRequest, termType,
loan, rescheduleFromDate, dueDate,
loanRescheduleRequestToTermVariationMappings, isActive,
isSpecificToInstallment, BigDecimal.valueOf(graceOnPrincipal),
parent);
+ pendingRescheduleVariations.add(parent);
BigDecimal extraTermsBasedOnGracePeriods =
BigDecimal.valueOf(graceOnPrincipal);
- createLoanTermVariations(loanRescheduleRequest,
LoanTermVariationType.EXTEND_REPAYMENT_PERIOD.getValue(), loan,
- rescheduleFromDate, dueDate,
loanRescheduleRequestToTermVariationMappings, isActive, isSpecificToInstallment,
- extraTermsBasedOnGracePeriods, parent);
+ LoanTermVariations extraTermsVariation =
createLoanTermVariations(loanRescheduleRequest,
+ LoanTermVariationType.EXTEND_REPAYMENT_PERIOD.getValue(),
loan, rescheduleFromDate, dueDate,
+ loanRescheduleRequestToTermVariationMappings, isActive,
isSpecificToInstallment, extraTermsBasedOnGracePeriods, parent);
+ pendingRescheduleVariations.add(extraTermsVariation);
}
if (rescheduleFromDate != null && graceOnInterest != null) {
LoanTermVariations parent = null;
final Integer termType =
LoanTermVariationType.GRACE_ON_INTEREST.getValue();
- createLoanTermVariations(loanRescheduleRequest, termType, loan,
rescheduleFromDate, dueDate,
- loanRescheduleRequestToTermVariationMappings, isActive,
isSpecificToInstallment, BigDecimal.valueOf(graceOnInterest),
- parent);
+ LoanTermVariations loanTermVariation =
createLoanTermVariations(loanRescheduleRequest, termType, loan,
rescheduleFromDate,
+ dueDate, loanRescheduleRequestToTermVariationMappings,
isActive, isSpecificToInstallment,
+ BigDecimal.valueOf(graceOnInterest), parent);
+ pendingRescheduleVariations.add(loanTermVariation);
}
if (rescheduleFromDate != null && extraTerms != null) {
LoanTermVariations parent = null;
final Integer termType =
LoanTermVariationType.EXTEND_REPAYMENT_PERIOD.getValue();
- createLoanTermVariations(loanRescheduleRequest, termType, loan,
rescheduleFromDate, dueDate,
- loanRescheduleRequestToTermVariationMappings, isActive,
isSpecificToInstallment, BigDecimal.valueOf(extraTerms),
- parent);
+ LoanTermVariations loanTermVariation =
createLoanTermVariations(loanRescheduleRequest, termType, loan,
rescheduleFromDate,
+ dueDate, loanRescheduleRequestToTermVariationMappings,
isActive, isSpecificToInstallment,
+ BigDecimal.valueOf(extraTerms), parent);
+ pendingRescheduleVariations.add(loanTermVariation);
+ }
+
+ if (rescheduleFromDate != null && endDate != null && emi != null) {
+ LoanTermVariations parent = null;
+ final Integer termType =
LoanTermVariationType.EMI_AMOUNT.getValue();
+ int emiVariationsCreated = 0;
+ List<LocalDate> projectedInstallmentDueDates =
getProjectedInstallmentDueDates(loan, rescheduleFromDate,
+ pendingRescheduleVariations);
+ for (LocalDate installmentDueDate : projectedInstallmentDueDates) {
+ if (!DateUtils.isBefore(installmentDueDate,
rescheduleFromDate) && !DateUtils.isAfter(installmentDueDate, endDate)) {
+ createLoanTermVariations(loanRescheduleRequest, termType,
loan, installmentDueDate, installmentDueDate,
+ loanRescheduleRequestToTermVariationMappings,
isActive, true, emi, parent);
+ emiVariationsCreated++;
+ }
+ if (DateUtils.isAfter(installmentDueDate, endDate)) {
+ break;
+ }
+ }
+ if (emiVariationsCreated == 0) {
+ List<ApiParameterError> dataValidationErrors = new
ArrayList<>();
+ final DataValidatorBuilder dataValidatorBuilder = new
DataValidatorBuilder(dataValidationErrors)
+ .resource(RescheduleLoansApiConstants.ENTITY_NAME);
+
dataValidatorBuilder.reset().parameter(RescheduleLoansApiConstants.endDateParamName).failWithCode(
+ "end.date.before.next.installment", "End date must be
on or after the next projected installment date");
+ throw new
PlatformApiDataValidationException(dataValidationErrors);
+ }
}
loanRescheduleRequest.updateLoanRescheduleRequestToTermVariationMappings(loanRescheduleRequestToTermVariationMappings);
}
+ private List<LocalDate> getProjectedInstallmentDueDates(final Loan loan,
final LocalDate rescheduleFromDate,
+ final List<LoanTermVariations> pendingRescheduleVariations) {
+ ScheduleGeneratorDTO scheduleGeneratorDTO =
this.loanUtilService.buildScheduleGeneratorDTO(loan, rescheduleFromDate);
+ final LoanApplicationTerms loanApplicationTerms =
loanTermVariationsMapper.constructLoanApplicationTerms(scheduleGeneratorDTO,
+ loan);
+ List<LoanTermVariationsData> projectedVariations =
buildProjectedLoanTermVariatons(loanApplicationTerms,
Review Comment:
Done 😅, I also rebased onto the latest develop
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]