You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ar...@apache.org on 2023/07/25 12:54:05 UTC

[fineract] branch develop updated: FINERACT-1926: Asset externalization of non-active loans

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

arnold 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 fc9525f96 FINERACT-1926: Asset externalization of non-active loans
fc9525f96 is described below

commit fc9525f966a3c769abd6c6f1bcd3a4f6d1aed26a
Author: Adam Saghy <ad...@gmail.com>
AuthorDate: Tue Jul 25 12:44:28 2023 +0200

    FINERACT-1926: Asset externalization of non-active loans
---
 .../investor/data/ExternalTransferSubStatus.java   |  2 +-
 .../LoanAccountOwnerTransferServiceImpl.java       | 32 ++++++++++------------
 .../InitiateExternalAssetOwnerTransferTest.java    |  5 ++--
 3 files changed, 19 insertions(+), 20 deletions(-)

diff --git a/fineract-investor/src/main/java/org/apache/fineract/investor/data/ExternalTransferSubStatus.java b/fineract-investor/src/main/java/org/apache/fineract/investor/data/ExternalTransferSubStatus.java
index 7899b49a8..76743d866 100644
--- a/fineract-investor/src/main/java/org/apache/fineract/investor/data/ExternalTransferSubStatus.java
+++ b/fineract-investor/src/main/java/org/apache/fineract/investor/data/ExternalTransferSubStatus.java
@@ -19,5 +19,5 @@
 package org.apache.fineract.investor.data;
 
 public enum ExternalTransferSubStatus {
-    BALANCE_ZERO, BALANCE_NEGATIVE, SAMEDAY_TRANSFERS, USER_REQUESTED
+    BALANCE_ZERO, BALANCE_NEGATIVE, SAMEDAY_TRANSFERS, USER_REQUESTED, UNSOLD
 }
diff --git a/fineract-investor/src/main/java/org/apache/fineract/investor/service/LoanAccountOwnerTransferServiceImpl.java b/fineract-investor/src/main/java/org/apache/fineract/investor/service/LoanAccountOwnerTransferServiceImpl.java
index b87625126..69aa5da5a 100644
--- a/fineract-investor/src/main/java/org/apache/fineract/investor/service/LoanAccountOwnerTransferServiceImpl.java
+++ b/fineract-investor/src/main/java/org/apache/fineract/investor/service/LoanAccountOwnerTransferServiceImpl.java
@@ -26,6 +26,7 @@ import static org.apache.fineract.investor.data.ExternalTransferStatus.PENDING;
 import static org.apache.fineract.investor.data.ExternalTransferSubStatus.BALANCE_NEGATIVE;
 import static org.apache.fineract.investor.data.ExternalTransferSubStatus.BALANCE_ZERO;
 import static org.apache.fineract.investor.data.ExternalTransferSubStatus.SAMEDAY_TRANSFERS;
+import static org.apache.fineract.investor.data.ExternalTransferSubStatus.UNSOLD;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
@@ -67,39 +68,36 @@ public class LoanAccountOwnerTransferServiceImpl implements LoanAccountOwnerTran
 
         if (transferDataList.size() == 2) {
             ExternalTransferSubStatus subStatus;
+            ExternalAssetOwnerTransfer pendingSaleTransfer = transferDataList.get(0);
+            ExternalAssetOwnerTransfer pendingBuybackTransfer = transferDataList.get(1);
             if (isSameDayTransfers(transferDataList)) {
                 subStatus = SAMEDAY_TRANSFERS;
+                cancelTransfer(loan, pendingSaleTransfer, subStatus);
+                cancelTransfer(loan, pendingBuybackTransfer, subStatus);
             } else {
-                subStatus = isBiggerThanZero(loan.getTotalOverpaid()) ? BALANCE_NEGATIVE : BALANCE_ZERO;
+                declineTransfer(loan, pendingSaleTransfer);
+                cancelTransfer(loan, pendingBuybackTransfer, UNSOLD);
             }
-            cancelPendingSaleAndBuybackTransfer(loan, transferDataList, subStatus);
         } else if (transferDataList.size() == 1) {
             ExternalAssetOwnerTransfer transfer = transferDataList.get(0);
             if (PENDING.equals(transfer.getStatus())) {
-                declinePendingSaleTransfer(loan, transfer);
+                declineTransfer(loan, transfer);
             } else if (BUYBACK.equals(transfer.getStatus())) {
                 executePendingBuybackTransfer(loan, transfer);
             }
         }
     }
 
