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;
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_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);
private void cancelTransfer(Loan loan, ExternalAssetOwnerTransfer pendingTransfer, ExternalTransferSubStatus subStatus) {
updatePendingTransfer(pendingTransfer);
ExternalAssetOwnerTransfer cancelledTransfer = createCancelledTransfer(pendingTransfer, subStatus);
ExternalAssetOwnerTransfer pendingBuybackTransfer = transferDataList.get(1);
updatePendingTransfer(pendingBuybackTransfer);
ExternalAssetOwnerTransfer cancelledBuybackTransfer = createCancelledTransfer(pendingBuybackTransfer, 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));
}
@@ -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();