FINERACT-2317: Fix updating the available disbursed amount to zero after loan approval

This commit is contained in:
Oleksii Novikov
2025-08-21 11:35:23 +02:00
committed by Adam Saghy
parent 8fe9dbc614
commit 641dbe26d7
6 changed files with 339 additions and 280 deletions
@@ -106,7 +106,7 @@ public final class LoanApprovedAmountValidatorImpl implements LoanApprovedAmount
}
@Override
public void validateLoanAvailableDisbursementAmountModification(JsonCommand command) {
public void validateLoanAvailableDisbursementAmountModification(final JsonCommand command) {
String json = command.json();
if (StringUtils.isBlank(json)) {
throw new InvalidJsonException();
@@ -133,9 +133,8 @@ public final class LoanApprovedAmountValidatorImpl implements LoanApprovedAmount
final Long loanId = command.getLoanId();
Loan loan = this.loanRepository.findById(loanId).orElseThrow(() -> new LoanNotFoundException(loanId));
if (INVALID_LOAN_STATUSES_FOR_APPROVED_AMOUNT_MODIFICATION.contains(loan.getStatus())) {
baseDataValidator.reset()
.failWithCodeNoParameterAddedToErrorCode("loan.status.not.valid.for.available.disbursement.amount.modification");
if (!loan.getStatus().isApproved() && !loan.getStatus().isActive()) {
baseDataValidator.reset().failWithCodeNoParameterAddedToErrorCode("loan.must.be.approved.or.active");
}
BigDecimal maximumThresholdForApprovedAmount;
@@ -154,6 +153,11 @@ public final class LoanApprovedAmountValidatorImpl implements LoanApprovedAmount
baseDataValidator.reset().parameter(LoanApiConstants.amountParameterName)
.failWithCode("can't.be.greater.than.maximum.available.disbursement.amount.calculation");
}
if (MathUtil.isZero(newAvailableDisbursementAmount) && loan.getStatus().isApproved()) {
baseDataValidator.reset().parameter(LoanApiConstants.amountParameterName)
.failWithCode("cannot.be.zero.as.nothing.was.disbursed.yet");
}
});
}
}