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
@@ -117,4 +122,12 @@ public CommandProcessingResult modifyLoanAvailableDisbursementAmount(Long loanId
117122 .with (changes ) //
118123 .build ();
119124 }
125+
126+ private static void validateNewApprovedAmountDiffersFromCurrent (final Loan loan , final BigDecimal newApprovedAmount ) {
127+ if (newApprovedAmount .compareTo (loan .getApprovedPrincipal ()) == 0 ) {
128+ Validator .validateOrThrowDomainViolation ("loan.approved.amount" ,
129+ baseDataValidator -> baseDataValidator .reset ().parameter (LoanApiConstants .amountParameterName ).value (newApprovedAmount )
130+ .failWithCode (ERROR_CODE_MUST_BE_DIFFERENT_FROM_CURRENT_APPROVED_AMOUNT ));
131+ }
132+ }
120133}
0 commit comments