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

adamsaghy 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 a95b6c7d1 FINERACT-1968: Credit balance refund
a95b6c7d1 is described below

commit a95b6c7d1bffa9fa237032d15b43ac9adf4f921e
Author: Adam Saghy <[email protected]>
AuthorDate: Fri Nov 17 16:53:05 2023 +0100

    FINERACT-1968: Credit balance refund
---
 ...tLoanRepaymentScheduleTransactionProcessor.java |  5 +++++
 ...dvancedPaymentScheduleTransactionProcessor.java |  1 +
 ...PaymentAllocationLoanRepaymentScheduleTest.java | 24 ++++++++++------------
 3 files changed, 17 insertions(+), 13 deletions(-)

diff --git 
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/AbstractLoanRepaymentScheduleTransactionProcessor.java
 
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/AbstractLoanRepaymentScheduleTransactionProcessor.java
index 738ad04a1..331fd8878 100644
--- 
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/AbstractLoanRepaymentScheduleTransactionProcessor.java
+++ 
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/AbstractLoanRepaymentScheduleTransactionProcessor.java
@@ -726,6 +726,11 @@ public abstract class 
AbstractLoanRepaymentScheduleTransactionProcessor implemen
         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,
             List<LoanRepaymentScheduleInstallment> installments, final 
Set<LoanCharge> charges) {
         List<LoanTransactionToRepaymentScheduleMapping> transactionMappings = 
new ArrayList<>();
diff --git 
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessor.java
 
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessor.java
index 91bb6094b..071d2f73e 100644
--- 
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessor.java
+++ 
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessor.java
@@ -150,6 +150,7 @@ public class AdvancedPaymentScheduleTransactionProcessor 
extends AbstractLoanRep
             case WRITEOFF -> handleWriteOff(loanTransaction, currency, 
installments);
             case REFUND_FOR_ACTIVE_LOAN -> handleRefund(loanTransaction, 
currency, installments, charges);
             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,
                     WAIVE_INTEREST, RECOVERY_REPAYMENT ->
                 handleRepayment(loanTransaction, currency, installments, 
charges);
diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/AdvancedPaymentAllocationLoanRepaymentScheduleTest.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/AdvancedPaymentAllocationLoanRepaymentScheduleTest.java
index d11694170..b6ca9e83c 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/AdvancedPaymentAllocationLoanRepaymentScheduleTest.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/AdvancedPaymentAllocationLoanRepaymentScheduleTest.java
@@ -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.loanproduct.domain.PaymentAllocationType;
 import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.slf4j.Logger;
@@ -1545,7 +1544,6 @@ public class 
AdvancedPaymentAllocationLoanRepaymentScheduleTest {
     // 6. Merchant issued credit - reversal
     // 7. Payments
     @Test
-    @Disabled("Till the CBR support got implemented")
     public void uc24() {
         try {
             GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, 
responseSpec, Boolean.TRUE);
@@ -1624,20 +1622,20 @@ public class 
AdvancedPaymentAllocationLoanRepaymentScheduleTest {
                     new 
PostLoansLoanIdTransactionsTransactionIdRequest().dateFormat(DATETIME_PATTERN).transactionDate("20
 January 2023")
                             .transactionAmount(0.0).locale("en"));
             loanDetails = 
loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
-            validateLoanSummaryBalances(loanDetails, 400.0, 100.0, 400.0, 
100.0, null);
-            validateRepaymentPeriod(loanDetails, 1, 125.0, 100.0, 25.0, 0.0, 
100.0);
-            validateRepaymentPeriod(loanDetails, 2, 125.0, 0.0, 125.0, 0.0, 
0.0);
-            validateRepaymentPeriod(loanDetails, 3, 125.0, 0.0, 125.0, 0.0, 
0.0);
+            validateLoanSummaryBalances(loanDetails, 400.0, 175.0, 400.0, 
175.0, null);
+            validateRepaymentPeriod(loanDetails, 1, 125.0, 125.0, 0.0, 0.0, 
125.0);
+            validateRepaymentPeriod(loanDetails, 2, 125.0, 50.0, 75.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);
             assertTrue(loanDetails.getStatus().getActive());
 
             loanTransactionHelper.makeLoanRepayment(loanResponse.getLoanId(), 
new PostLoansLoanIdTransactionsRequest()
                     .dateFormat(DATETIME_PATTERN).transactionDate("31 January 
2023").locale("en").transactionAmount(275.0));
             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, 2, 125.0, 125.0, 0.0, 0.0, 
125.0);
-            validateRepaymentPeriod(loanDetails, 3, 125.0, 125.0, 0.0, 0.0, 
0.0);
+            validateRepaymentPeriod(loanDetails, 2, 125.0, 125.0, 0.0, 0.0, 
75.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);
             validateLoanTransaction(loanDetails, 6, 275.0, 275.0, 0.0, 125.0);
             assertTrue(loanDetails.getStatus().getActive());
@@ -1645,12 +1643,12 @@ public class 
AdvancedPaymentAllocationLoanRepaymentScheduleTest {
             loanTransactionHelper.makeLoanRepayment(loanResponse.getLoanId(), 
new PostLoansLoanIdTransactionsRequest()
                     .dateFormat(DATETIME_PATTERN).transactionDate("15 February 
2023").locale("en").transactionAmount(125.0));
             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, 2, 125.0, 125.0, 0.0, 0.0, 
125.0);
-            validateRepaymentPeriod(loanDetails, 3, 125.0, 125.0, 0.0, 0.0, 
0.0);
+            validateRepaymentPeriod(loanDetails, 2, 125.0, 125.0, 0.0, 0.0, 
75.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);
-            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());
         } finally {
             GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, 
responseSpec, Boolean.FALSE);

Reply via email to