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 21425f50c4 FINERACT-2275: Review whether reprocessing accruals are in
fact needed or not after recalculated interest on loan
21425f50c4 is described below
commit 21425f50c4eae4a2331162f3128a67dc03ba7422
Author: Soma Sörös <[email protected]>
AuthorDate: Thu May 29 14:15:03 2025 +0200
FINERACT-2275: Review whether reprocessing accruals are in fact needed or
not after recalculated interest on loan
---
.../resources/features/LoanAccrualActivity.feature | 171 +++++++++++++++++++++
.../loanaccount/service/LoanScheduleService.java | 11 +-
.../LoanWritePlatformServiceJpaRepositoryImpl.java | 35 +++--
3 files changed, 200 insertions(+), 17 deletions(-)
diff --git
a/fineract-e2e-tests-runner/src/test/resources/features/LoanAccrualActivity.feature
b/fineract-e2e-tests-runner/src/test/resources/features/LoanAccrualActivity.feature
index 1ab6ee6559..d766312ace 100644
---
a/fineract-e2e-tests-runner/src/test/resources/features/LoanAccrualActivity.feature
+++
b/fineract-e2e-tests-runner/src/test/resources/features/LoanAccrualActivity.feature
@@ -1813,6 +1813,177 @@ Feature: LoanAccrualActivity
| 06 January 2024 | Accrual | 0.24 | 0.0 | 0.24 |
0.0 | 0.0 | 0.0 | false | false |
| 07 January 2024 | Accrual | 0.26 | 0.0 | 0.26 |
0.0 | 0.0 | 0.0 | false | false |
+ @TestRailId:3709
+ Scenario: Verify accrual and accrual activity after backdated payoff with
overdue installments on progressive loan
+ When Admin sets the business date to "01 January 2024"
+ When Admin creates a client with random data
+ When Admin creates a fully customized loan with the following data:
+ | LoanProduct
| submitted on date | with Principal | ANNUAL interest
rate % | interest type | interest calculation period | amortization type |
loanTermFrequency | loanTermFrequencyType | repaymentEvery |
repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment |
graceOnInterestPayment | interest free period | Payment strategy |
+ |
LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALCULATION_DAILY_ACCRUAL_ACTIVITY_POSTING
| 01 January 2024 | 1000 | 49.99 |
DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 4
| WEEKS | 1 | WEEKS | 4
| 0 | 0 | 0
| ADVANCED_PAYMENT_ALLOCATION |
+ And Admin successfully approves the loan on "01 January 2024" with "1000"
amount and expected disbursement date on "01 January 2024"
+ When Admin successfully disburse the loan on "01 January 2024" with "1000"
EUR transaction amount
+ When Admin sets the business date to "02 January 2024"
+ When Admin runs inline COB job for Loan
+ When Admin sets the business date to "19 January 2024"
+ When Admin runs inline COB job for Loan
+ Then Loan Transactions tab has the following data:
+ | Transaction date | Transaction Type | Amount | Principal |
Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+ | 01 January 2024 | Disbursement | 1000.0 | 0.0 | 0.0
| 0.0 | 0.0 | 1000.0 | false | false |
+ | 02 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 03 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 04 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 05 January 2024 | Accrual | 1.38 | 0.0 | 1.38
| 0.0 | 0.0 | 0.0 | false | false |
+ | 06 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 07 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 08 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 08 January 2024 | Accrual Activity | 9.72 | 0.0 | 9.72
| 0.0 | 0.0 | 0.0 | false | false |
+ | 09 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 10 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 11 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 12 January 2024 | Accrual | 1.38 | 0.0 | 1.38
| 0.0 | 0.0 | 0.0 | false | false |
+ | 13 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 14 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 15 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 15 January 2024 | Accrual Activity | 9.72 | 0.0 | 9.72
| 0.0 | 0.0 | 0.0 | false | false |
+ | 16 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 17 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 18 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ When Loan Pay-off is made on "11 January 2024"
+ Then Loan Transactions tab has the following data:
+ | Transaction date | Transaction Type | Amount | Principal |
Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+ | 01 January 2024 | Disbursement | 1000.0 | 0.0 | 0.0
| 0.0 | 0.0 | 1000.0 | false | false |
+ | 02 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 03 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 04 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 05 January 2024 | Accrual | 1.38 | 0.0 | 1.38
| 0.0 | 0.0 | 0.0 | false | false |
+ | 06 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 07 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 08 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 08 January 2024 | Accrual Activity | 9.72 | 0.0 | 9.72
| 0.0 | 0.0 | 0.0 | false | false |
+ | 09 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 10 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 11 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 11 January 2024 | Accrual Activity | 4.17 | 0.0 | 4.17
| 0.0 | 0.0 | 0.0 | false | false |
+ | 11 January 2024 | Repayment | 1013.89 | 1000.0 |
13.89 | 0.0 | 0.0 | 0.0 | false | false |
+ | 12 January 2024 | Accrual | 1.38 | 0.0 | 1.38
| 0.0 | 0.0 | 0.0 | false | false |
+ | 13 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 14 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 15 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 16 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 17 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 18 January 2024 | Accrual | 1.39 | 0.0 | 1.39
| 0.0 | 0.0 | 0.0 | false | false |
+ | 19 January 2024 | Accrual Adjustment | 9.72 | 0.0 | 9.72
| 0.0 | 0.0 | 0.0 | false | false |
+
+ @TestRailId:3710
+ Scenario: Verify accrual and accrual activity after backdated payoff with
overdue installments on cumulative loan
+ When Admin sets the business date to "01 January 2024"
+ When Admin creates a client with random data
+ When Admin creates a fully customized loan with the following data:
+ | LoanProduct
| submitted on date | with Principal | ANNUAL interest rate % |
interest type | interest calculation period | amortization type |
loanTermFrequency | loanTermFrequencyType | repaymentEvery |
repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment |
graceOnInterestPayment | interest free period | Payment strategy
|
+ |
LP1_INTEREST_DECLINING_BALANCE_DAILY_RECALCULATION_COMPOUNDING_NONE_ACCRUAL_ACTIVITY
| 01 January 2024 | 1000 | 12 |
DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 20
| DAYS | 5 | DAYS | 4
| 0 | 0 | 0
| PENALTIES_FEES_INTEREST_PRINCIPAL_ORDER |
+ And Admin successfully approves the loan on "01 January 2024" with "1000"
amount and expected disbursement date on "01 January 2024"
+ When Admin successfully disburse the loan on "01 January 2024" with "1000"
EUR transaction amount
+ When Admin sets the business date to "02 January 2024"
+ When Admin runs inline COB job for Loan
+ When Admin sets the business date to "16 January 2024"
+ When Admin runs inline COB job for Loan
+ Then Loan Transactions tab has the following data:
+ | Transaction date | Transaction Type | Amount | Principal |
Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+ | 01 January 2024 | Disbursement | 1000.0 | 0.0 | 0.0
| 0.0 | 0.0 | 1000.0 | false | false |
+ | 02 January 2024 | Accrual | 0.33 | 0.0 | 0.33
| 0.0 | 0.0 | 0.0 | false | false |
+ | 03 January 2024 | Accrual | 0.33 | 0.0 | 0.33
| 0.0 | 0.0 | 0.0 | false | false |
+ | 04 January 2024 | Accrual | 0.32 | 0.0 | 0.32
| 0.0 | 0.0 | 0.0 | false | false |
+ | 05 January 2024 | Accrual | 0.33 | 0.0 | 0.33
| 0.0 | 0.0 | 0.0 | false | false |
+ | 06 January 2024 | Accrual | 0.33 | 0.0 | 0.33
| 0.0 | 0.0 | 0.0 | false | false |
+ | 06 January 2024 | Accrual Activity | 1.64 | 0.0 | 1.64
| 0.0 | 0.0 | 0.0 | false | false |
+ | 07 January 2024 | Accrual | 0.28 | 0.0 | 0.28
| 0.0 | 0.0 | 0.0 | false | false |
+ | 08 January 2024 | Accrual | 0.31 | 0.0 | 0.31
| 0.0 | 0.0 | 0.0 | false | false |
+ | 09 January 2024 | Accrual | 0.35 | 0.0 | 0.35
| 0.0 | 0.0 | 0.0 | false | false |
+ | 10 January 2024 | Accrual | 0.37 | 0.0 | 0.37
| 0.0 | 0.0 | 0.0 | false | false |
+ | 11 January 2024 | Accrual | 0.33 | 0.0 | 0.33
| 0.0 | 0.0 | 0.0 | false | false |
+ | 11 January 2024 | Accrual Activity | 1.64 | 0.0 | 1.64
| 0.0 | 0.0 | 0.0 | false | false |
+ | 12 January 2024 | Accrual | 0.23 | 0.0 | 0.23
| 0.0 | 0.0 | 0.0 | false | false |
+ | 13 January 2024 | Accrual | 0.3 | 0.0 | 0.3
| 0.0 | 0.0 | 0.0 | false | false |
+ | 14 January 2024 | Accrual | 0.36 | 0.0 | 0.36
| 0.0 | 0.0 | 0.0 | false | false |
+ | 15 January 2024 | Accrual | 0.42 | 0.0 | 0.42
| 0.0 | 0.0 | 0.0 | false | false |
+ When Loan Pay-off is made on "11 January 2024"
+ Then Loan Transactions tab has the following data:
+ | Transaction date | Transaction Type | Amount | Principal |
Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+ | 01 January 2024 | Disbursement | 1000.0 | 0.0 | 0.0
| 0.0 | 0.0 | 1000.0 | false | false |
+ | 02 January 2024 | Accrual | 0.33 | 0.0 | 0.33
| 0.0 | 0.0 | 0.0 | false | false |
+ | 03 January 2024 | Accrual | 0.33 | 0.0 | 0.33
| 0.0 | 0.0 | 0.0 | false | false |
+ | 04 January 2024 | Accrual | 0.32 | 0.0 | 0.32
| 0.0 | 0.0 | 0.0 | false | false |
+ | 05 January 2024 | Accrual | 0.33 | 0.0 | 0.33
| 0.0 | 0.0 | 0.0 | false | false |
+ | 06 January 2024 | Accrual | 0.33 | 0.0 | 0.33
| 0.0 | 0.0 | 0.0 | false | false |
+ | 06 January 2024 | Accrual Activity | 1.64 | 0.0 | 1.64
| 0.0 | 0.0 | 0.0 | false | false |
+ | 07 January 2024 | Accrual | 0.28 | 0.0 | 0.28
| 0.0 | 0.0 | 0.0 | false | false |
+ | 08 January 2024 | Accrual | 0.31 | 0.0 | 0.31
| 0.0 | 0.0 | 0.0 | false | false |
+ | 09 January 2024 | Accrual | 0.35 | 0.0 | 0.35
| 0.0 | 0.0 | 0.0 | false | false |
+ | 10 January 2024 | Accrual | 0.37 | 0.0 | 0.37
| 0.0 | 0.0 | 0.0 | false | false |
+ | 11 January 2024 | Accrual | 0.33 | 0.0 | 0.33
| 0.0 | 0.0 | 0.0 | false | false |
+ | 11 January 2024 | Accrual Activity | 1.64 | 0.0 | 1.64
| 0.0 | 0.0 | 0.0 | false | false |
+ | 11 January 2024 | Repayment | 1003.28 | 1000.0 | 3.28
| 0.0 | 0.0 | 0.0 | false | false |
+
+ @TestRailId:3711
+ Scenario: Verify accrual and accrual activity after backdated payoff on
cumulative loan
+ When Admin sets the business date to "01 January 2024"
+ When Admin creates a client with random data
+ When Admin creates a fully customized loan with the following data:
+ | LoanProduct
| submitted on date | with Principal | ANNUAL interest rate % |
interest type | interest calculation period | amortization type |
loanTermFrequency | loanTermFrequencyType | repaymentEvery |
repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment |
graceOnInterestPayment | interest free period | Payment strategy
|
+ |
LP1_INTEREST_DECLINING_BALANCE_DAILY_RECALCULATION_COMPOUNDING_NONE_ACCRUAL_ACTIVITY
| 01 January 2024 | 1000 | 12 |
DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 20
| DAYS | 5 | DAYS | 4
| 0 | 0 | 0
| PENALTIES_FEES_INTEREST_PRINCIPAL_ORDER |
+ And Admin successfully approves the loan on "01 January 2024" with "1000"
amount and expected disbursement date on "01 January 2024"
+ When Admin successfully disburse the loan on "01 January 2024" with "1000"
EUR transaction amount
+ When Admin sets the business date to "02 January 2024"
+ When Admin runs inline COB job for Loan
+ When Admin sets the business date to "06 January 2024"
+ When Admin runs inline COB job for Loan
+ And Customer makes "AUTOPAY" repayment on "06 January 2024" with 251.0 EUR
transaction amount
+ When Admin sets the business date to "11 January 2024"
+ When Admin runs inline COB job for Loan
+ And Customer makes "AUTOPAY" repayment on "11 January 2024" with 251.0 EUR
transaction amount
+ When Admin sets the business date to "16 January 2024"
+ When Admin runs inline COB job for Loan
+ Then Loan Transactions tab has the following data:
+ | Transaction date | Transaction Type | Amount | Principal | Interest
| Fees | Penalties | Loan Balance | Reverted | Replayed |
+ | 01 January 2024 | Disbursement | 1000.0 | 0.0 | 0.0
| 0.0 | 0.0 | 1000.0 | false | false |
+ | 02 January 2024 | Accrual | 0.33 | 0.0 | 0.33
| 0.0 | 0.0 | 0.0 | false | false |
+ | 03 January 2024 | Accrual | 0.33 | 0.0 | 0.33
| 0.0 | 0.0 | 0.0 | false | false |
+ | 04 January 2024 | Accrual | 0.32 | 0.0 | 0.32
| 0.0 | 0.0 | 0.0 | false | false |
+ | 05 January 2024 | Accrual | 0.33 | 0.0 | 0.33
| 0.0 | 0.0 | 0.0 | false | false |
+ | 06 January 2024 | Repayment | 251.0 | 249.36 | 1.64
| 0.0 | 0.0 | 750.64 | false | false |
+ | 06 January 2024 | Accrual | 0.33 | 0.0 | 0.33
| 0.0 | 0.0 | 0.0 | false | false |
+ | 06 January 2024 | Accrual Activity | 1.64 | 0.0 | 1.64
| 0.0 | 0.0 | 0.0 | false | false |
+ | 07 January 2024 | Accrual | 0.25 | 0.0 | 0.25
| 0.0 | 0.0 | 0.0 | false | false |
+ | 08 January 2024 | Accrual | 0.24 | 0.0 | 0.24
| 0.0 | 0.0 | 0.0 | false | false |
+ | 09 January 2024 | Accrual | 0.25 | 0.0 | 0.25
| 0.0 | 0.0 | 0.0 | false | false |
+ | 10 January 2024 | Accrual | 0.24 | 0.0 | 0.24
| 0.0 | 0.0 | 0.0 | false | false |
+ | 11 January 2024 | Repayment | 251.0 | 249.77 | 1.23
| 0.0 | 0.0 | 500.87 | false | false |
+ | 11 January 2024 | Accrual | 0.25 | 0.0 | 0.25
| 0.0 | 0.0 | 0.0 | false | false |
+ | 11 January 2024 | Accrual Activity | 1.23 | 0.0 | 1.23
| 0.0 | 0.0 | 0.0 | false | false |
+ | 12 January 2024 | Accrual | 0.16 | 0.0 | 0.16
| 0.0 | 0.0 | 0.0 | false | false |
+ | 13 January 2024 | Accrual | 0.17 | 0.0 | 0.17
| 0.0 | 0.0 | 0.0 | false | false |
+ | 14 January 2024 | Accrual | 0.16 | 0.0 | 0.16
| 0.0 | 0.0 | 0.0 | false | false |
+ | 15 January 2024 | Accrual | 0.17 | 0.0 | 0.17
| 0.0 | 0.0 | 0.0 | false | false |
+ When Loan Pay-off is made on "11 January 2024"
+ Then Loan Transactions tab has the following data:
+ | Transaction date | Transaction Type | Amount | Principal | Interest
| Fees | Penalties | Loan Balance | Reverted | Replayed |
+ | 01 January 2024 | Disbursement | 1000.0 | 0.0 | 0.0
| 0.0 | 0.0 | 1000.0 | false | false |
+ | 02 January 2024 | Accrual | 0.33 | 0.0 | 0.33
| 0.0 | 0.0 | 0.0 | false | false |
+ | 03 January 2024 | Accrual | 0.33 | 0.0 | 0.33
| 0.0 | 0.0 | 0.0 | false | false |
+ | 04 January 2024 | Accrual | 0.32 | 0.0 | 0.32
| 0.0 | 0.0 | 0.0 | false | false |
+ | 05 January 2024 | Accrual | 0.33 | 0.0 | 0.33
| 0.0 | 0.0 | 0.0 | false | false |
+ | 06 January 2024 | Repayment | 251.0 | 249.36 | 1.64
| 0.0 | 0.0 | 750.64 | false | false |
+ | 06 January 2024 | Accrual | 0.33 | 0.0 | 0.33
| 0.0 | 0.0 | 0.0 | false | false |
+ | 06 January 2024 | Accrual Activity | 1.64 | 0.0 | 1.64
| 0.0 | 0.0 | 0.0 | false | false |
+ | 07 January 2024 | Accrual | 0.25 | 0.0 | 0.25
| 0.0 | 0.0 | 0.0 | false | false |
+ | 08 January 2024 | Accrual | 0.24 | 0.0 | 0.24
| 0.0 | 0.0 | 0.0 | false | false |
+ | 09 January 2024 | Accrual | 0.25 | 0.0 | 0.25
| 0.0 | 0.0 | 0.0 | false | false |
+ | 10 January 2024 | Accrual | 0.24 | 0.0 | 0.24
| 0.0 | 0.0 | 0.0 | false | false |
+ | 11 January 2024 | Repayment | 251.0 | 249.77 | 1.23
| 0.0 | 0.0 | 500.87 | false | false |
+ | 11 January 2024 | Accrual | 0.25 | 0.0 | 0.25
| 0.0 | 0.0 | 0.0 | false | false |
+ | 11 January 2024 | Accrual Activity | 1.23 | 0.0 | 1.23
| 0.0 | 0.0 | 0.0 | false | false |
+ | 11 January 2024 | Repayment | 500.87 | 500.87 | 0.0
| 0.0 | 0.0 | 0.0 | false | false |
+
@TestRailId:C3190
Scenario: Verify accrual activity reverse/replay - UC04: Early repayment
with interest recalculation enabled
When Admin sets the business date to "01 January 2024"
diff --git
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanScheduleService.java
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanScheduleService.java
index fd6cfa918d..ce488c26e1 100644
---
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanScheduleService.java
+++
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanScheduleService.java
@@ -71,8 +71,15 @@ public class LoanScheduleService {
public void recalculateScheduleFromLastTransaction(final Loan loan, final
ScheduleGeneratorDTO generatorDTO,
final List<Long> existingTransactionIds, final List<Long>
existingReversedTransactionIds) {
-
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
-
existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
+ recalculateScheduleFromLastTransaction(loan, generatorDTO,
existingTransactionIds, existingReversedTransactionIds, false);
+ }
+
+ public void recalculateScheduleFromLastTransaction(final Loan loan, final
ScheduleGeneratorDTO generatorDTO,
+ final List<Long> existingTransactionIds, final List<Long>
existingReversedTransactionIds, boolean skipTransactionIdCollecting) {
+ if (!skipTransactionIdCollecting) {
+
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
+
existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
+ }
if (!loan.isProgressiveSchedule()) {
if (loan.isInterestBearingAndInterestRecalculationEnabled() &&
!loan.isChargedOff()) {
regenerateRepaymentScheduleWithInterestRecalculation(loan,
generatorDTO);
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
index e5afb435d4..8ff3142a82 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
@@ -2404,28 +2404,33 @@ public class LoanWritePlatformServiceJpaRepositoryImpl
implements LoanWritePlatf
@Transactional
@Override
public Loan recalculateInterest(Loan loan) {
- LocalDate recalculateFrom = loan.fetchInterestRecalculateFromDate();
businessEventNotifierService.notifyPreBusinessEvent(new
LoanInterestRecalculationBusinessEvent(loan));
final List<Long> existingTransactionIds = new ArrayList<>();
final List<Long> existingReversedTransactionIds = new ArrayList<>();
- ScheduleGeneratorDTO generatorDTO =
this.loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom);
+ if (loan.isCumulativeSchedule()) {
+ LocalDate recalculateFrom =
loan.fetchInterestRecalculateFromDate();
+ ScheduleGeneratorDTO generatorDTO =
this.loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom);
+ loanScheduleService.recalculateScheduleFromLastTransaction(loan,
generatorDTO, existingTransactionIds,
+ existingReversedTransactionIds);
+ loanAccrualsProcessingService.reprocessExistingAccruals(loan);
+ if (loan.isInterestBearingAndInterestRecalculationEnabled()) {
+
loanAccrualsProcessingService.processIncomePostingAndAccruals(loan);
+ }
- loanScheduleService.recalculateScheduleFromLastTransaction(loan,
generatorDTO, existingTransactionIds,
- existingReversedTransactionIds);
+ loan = saveAndFlushLoanWithDataIntegrityViolationChecks(loan);
+
loanAccrualsProcessingService.processAccrualsOnInterestRecalculation(loan,
+ loan.isInterestBearingAndInterestRecalculationEnabled(),
false);
+ businessEventNotifierService.notifyPostBusinessEvent(new
LoanInterestRecalculationBusinessEvent(loan));
- loanAccrualsProcessingService.reprocessExistingAccruals(loan);
- if (loan.isInterestBearingAndInterestRecalculationEnabled()) {
-
loanAccrualsProcessingService.processIncomePostingAndAccruals(loan);
+ journalEntryPoster.postJournalEntries(loan,
existingTransactionIds, existingReversedTransactionIds);
+
loanAccrualTransactionBusinessEventService.raiseBusinessEventForAccrualTransactions(loan,
existingTransactionIds);
+ } else {
+ loanScheduleService.recalculateScheduleFromLastTransaction(loan,
null, existingTransactionIds, existingReversedTransactionIds,
+ true);
+ loan = saveAndFlushLoanWithDataIntegrityViolationChecks(loan);
+ businessEventNotifierService.notifyPostBusinessEvent(new
LoanInterestRecalculationBusinessEvent(loan));
}
-
- loan = saveAndFlushLoanWithDataIntegrityViolationChecks(loan);
-
loanAccrualsProcessingService.processAccrualsOnInterestRecalculation(loan,
loan.isInterestBearingAndInterestRecalculationEnabled(),
- false);
- businessEventNotifierService.notifyPostBusinessEvent(new
LoanInterestRecalculationBusinessEvent(loan));
-
- journalEntryPoster.postJournalEntries(loan, existingTransactionIds,
existingReversedTransactionIds);
-
loanAccrualTransactionBusinessEventService.raiseBusinessEventForAccrualTransactions(loan,
existingTransactionIds);
return loan;
}