diff --git a/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/ProgressiveLoanRescheduleRequestDataValidator.java b/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/ProgressiveLoanRescheduleRequestDataValidator.java index 8736ab5c5..4f767f5fc 100644 --- a/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/ProgressiveLoanRescheduleRequestDataValidator.java +++ b/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/ProgressiveLoanRescheduleRequestDataValidator.java @@ -94,9 +94,11 @@ public class ProgressiveLoanRescheduleRequestDataValidator implements LoanResche final LocalDate businessDate = DateUtils.getBusinessLocalDate(); if (rescheduleFromDate != null) { if (hasInterestRateChange && !rescheduleFromDate.isAfter(businessDate)) { - dataValidatorBuilder.reset().parameter(RescheduleLoansApiConstants.rescheduleFromDateParamName).failWithCode( + throw new GeneralPlatformDomainRuleException( "loan.reschedule.interest.rate.change.reschedule.from.date.should.be.in.future", - "Loan Reschedule From date should be in the future."); + String.format("Loan Reschedule From date (%s) for Loan: %s should be in the future.", rescheduleFromDate, + loan.getId()), + loan.getId(), rescheduleFromDate); } if (hasInterestRateChange) { validateInterestRateChangeRescheduleFromDate(loan, rescheduleFromDate); @@ -154,7 +156,9 @@ public class ProgressiveLoanRescheduleRequestDataValidator implements LoanResche if (!rescheduleFromDate.isAfter(DateUtils.getBusinessLocalDate())) { throw new GeneralPlatformDomainRuleException( "loan.reschedule.interest.rate.change.reschedule.from.date.should.be.in.future", - "Loan Reschedule From date should be in the future.", rescheduleFromDate); + String.format("Loan Reschedule From date (%s) for Loan: %s should be in the future.", rescheduleFromDate, + loan.getId()), + loan.getId(), rescheduleFromDate); } } else { installment = loan.getRepaymentScheduleInstallment(rescheduleFromDate); diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanRescheduleRequestTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanRescheduleRequestTest.java index 0f3b14c58..2090b7ba7 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanRescheduleRequestTest.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanRescheduleRequestTest.java @@ -282,6 +282,14 @@ public class LoanRescheduleRequestTest extends BaseLoanIntegrationTest { new PostLoansLoanIdRequest().actualDisbursementDate("15 February 2023").dateFormat(DATETIME_PATTERN) .transactionAmount(BigDecimal.valueOf(500.00)).locale("en")); + exception = assertThrows(CallFailedRuntimeException.class, + () -> loanRescheduleRequestHelper + .createLoanRescheduleRequest(new PostCreateRescheduleLoansRequest().loanId(loanResponse.get().getLoanId()) + .dateFormat(DATETIME_PATTERN).locale("en").submittedOnDate("15 February 2023") + .newInterestRate(BigDecimal.ONE).rescheduleReasonId(1L).rescheduleFromDate("15 February 2023"))); + assertEquals(403, exception.getResponse().code()); + assertTrue(exception.getMessage().contains("loan.reschedule.interest.rate.change.reschedule.from.date.should.be.in.future")); + rescheduleResponse.set(loanRescheduleRequestHelper.createLoanRescheduleRequest(new PostCreateRescheduleLoansRequest() .loanId(loanResponse.get().getLoanId()).dateFormat(DATETIME_PATTERN).locale("en").submittedOnDate("15 February 2023") .newInterestRate(BigDecimal.ONE).rescheduleReasonId(1L).rescheduleFromDate("16 February 2023")));