2727import org .apache .fineract .infrastructure .core .data .CommandProcessingResultBuilder ;
2828import org .apache .fineract .infrastructure .event .business .domain .loan .LoanApprovedAmountChangedBusinessEvent ;
2929import org .apache .fineract .infrastructure .event .business .service .BusinessEventNotifierService ;
30+ import org .apache .fineract .portfolio .common .service .Validator ;
3031import org .apache .fineract .portfolio .loanaccount .api .LoanApiConstants ;
3132import org .apache .fineract .portfolio .loanaccount .domain .Loan ;
3233import org .apache .fineract .portfolio .loanaccount .domain .LoanApprovedAmountHistory ;
3940@ RequiredArgsConstructor
4041public class LoanApprovedAmountWritePlatformServiceImpl implements LoanApprovedAmountWritePlatformService {
4142
43+ private static final String ERROR_CODE_MUST_BE_DIFFERENT_FROM_CURRENT_APPROVED_AMOUNT = "must.be.different.from.current.approved.amount" ;
44+
4245 private final LoanAssembler loanAssembler ;
4346 private final LoanApprovedAmountValidator loanApprovedAmountValidator ;
4447 private final LoanApprovedAmountHistoryRepository loanApprovedAmountHistoryRepository ;
@@ -58,6 +61,8 @@ public CommandProcessingResult modifyLoanApprovedAmount(final Long loanId, final
5861
5962 BigDecimal newApprovedAmount = command .bigDecimalValueOfParameterNamed (LoanApiConstants .amountParameterName );
6063
64+ validateNewApprovedAmountDiffersFromCurrent (loan , newApprovedAmount );
65+
6166 LoanApprovedAmountHistory loanApprovedAmountHistory = new LoanApprovedAmountHistory (loan .getId (), newApprovedAmount ,
6267 loan .getApprovedPrincipal ());
6368
@@ -115,4 +120,12 @@ public CommandProcessingResult modifyLoanAvailableDisbursementAmount(Long loanId
115120 .with (changes ) //
116121 .build ();
117122 }
123+
124+ private static void validateNewApprovedAmountDiffersFromCurrent (final Loan loan , final BigDecimal newApprovedAmount ) {
125+ if (newApprovedAmount .compareTo (loan .getApprovedPrincipal ()) == 0 ) {
126+ Validator .validateOrThrowDomainViolation ("loan.approved.amount" ,
127+ baseDataValidator -> baseDataValidator .reset ().parameter (LoanApiConstants .amountParameterName ).value (newApprovedAmount )
128+ .failWithCode (ERROR_CODE_MUST_BE_DIFFERENT_FROM_CURRENT_APPROVED_AMOUNT ));
129+ }
130+ }
118131}
0 commit comments