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 adea7be21 FINERACT-1981: Fix principal due during disbursement on
overpaid loan
adea7be21 is described below
commit adea7be21441345509650d78e230060ece7054b8
Author: Adam Saghy <[email protected]>
AuthorDate: Tue Feb 13 10:36:25 2024 +0100
FINERACT-1981: Fix principal due during disbursement on overpaid loan
---
...dvancedPaymentScheduleTransactionProcessor.java | 42 +++++++++++-----------
1 file changed, 22 insertions(+), 20 deletions(-)
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 56e9dc90c..297f4efca 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
@@ -547,27 +547,29 @@ public class AdvancedPaymentScheduleTransactionProcessor
extends AbstractLoanRep
private void allocateOverpayment(LoanTransaction loanTransaction,
MonetaryCurrency currency,
List<LoanRepaymentScheduleInstallment> installments, MoneyHolder
overpaymentHolder) {
- List<LoanTransactionToRepaymentScheduleMapping> transactionMappings =
new ArrayList<>();
- List<LoanPaymentAllocationRule> paymentAllocationRules =
loanTransaction.getLoan().getPaymentAllocationRules();
- LoanPaymentAllocationRule defaultPaymentAllocationRule =
paymentAllocationRules.stream()
- .filter(e ->
PaymentAllocationTransactionType.DEFAULT.equals(e.getTransactionType())).findFirst().orElseThrow();
-
- Money transactionAmountUnprocessed = null;
- Money zero = Money.zero(currency);
- Balances balances = new Balances(zero, zero, zero, zero);
- if (LoanScheduleProcessingType.HORIZONTAL
-
.equals(loanTransaction.getLoan().getLoanProductRelatedDetail().getLoanScheduleProcessingType()))
{
- transactionAmountUnprocessed =
processPeriodsHorizontally(loanTransaction, currency, installments,
- overpaymentHolder.getMoneyObject(),
defaultPaymentAllocationRule, transactionMappings, Set.of(), balances);
- } else if (LoanScheduleProcessingType.VERTICAL
-
.equals(loanTransaction.getLoan().getLoanProductRelatedDetail().getLoanScheduleProcessingType()))
{
- transactionAmountUnprocessed =
processPeriodsVertically(loanTransaction, currency, installments,
- overpaymentHolder.getMoneyObject(),
defaultPaymentAllocationRule, transactionMappings, Set.of(), balances);
- }
- if (transactionAmountUnprocessed != null &&
transactionAmountUnprocessed.isGreaterThanZero()) {
- overpaymentHolder.setMoneyObject(transactionAmountUnprocessed);
+ if (overpaymentHolder.getMoneyObject().isGreaterThanZero()) {
+ List<LoanTransactionToRepaymentScheduleMapping>
transactionMappings = new ArrayList<>();
+ List<LoanPaymentAllocationRule> paymentAllocationRules =
loanTransaction.getLoan().getPaymentAllocationRules();
+ LoanPaymentAllocationRule defaultPaymentAllocationRule =
paymentAllocationRules.stream()
+ .filter(e ->
PaymentAllocationTransactionType.DEFAULT.equals(e.getTransactionType())).findFirst().orElseThrow();
+
+ Money transactionAmountUnprocessed = null;
+ Money zero = Money.zero(currency);
+ Balances balances = new Balances(zero, zero, zero, zero);
+ if (LoanScheduleProcessingType.HORIZONTAL
+
.equals(loanTransaction.getLoan().getLoanProductRelatedDetail().getLoanScheduleProcessingType()))
{
+ transactionAmountUnprocessed =
processPeriodsHorizontally(loanTransaction, currency, installments,
+ overpaymentHolder.getMoneyObject(),
defaultPaymentAllocationRule, transactionMappings, Set.of(), balances);
+ } else if (LoanScheduleProcessingType.VERTICAL
+
.equals(loanTransaction.getLoan().getLoanProductRelatedDetail().getLoanScheduleProcessingType()))
{
+ transactionAmountUnprocessed =
processPeriodsVertically(loanTransaction, currency, installments,
+ overpaymentHolder.getMoneyObject(),
defaultPaymentAllocationRule, transactionMappings, Set.of(), balances);
+ }
+ if (transactionAmountUnprocessed != null &&
transactionAmountUnprocessed.isGreaterThanZero()) {
+ overpaymentHolder.setMoneyObject(transactionAmountUnprocessed);
+ }
+
loanTransaction.updateLoanTransactionToRepaymentScheduleMappings(transactionMappings);
}
-
loanTransaction.updateLoanTransactionToRepaymentScheduleMappings(transactionMappings);
}
private void handleRepayment(LoanTransaction loanTransaction,
MonetaryCurrency currency,