FINERACT-1926: Asset externalization of non-active loans

This commit is contained in:
Adam Saghy
2023-07-25 14:53:58 +02:00
committed by Arnold Gálovics
parent d11ca18cb2
commit fc9525f966
3 changed files with 19 additions and 20 deletions
@@ -19,5 +19,5 @@
package org.apache.fineract.investor.data; package org.apache.fineract.investor.data;
public enum ExternalTransferSubStatus { public enum ExternalTransferSubStatus {
BALANCE_ZERO, BALANCE_NEGATIVE, SAMEDAY_TRANSFERS, USER_REQUESTED BALANCE_ZERO, BALANCE_NEGATIVE, SAMEDAY_TRANSFERS, USER_REQUESTED, UNSOLD
} }
@@ -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_NEGATIVE;
import static org.apache.fineract.investor.data.ExternalTransferSubStatus.BALANCE_ZERO; 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.SAMEDAY_TRANSFERS;
import static org.apache.fineract.investor.data.ExternalTransferSubStatus.UNSOLD;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
@@ -67,39 +68,36 @@ public class LoanAccountOwnerTransferServiceImpl implements LoanAccountOwnerTran
if (transferDataList.size() == 2) { if (transferDataList.size() == 2) {
ExternalTransferSubStatus subStatus; ExternalTransferSubStatus subStatus;
ExternalAssetOwnerTransfer pendingSaleTransfer = transferDataList.get(0);
ExternalAssetOwnerTransfer pendingBuybackTransfer = transferDataList.get(1);
if (isSameDayTransfers(transferDataList)) { if (isSameDayTransfers(transferDataList)) {
subStatus = SAMEDAY_TRANSFERS; subStatus = SAMEDAY_TRANSFERS;
cancelTransfer(loan, pendingSaleTransfer, subStatus);
cancelTransfer(loan, pendingBuybackTransfer, subStatus);
} else { } 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) { } else if (transferDataList.size() == 1) {
ExternalAssetOwnerTransfer transfer = transferDataList.get(0); ExternalAssetOwnerTransfer transfer = transferDataList.get(0);
if (PENDING.equals(transfer.getStatus())) { if (PENDING.equals(transfer.getStatus())) {
declinePendingSaleTransfer(loan, transfer); declineTransfer(loan, transfer);
} else if (BUYBACK.equals(transfer.getStatus())) { } else if (BUYBACK.equals(transfer.getStatus())) {
executePendingBuybackTransfer(loan, transfer); executePendingBuybackTransfer(loan, transfer);
} }
} }
} }
private void cancelPendingSaleAndBuybackTransfer(Loan loan, List<ExternalAssetOwnerTransfer> transferDataList, private void cancelTransfer(Loan loan, ExternalAssetOwnerTransfer pendingTransfer, ExternalTransferSubStatus subStatus) {
ExternalTransferSubStatus subStatus) { updatePendingTransfer(pendingTransfer);
ExternalAssetOwnerTransfer pendingSaleTransfer = transferDataList.get(0); ExternalAssetOwnerTransfer cancelledTransfer = createCancelledTransfer(pendingTransfer, subStatus);
updatePendingTransfer(pendingSaleTransfer);
ExternalAssetOwnerTransfer cancelledSaleTransfer = createCancelledTransfer(pendingSaleTransfer, subStatus);
ExternalAssetOwnerTransfer pendingBuybackTransfer = transferDataList.get(1); businessEventNotifierService.notifyPostBusinessEvent(new LoanOwnershipTransferBusinessEvent(cancelledTransfer, loan));
updatePendingTransfer(pendingBuybackTransfer);
ExternalAssetOwnerTransfer cancelledBuybackTransfer = createCancelledTransfer(pendingBuybackTransfer, subStatus);
businessEventNotifierService.notifyPostBusinessEvent(new LoanOwnershipTransferBusinessEvent(cancelledSaleTransfer, loan));
businessEventNotifierService.notifyPostBusinessEvent(new LoanOwnershipTransferBusinessEvent(cancelledBuybackTransfer, loan));
} }
private void declinePendingSaleTransfer(Loan loan, ExternalAssetOwnerTransfer pendingSaleTransfer) { private void declineTransfer(Loan loan, ExternalAssetOwnerTransfer pendingTransfer) {
ExternalAssetOwnerTransfer declinedSaleTransfer = createDeclinedTransfer(pendingSaleTransfer, loan); ExternalAssetOwnerTransfer declinedSaleTransfer = createDeclinedTransfer(pendingTransfer, loan);
updatePendingTransfer(pendingSaleTransfer); updatePendingTransfer(pendingTransfer);
businessEventNotifierService.notifyPostBusinessEvent(new LoanOwnershipTransferBusinessEvent(declinedSaleTransfer, loan)); businessEventNotifierService.notifyPostBusinessEvent(new LoanOwnershipTransferBusinessEvent(declinedSaleTransfer, loan));
} }
@@ -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.StatusEnum.PENDING;
import static org.apache.fineract.client.models.ExternalTransferData.SubStatusEnum.BALANCE_ZERO; 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.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.apache.fineract.infrastructure.businessdate.domain.BusinessDateType.BUSINESS_DATE;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -575,8 +576,8 @@ public class InitiateExternalAssetOwnerTransferTest {
ExpectedExternalTransferData.expected(BUYBACK, buybackTransferResponse.getResourceExternalId(), "2020-03-06", ExpectedExternalTransferData.expected(BUYBACK, buybackTransferResponse.getResourceExternalId(), "2020-03-06",
"2020-03-02", "2020-03-02"), "2020-03-02", "2020-03-02"),
ExpectedExternalTransferData.expected(CANCELLED, buybackTransferResponse.getResourceExternalId(), "2020-03-06", ExpectedExternalTransferData.expected(CANCELLED, buybackTransferResponse.getResourceExternalId(), "2020-03-06",
"2020-03-02", "2020-03-02", BALANCE_ZERO), "2020-03-02", "2020-03-02", UNSOLD),
ExpectedExternalTransferData.expected(CANCELLED, saleTransferResponse.getResourceExternalId(), "2020-03-04", ExpectedExternalTransferData.expected(DECLINED, saleTransferResponse.getResourceExternalId(), "2020-03-04",
"2020-03-02", "2020-03-02", BALANCE_ZERO)); "2020-03-02", "2020-03-02", BALANCE_ZERO));
} finally { } finally {
cleanUpAndRestoreBusinessDate(); cleanUpAndRestoreBusinessDate();