diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanTransactionValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanTransactionValidator.java index 317babae0bc..a15efeb0f95 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanTransactionValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanTransactionValidator.java @@ -152,11 +152,9 @@ public void validateDisbursement(JsonCommand command, boolean isAccountTransfer, validateLoanClientIsActive(loan); validateLoanGroupIsActive(loan); - if (loan.isChargedOff() && DateUtils.isBefore(actualDisbursementDate, loan.getChargedOffOnDate())) { - throw new GeneralPlatformDomainRuleException("error.msg.transaction.date.cannot.be.earlier.than.charge.off.date", "Loan: " - + loan.getId() - + " backdated transaction is not allowed. Transaction date cannot be earlier than the charge-off date of the loan", - loan.getId()); + if (loan.isChargedOff()) { + throw new GeneralPlatformDomainRuleException("error.msg.loan.disbursal.not.allowed.on.charged.off", + "Loan: " + loan.getId() + " disbursement is not allowed on charged-off loan."); } boolean isSingleDisburseLoan = !loan.getLoanProduct().isMultiDisburseLoan(); diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java index a7490ce99f8..8f8b7a6ff59 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java @@ -6362,7 +6362,15 @@ public void chargeOff() { .locale("en").dateFormat(DATETIME_PATTERN)); }); assertEquals(403, exception.getResponse().code()); - assertTrue(exception.getMessage().contains("error.msg.transaction.date.cannot.be.earlier.than.charge.off.date")); + assertTrue(exception.getMessage().contains("error.msg.loan.disbursal.not.allowed.on.charged.off")); + + exception = assertThrows(CallFailedRuntimeException.class, () -> { + errorLoanTransactionHelper.disburseLoan((long) loanID, + new PostLoansLoanIdRequest().actualDisbursementDate("7 September 2022").transactionAmount(new BigDecimal("10")) + .locale("en").dateFormat(DATETIME_PATTERN)); + }); + assertEquals(403, exception.getResponse().code()); + assertTrue(exception.getMessage().contains("error.msg.loan.disbursal.not.allowed.on.charged.off")); LOAN_TRANSACTION_HELPER.makeLoanRepayment((long) loanID, new PostLoansLoanIdTransactionsRequest().dateFormat(DATETIME_PATTERN) .transactionDate("07 September 2022").locale("en").transactionAmount(5000.0));