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)));
+ });
+ }
}