FINERACT-1981: Fix principal due during disbursement on overpaid loan
This commit is contained in:
+21
-19
@@ -547,27 +547,29 @@ public class AdvancedPaymentScheduleTransactionProcessor extends AbstractLoanRep
|
|||||||
|
|
||||||
private void allocateOverpayment(LoanTransaction loanTransaction, MonetaryCurrency currency,
|
private void allocateOverpayment(LoanTransaction loanTransaction, MonetaryCurrency currency,
|
||||||
List<LoanRepaymentScheduleInstallment> installments, MoneyHolder overpaymentHolder) {
|
List<LoanRepaymentScheduleInstallment> installments, MoneyHolder overpaymentHolder) {
|
||||||
List<LoanTransactionToRepaymentScheduleMapping> transactionMappings = new ArrayList<>();
|
if (overpaymentHolder.getMoneyObject().isGreaterThanZero()) {
|
||||||
List<LoanPaymentAllocationRule> paymentAllocationRules = loanTransaction.getLoan().getPaymentAllocationRules();
|
List<LoanTransactionToRepaymentScheduleMapping> transactionMappings = new ArrayList<>();
|
||||||
LoanPaymentAllocationRule defaultPaymentAllocationRule = paymentAllocationRules.stream()
|
List<LoanPaymentAllocationRule> paymentAllocationRules = loanTransaction.getLoan().getPaymentAllocationRules();
|
||||||
.filter(e -> PaymentAllocationTransactionType.DEFAULT.equals(e.getTransactionType())).findFirst().orElseThrow();
|
LoanPaymentAllocationRule defaultPaymentAllocationRule = paymentAllocationRules.stream()
|
||||||
|
.filter(e -> PaymentAllocationTransactionType.DEFAULT.equals(e.getTransactionType())).findFirst().orElseThrow();
|
||||||
|
|
||||||
Money transactionAmountUnprocessed = null;
|
Money transactionAmountUnprocessed = null;
|
||||||
Money zero = Money.zero(currency);
|
Money zero = Money.zero(currency);
|
||||||
Balances balances = new Balances(zero, zero, zero, zero);
|
Balances balances = new Balances(zero, zero, zero, zero);
|
||||||
if (LoanScheduleProcessingType.HORIZONTAL
|
if (LoanScheduleProcessingType.HORIZONTAL
|
||||||
.equals(loanTransaction.getLoan().getLoanProductRelatedDetail().getLoanScheduleProcessingType())) {
|
.equals(loanTransaction.getLoan().getLoanProductRelatedDetail().getLoanScheduleProcessingType())) {
|
||||||
transactionAmountUnprocessed = processPeriodsHorizontally(loanTransaction, currency, installments,
|
transactionAmountUnprocessed = processPeriodsHorizontally(loanTransaction, currency, installments,
|
||||||
overpaymentHolder.getMoneyObject(), defaultPaymentAllocationRule, transactionMappings, Set.of(), balances);
|
overpaymentHolder.getMoneyObject(), defaultPaymentAllocationRule, transactionMappings, Set.of(), balances);
|
||||||
} else if (LoanScheduleProcessingType.VERTICAL
|
} else if (LoanScheduleProcessingType.VERTICAL
|
||||||
.equals(loanTransaction.getLoan().getLoanProductRelatedDetail().getLoanScheduleProcessingType())) {
|
.equals(loanTransaction.getLoan().getLoanProductRelatedDetail().getLoanScheduleProcessingType())) {
|
||||||
transactionAmountUnprocessed = processPeriodsVertically(loanTransaction, currency, installments,
|
transactionAmountUnprocessed = processPeriodsVertically(loanTransaction, currency, installments,
|
||||||
overpaymentHolder.getMoneyObject(), defaultPaymentAllocationRule, transactionMappings, Set.of(), balances);
|
overpaymentHolder.getMoneyObject(), defaultPaymentAllocationRule, transactionMappings, Set.of(), balances);
|
||||||
|
}
|
||||||
|
if (transactionAmountUnprocessed != null && transactionAmountUnprocessed.isGreaterThanZero()) {
|
||||||
|
overpaymentHolder.setMoneyObject(transactionAmountUnprocessed);
|
||||||
|
}
|
||||||
|
loanTransaction.updateLoanTransactionToRepaymentScheduleMappings(transactionMappings);
|
||||||
}
|
}
|
||||||
if (transactionAmountUnprocessed != null && transactionAmountUnprocessed.isGreaterThanZero()) {
|
|
||||||
overpaymentHolder.setMoneyObject(transactionAmountUnprocessed);
|
|
||||||
}
|
|
||||||
loanTransaction.updateLoanTransactionToRepaymentScheduleMappings(transactionMappings);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleRepayment(LoanTransaction loanTransaction, MonetaryCurrency currency,
|
private void handleRepayment(LoanTransaction loanTransaction, MonetaryCurrency currency,
|
||||||
|
|||||||
Reference in New Issue
Block a user