-    private void cancelPendingSaleAndBuybackTransfer(Loan loan, List<ExternalAssetOwnerTransfer> transferDataList,
-            ExternalTransferSubStatus subStatus) {
-        ExternalAssetOwnerTransfer pendingSaleTransfer = transferDataList.get(0);
-        updatePendingTransfer(pendingSaleTransfer);
-        ExternalAssetOwnerTransfer cancelledSaleTransfer = createCancelledTransfer(pendingSaleTransfer, subStatus);
-
-        ExternalAssetOwnerTransfer pendingBuybackTransfer = transferDataList.get(1);
-        updatePendingTransfer(pendingBuybackTransfer);
-        ExternalAssetOwnerTransfer cancelledBuybackTransfer = createCancelledTransfer(pendingBuybackTransfer, subStatus);
+    private void cancelTransfer(Loan loan, ExternalAssetOwnerTransfer pendingTransfer, ExternalTransferSubStatus subStatus) {
+        updatePendingTransfer(pendingTransfer);
+        ExternalAssetOwnerTransfer cancelledTransfer = createCancelledTransfer(pendingTransfer, subStatus);
 
-        businessEventNotifierService.notifyPostBusinessEvent(new LoanOwnershipTransferBusinessEvent(cancelledSaleTransfer, loan));
-        businessEventNotifierService.notifyPostBusinessEvent(new LoanOwnershipTransferBusinessEvent(cancelledBuybackTransfer, loan));
+        businessEventNotifierService.notifyPostBusinessEvent(new LoanOwnershipTransferBusinessEvent(cancelledTransfer, loan));
     }
 
-    private void declinePendingSaleTransfer(Loan loan, ExternalAssetOwnerTransfer pendingSaleTransfer) {
-        ExternalAssetOwnerTransfer declinedSaleTransfer = createDeclinedTransfer(pendingSaleTransfer, loan);
-        updatePendingTransfer(pendingSaleTransfer);
+    private void declineTransfer(Loan loan, ExternalAssetOwnerTransfer pendingTransfer) {
+        ExternalAssetOwnerTransfer declinedSaleTransfer = createDeclinedTransfer(pendingTransfer, loan);
+        updatePendingTransfer(pendingTransfer);
 
         businessEventNotifierService.notifyPostBusinessEvent(new LoanOwnershipTransferBusinessEvent(declinedSaleTransfer, loan));
     }
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/InitiateExternalAssetOwnerTransferTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/InitiateExternalAssetOwnerTransferTest.java
index bb745e5bb..646d455ce 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/InitiateExternalAssetOwnerTransferTest.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/InitiateExternalAssetOwnerTransferTest.java
@@ -25,6 +25,7 @@ import static org.apache.fineract.client.models.ExternalTransferData.StatusEnum.
 import static org.apache.fineract.client.models.ExternalTransferData.StatusEnum.PENDING;
 import static org.apache.fineract.client.models.ExternalTransferData.SubStatusEnum.BALANCE_ZERO;
 import static org.apache.fineract.client.models.ExternalTransferData.SubStatusEnum.SAMEDAY_TRANSFERS;
+import static org.apache.fineract.client.models.ExternalTransferData.SubStatusEnum.UNSOLD;
 import static org.apache.fineract.infrastructure.businessdate.domain.BusinessDateType.BUSINESS_DATE;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -575,8 +576,8 @@ public class InitiateExternalAssetOwnerTransferTest {
                     ExpectedExternalTransferData.expected(BUYBACK, buybackTransferResponse.getResourceExternalId(), "2020-03-06",
                             "2020-03-02", "2020-03-02"),
                     ExpectedExternalTransferData.expected(CANCELLED, buybackTransferResponse.getResourceExternalId(), "2020-03-06",
-                            "2020-03-02", "2020-03-02", BALANCE_ZERO),
-                    ExpectedExternalTransferData.expected(CANCELLED, saleTransferResponse.getResourceExternalId(), "2020-03-04",
+                            "2020-03-02", "2020-03-02", UNSOLD),
+                    ExpectedExternalTransferData.expected(DECLINED, saleTransferResponse.getResourceExternalId(), "2020-03-04",
                             "2020-03-02", "2020-03-02", BALANCE_ZERO));
         } finally {
             cleanUpAndRestoreBusinessDate();