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 <[email protected]>
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();

Reply via email to