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 d0006a216 FINERACT-1971: update installment accrued portions on charge 
accrual
d0006a216 is described below

commit d0006a2169340138a71c980c622730b94a34b821
Author: adam.magyari <[email protected]>
AuthorDate: Mon Dec 9 17:18:18 2024 +0100

    FINERACT-1971: update installment accrued portions on charge accrual
---
 .../portfolio/loanaccount/domain/Loan.java         |  7 +++++++
 .../LoanChargeProgressiveTest.java                 | 24 ++++++++++++++++++++++
 2 files changed, 31 insertions(+)

diff --git 
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
 
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
index cc8039f15..7107b8d8b 100644
--- 
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
+++ 
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
@@ -769,6 +769,13 @@ public class Loan extends 
AbstractAuditableWithUTCDateTimeCustom<Long> {
                 transactionDate, feeCharges, penaltyCharges, externalId);
 
         Integer installmentNumber = null;
+        final LoanRepaymentScheduleInstallment installmentForCharge = 
this.getRelatedRepaymentScheduleInstallment(loanCharge.getDueDate());
+        if (installmentForCharge != null) {
+            
installmentForCharge.updateAccrualPortion(installmentForCharge.getInterestAccrued(this.getCurrency()),
+                    
installmentForCharge.getFeeAccrued(this.getCurrency()).add(feeCharges),
+                    
installmentForCharge.getPenaltyAccrued(this.getCurrency()).add(penaltyCharges));
+            installmentNumber = installmentForCharge.getInstallmentNumber();
+        }
         final LoanChargePaidBy loanChargePaidBy = new 
LoanChargePaidBy(applyLoanChargeTransaction, loanCharge,
                 loanCharge.getAmount(getCurrency()).getAmount(), 
installmentNumber);
         applyLoanChargeTransaction.getLoanChargesPaid().add(loanChargePaidBy);
diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanChargeProgressiveTest.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanChargeProgressiveTest.java
index d7babdff4..5b7de1503 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanChargeProgressiveTest.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanChargeProgressiveTest.java
@@ -25,7 +25,9 @@ import 
org.apache.fineract.client.models.GetLoansLoanIdResponse;
 import org.apache.fineract.client.models.PostChargesResponse;
 import org.apache.fineract.client.models.PostLoanProductsResponse;
 import org.apache.fineract.client.models.PostLoansResponse;
+import 
org.apache.fineract.infrastructure.configuration.api.GlobalConfigurationConstants;
 import org.apache.fineract.integrationtests.common.ClientHelper;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -65,4 +67,26 @@ public class LoanChargeProgressiveTest extends 
BaseLoanIntegrationTest {
             validateRepaymentPeriod(loanDetails2, 5, LocalDate.of(2024, 10, 
2), 0, 20, 0, 0);
         });
     }
+
+    @Test
+    public void immediateChargeAccrualPostMaturityTest() {
+        runAt("03 October 2024", () -> {
+            executeInlineCOB(loanId);
+            
globalConfigurationHelper.manageConfigurations(GlobalConfigurationConstants.ENABLE_IMMEDIATE_CHARGE_ACCRUAL_POST_MATURITY,
+                    true);
+            final PostChargesResponse chargeResponse = createCharge(20.0d, 
"EUR");
+            addLoanCharge(loanId, chargeResponse.getResourceId(), "03 October 
2024", 20.0d);
+            final GetLoansLoanIdResponse loanDetails = 
loanTransactionHelper.getLoanDetails(loanId);
+            Assertions.assertTrue(
+                    loanDetails.getTransactions().stream().anyMatch(t -> 
t.getType().getAccrual() && t.getAmount().equals(20.0d)));
+        });
+        runAt("04 October 2024", () -> {
+            
globalConfigurationHelper.manageConfigurations(GlobalConfigurationConstants.ENABLE_IMMEDIATE_CHARGE_ACCRUAL_POST_MATURITY,
+                    false);
+            executeInlineCOB(loanId);
+            final GetLoansLoanIdResponse loanDetails = 
loanTransactionHelper.getLoanDetails(loanId);
+            Assertions.assertTrue(
+                    loanDetails.getTransactions().stream().anyMatch(t -> 
t.getType().getAccrual() && t.getAmount().equals(20.0d)));
+        });
+    }
 }

Reply via email to