This is an automated email from the ASF dual-hosted git repository.

adamsaghy pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git


The following commit(s) were added to refs/heads/develop by this push:
     new 2e534d7ba FINERACT-1926: Fix sale error handling
2e534d7ba is described below

commit 2e534d7ba5b27c1734b9437362cca6519ac34346
Author: Adam Saghy <[email protected]>
AuthorDate: Wed Jun 7 19:33:38 2023 +0200

    FINERACT-1926: Fix sale error handling
---
 .../ExternalAssetOwnersWriteServiceImpl.java       | 35 ++++++++--------------
 1 file changed, 13 insertions(+), 22 deletions(-)

diff --git 
a/fineract-investor/src/main/java/org/apache/fineract/investor/service/ExternalAssetOwnersWriteServiceImpl.java
 
b/fineract-investor/src/main/java/org/apache/fineract/investor/service/ExternalAssetOwnersWriteServiceImpl.java
index afb1cc01a..e32f15802 100644
--- 
a/fineract-investor/src/main/java/org/apache/fineract/investor/service/ExternalAssetOwnersWriteServiceImpl.java
+++ 
b/fineract-investor/src/main/java/org/apache/fineract/investor/service/ExternalAssetOwnersWriteServiceImpl.java
@@ -78,7 +78,6 @@ public class ExternalAssetOwnersWriteServiceImpl implements 
ExternalAssetOwnersW
     @Override
     @Transactional
     public CommandProcessingResult saleLoanByLoanId(JsonCommand command) {
-        final JsonElement json = fromApiJsonHelper.parse(command.json());
         Long loanId = command.getLoanId();
         LoanIdAndExternalIdAndStatus loanIdAndExternalIdAndStatus = 
fetchLoanDetails(loanId);
         validateLoanStatus(loanIdAndExternalIdAndStatus);
@@ -107,8 +106,19 @@ public class ExternalAssetOwnersWriteServiceImpl 
implements ExternalAssetOwnersW
         List<ExternalAssetOwnerTransfer> effectiveTransfers = 
externalAssetOwnerTransferRepository
                 
.findEffectiveTransfers(externalAssetOwnerTransfer.getLoanId(), 
externalAssetOwnerTransfer.getSettlementDate());
 
-        if (effectiveTransfers.size() > 0) {
+        if (effectiveTransfers.size() == 2) {
             throw new ExternalAssetOwnerInitiateTransferException("This loan 
cannot be sold, there is already an in progress transfer");
+        } else if (effectiveTransfers.size() == 1) {
+            if 
(ExternalTransferStatus.PENDING.equals(effectiveTransfers.get(0).getStatus())) {
+                throw new ExternalAssetOwnerInitiateTransferException(
+                        "External asset owner transfer is already in PENDING 
state for this loan");
+            } else if 
(ExternalTransferStatus.ACTIVE.equals(effectiveTransfers.get(0).getStatus())) {
+                throw new ExternalAssetOwnerInitiateTransferException(
+                        "This loan cannot be sold, because it is owned by an 
external asset owner");
+            } else {
+                throw new 
ExternalAssetOwnerInitiateTransferException(String.format(
+                        "This loan cannot be sold, because it is incorrect 
state! (transferId = %s)", effectiveTransfers.get(0).getId()));
+            }
         }
     }
 
@@ -170,14 +180,11 @@ public class ExternalAssetOwnersWriteServiceImpl 
implements ExternalAssetOwnersW
 
     private void validateSale(ExternalAssetOwnerTransfer 
externalAssetOwnerTransfer) {
         validateSettlementDate(externalAssetOwnerTransfer);
-        validateTransferStatusForSale(externalAssetOwnerTransfer);
         validateEffectiveTransferForSale(externalAssetOwnerTransfer);
     }
 
     private void validateSettlementDate(ExternalAssetOwnerTransfer 
externalAssetOwnerTransfer) {
-        if 
(externalAssetOwnerTransfer.getSettlementDate().isBefore(ThreadLocalContextUtil.getBusinessDate()))
 {
-            throw new ExternalAssetOwnerInitiateTransferException("Settlement 
date cannot be in the past");
-        }
+        validateSettlementDate(externalAssetOwnerTransfer.getSettlementDate());
     }
 
     private void validateSettlementDate(LocalDate settlementDate) {
@@ -192,22 +199,6 @@ public class ExternalAssetOwnersWriteServiceImpl 
implements ExternalAssetOwnersW
         }
     }
 
-    private void validateTransferStatusForSale(ExternalAssetOwnerTransfer 
externalAssetOwnerTransfer) {
-        Optional<ExternalAssetOwnerTransfer> latestTransferOptional = 
externalAssetOwnerTransferRepository
-                .findLatestByLoanId(externalAssetOwnerTransfer.getLoanId());
-        if (latestTransferOptional.isPresent()) {
-            ExternalAssetOwnerTransfer latestTransfer = 
latestTransferOptional.get();
-            ExternalTransferStatus latestTransferStatus = 
latestTransfer.getStatus();
-            if (latestTransferStatus.equals(ExternalTransferStatus.PENDING)) {
-                throw new ExternalAssetOwnerInitiateTransferException(
-                        "External asset owner transfer is already in PENDING 
state for this loan");
-            } else if 
(latestTransferStatus.equals(ExternalTransferStatus.ACTIVE)) {
-                throw new ExternalAssetOwnerInitiateTransferException(
-                        "This loan cannot be sold, because it is owned by an 
external asset owner");
-            }
-        }
-    }
-
     private ExternalAssetOwnerTransfer createSaleTransfer(Long loanId, String 
apiRequestBodyAsJson, ExternalId externalLoanId) {
         ExternalAssetOwnerTransfer externalAssetOwnerTransfer = new 
ExternalAssetOwnerTransfer();
         LocalDate effectiveFrom = ThreadLocalContextUtil.getBusinessDate();

Reply via email to