FINERACT-1968: Credit balance refund
This commit is contained in:
+5
@@ -726,6 +726,11 @@ public abstract class AbstractLoanRepaymentScheduleTransactionProcessor implemen
|
|||||||
processCreditTransaction(loanTransaction, overpaidAmount, currency, installments);
|
processCreditTransaction(loanTransaction, overpaidAmount, currency, installments);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void handleCreditBalanceRefund(LoanTransaction loanTransaction, MonetaryCurrency currency, Money overpaidAmount,
|
||||||
|
List<LoanRepaymentScheduleInstallment> installments) {
|
||||||
|
processCreditTransaction(loanTransaction, overpaidAmount, currency, installments);
|
||||||
|
}
|
||||||
|
|
||||||
protected void handleRefund(LoanTransaction loanTransaction, MonetaryCurrency currency,
|
protected void handleRefund(LoanTransaction loanTransaction, MonetaryCurrency currency,
|
||||||
List<LoanRepaymentScheduleInstallment> installments, final Set<LoanCharge> charges) {
|
List<LoanRepaymentScheduleInstallment> installments, final Set<LoanCharge> charges) {
|
||||||
List<LoanTransactionToRepaymentScheduleMapping> transactionMappings = new ArrayList<>();
|
List<LoanTransactionToRepaymentScheduleMapping> transactionMappings = new ArrayList<>();
|
||||||
|
|||||||
+1
@@ -150,6 +150,7 @@ public class AdvancedPaymentScheduleTransactionProcessor extends AbstractLoanRep
|
|||||||
case WRITEOFF -> handleWriteOff(loanTransaction, currency, installments);
|
case WRITEOFF -> handleWriteOff(loanTransaction, currency, installments);
|
||||||
case REFUND_FOR_ACTIVE_LOAN -> handleRefund(loanTransaction, currency, installments, charges);
|
case REFUND_FOR_ACTIVE_LOAN -> handleRefund(loanTransaction, currency, installments, charges);
|
||||||
case CHARGEBACK -> handleChargeback(loanTransaction, currency, overpaidAmount, installments);
|
case CHARGEBACK -> handleChargeback(loanTransaction, currency, overpaidAmount, installments);
|
||||||
|
case CREDIT_BALANCE_REFUND -> handleCreditBalanceRefund(loanTransaction, currency, overpaidAmount, installments);
|
||||||
case REPAYMENT, MERCHANT_ISSUED_REFUND, PAYOUT_REFUND, GOODWILL_CREDIT, CHARGE_REFUND, CHARGE_ADJUSTMENT, DOWN_PAYMENT,
|
case REPAYMENT, MERCHANT_ISSUED_REFUND, PAYOUT_REFUND, GOODWILL_CREDIT, CHARGE_REFUND, CHARGE_ADJUSTMENT, DOWN_PAYMENT,
|
||||||
WAIVE_INTEREST, RECOVERY_REPAYMENT ->
|
WAIVE_INTEREST, RECOVERY_REPAYMENT ->
|
||||||
handleRepayment(loanTransaction, currency, installments, charges);
|
handleRepayment(loanTransaction, currency, installments, charges);
|
||||||
|
|||||||
+11
-13
@@ -71,7 +71,6 @@ import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanSchedul
|
|||||||
import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleType;
|
import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleType;
|
||||||
import org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationType;
|
import org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationType;
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
import org.junit.jupiter.api.Disabled;
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@@ -1545,7 +1544,6 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
// 6. Merchant issued credit - reversal
|
// 6. Merchant issued credit - reversal
|
||||||
// 7. Payments
|
// 7. Payments
|
||||||
@Test
|
@Test
|
||||||
@Disabled("Till the CBR support got implemented")
|
|
||||||
public void uc24() {
|
public void uc24() {
|
||||||
try {
|
try {
|
||||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||||
@@ -1624,20 +1622,20 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
new PostLoansLoanIdTransactionsTransactionIdRequest().dateFormat(DATETIME_PATTERN).transactionDate("20 January 2023")
|
new PostLoansLoanIdTransactionsTransactionIdRequest().dateFormat(DATETIME_PATTERN).transactionDate("20 January 2023")
|
||||||
.transactionAmount(0.0).locale("en"));
|
.transactionAmount(0.0).locale("en"));
|
||||||
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
validateLoanSummaryBalances(loanDetails, 400.0, 100.0, 400.0, 100.0, null);
|
validateLoanSummaryBalances(loanDetails, 400.0, 175.0, 400.0, 175.0, null);
|
||||||
validateRepaymentPeriod(loanDetails, 1, 125.0, 100.0, 25.0, 0.0, 100.0);
|
validateRepaymentPeriod(loanDetails, 1, 125.0, 125.0, 0.0, 0.0, 125.0);
|
||||||
validateRepaymentPeriod(loanDetails, 2, 125.0, 0.0, 125.0, 0.0, 0.0);
|
validateRepaymentPeriod(loanDetails, 2, 125.0, 50.0, 75.0, 0.0, 0.0);
|
||||||
validateRepaymentPeriod(loanDetails, 3, 125.0, 0.0, 125.0, 0.0, 0.0);
|
validateRepaymentPeriod(loanDetails, 3, 200.0, 0.0, 200.0, 0.0, 0.0);
|
||||||
validateRepaymentPeriod(loanDetails, 4, 125.0, 0.0, 125.0, 0.0, 0.0);
|
validateRepaymentPeriod(loanDetails, 4, 125.0, 0.0, 125.0, 0.0, 0.0);
|
||||||
assertTrue(loanDetails.getStatus().getActive());
|
assertTrue(loanDetails.getStatus().getActive());
|
||||||
|
|
||||||
loanTransactionHelper.makeLoanRepayment(loanResponse.getLoanId(), new PostLoansLoanIdTransactionsRequest()
|
loanTransactionHelper.makeLoanRepayment(loanResponse.getLoanId(), new PostLoansLoanIdTransactionsRequest()
|
||||||
.dateFormat(DATETIME_PATTERN).transactionDate("31 January 2023").locale("en").transactionAmount(275.0));
|
.dateFormat(DATETIME_PATTERN).transactionDate("31 January 2023").locale("en").transactionAmount(275.0));
|
||||||
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
validateLoanSummaryBalances(loanDetails, 125.0, 375.0, 125.0, 375.0, null);
|
validateLoanSummaryBalances(loanDetails, 125.0, 450.0, 125.0, 450.0, null);
|
||||||
validateRepaymentPeriod(loanDetails, 1, 125.0, 125.0, 0.0, 0.0, 125.0);
|
validateRepaymentPeriod(loanDetails, 1, 125.0, 125.0, 0.0, 0.0, 125.0);
|
||||||
validateRepaymentPeriod(loanDetails, 2, 125.0, 125.0, 0.0, 0.0, 125.0);
|
validateRepaymentPeriod(loanDetails, 2, 125.0, 125.0, 0.0, 0.0, 75.0);
|
||||||
validateRepaymentPeriod(loanDetails, 3, 125.0, 125.0, 0.0, 0.0, 0.0);
|
validateRepaymentPeriod(loanDetails, 3, 200.0, 200.0, 0.0, 0.0, 0.0);
|
||||||
validateRepaymentPeriod(loanDetails, 4, 125.0, 0.0, 125.0, 0.0, 0.0);
|
validateRepaymentPeriod(loanDetails, 4, 125.0, 0.0, 125.0, 0.0, 0.0);
|
||||||
validateLoanTransaction(loanDetails, 6, 275.0, 275.0, 0.0, 125.0);
|
validateLoanTransaction(loanDetails, 6, 275.0, 275.0, 0.0, 125.0);
|
||||||
assertTrue(loanDetails.getStatus().getActive());
|
assertTrue(loanDetails.getStatus().getActive());
|
||||||
@@ -1645,12 +1643,12 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
loanTransactionHelper.makeLoanRepayment(loanResponse.getLoanId(), new PostLoansLoanIdTransactionsRequest()
|
loanTransactionHelper.makeLoanRepayment(loanResponse.getLoanId(), new PostLoansLoanIdTransactionsRequest()
|
||||||
.dateFormat(DATETIME_PATTERN).transactionDate("15 February 2023").locale("en").transactionAmount(125.0));
|
.dateFormat(DATETIME_PATTERN).transactionDate("15 February 2023").locale("en").transactionAmount(125.0));
|
||||||
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
validateLoanSummaryBalances(loanDetails, 0.0, 500.0, 0.0, 500.0, null);
|
validateLoanSummaryBalances(loanDetails, 0.0, 575.0, 0.0, 575.0, null);
|
||||||
validateRepaymentPeriod(loanDetails, 1, 125.0, 125.0, 0.0, 0.0, 125.0);
|
validateRepaymentPeriod(loanDetails, 1, 125.0, 125.0, 0.0, 0.0, 125.0);
|
||||||
validateRepaymentPeriod(loanDetails, 2, 125.0, 125.0, 0.0, 0.0, 125.0);
|
validateRepaymentPeriod(loanDetails, 2, 125.0, 125.0, 0.0, 0.0, 75.0);
|
||||||
validateRepaymentPeriod(loanDetails, 3, 125.0, 125.0, 0.0, 0.0, 0.0);
|
validateRepaymentPeriod(loanDetails, 3, 200.0, 200.0, 0.0, 0.0, 0.0);
|
||||||
validateRepaymentPeriod(loanDetails, 4, 125.0, 125.0, 0.0, 0.0, 0.0);
|
validateRepaymentPeriod(loanDetails, 4, 125.0, 125.0, 0.0, 0.0, 0.0);
|
||||||
validateLoanTransaction(loanDetails, 5, 125.0, 125.0, 0.0, 0.0);
|
validateLoanTransaction(loanDetails, 7, 125.0, 125.0, 0.0, 0.0);
|
||||||
assertTrue(loanDetails.getStatus().getClosedObligationsMet());
|
assertTrue(loanDetails.getStatus().getClosedObligationsMet());
|
||||||
} finally {
|
} finally {
|
||||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||||
|
|||||||
Reference in New Issue
Block a user