FINERACT-2421: Adjust interest with MIR and CBR results in improper allocations
This commit is contained in:
committed by
Adam Saghy
parent
cc372286fa
commit
7b322481b8
+2
-1
@@ -57,7 +57,8 @@ public class ProgressivePossibleNextRepaymentCalculationServiceImpl extends Abst
|
||||
ProgressiveLoanInterestScheduleModel scheduleModel = optionalScheduleModel.get();
|
||||
List<LoanRepaymentScheduleInstallment> repaymentScheduleInstallments = loan.getRepaymentScheduleInstallments();
|
||||
ProgressiveTransactionCtx ctx = new ProgressiveTransactionCtx(loan.getCurrency(), repaymentScheduleInstallments, Set.of(),
|
||||
new MoneyHolder(loan.getTotalOverpaidAsMoney()), new ChangedTransactionDetail(), scheduleModel);
|
||||
new MoneyHolder(loan.getTotalOverpaidAsMoney()), new ChangedTransactionDetail(), scheduleModel,
|
||||
loan.getActiveLoanTermVariations());
|
||||
ctx.setChargedOff(loan.isChargedOff());
|
||||
ctx.setWrittenOff(loan.isClosedWrittenOff());
|
||||
ctx.setContractTerminated(loan.isContractTermination());
|
||||
|
||||
+2
-2
@@ -229,7 +229,7 @@ public class AdvancedPaymentScheduleTransactionProcessor extends AbstractLoanRep
|
||||
ProgressiveLoanInterestScheduleModel scheduleModel = emiCalculator.generateInstallmentInterestScheduleModel(installments,
|
||||
LoanConfigurationDetailsMapper.map(loan), installmentAmountInMultiplesOf, overpaymentHolder.getMoneyObject().getMc());
|
||||
ProgressiveTransactionCtx ctx = new ProgressiveTransactionCtx(currency, installments, charges, overpaymentHolder,
|
||||
changedTransactionDetail, scheduleModel);
|
||||
changedTransactionDetail, scheduleModel, loan.getActiveLoanTermVariations());
|
||||
|
||||
List<ChangeOperation> changeOperations = createSortedChangeList(loanTermVariations, loanTransactions, charges);
|
||||
|
||||
@@ -571,7 +571,7 @@ public class AdvancedPaymentScheduleTransactionProcessor extends AbstractLoanRep
|
||||
.filter(LoanTransaction::isNotReversed).filter(tr -> tr.getId() == null).toList());
|
||||
if (validateInterestRefundTransactionRelation(loanTransaction)) {
|
||||
final Money interestAfterRefund = interestRefundService.totalInterestByTransactions(this, loan.getId(), targetDate,
|
||||
modifiedTransactions, unmodifiedTransactionIds);
|
||||
modifiedTransactions, unmodifiedTransactionIds, ctx.getActiveLoanTermVariations());
|
||||
final Money newAmount = interestBeforeRefund.minus(progCtx.getSumOfInterestRefundAmount()).minus(interestAfterRefund);
|
||||
loanTransaction.updateAmount(newAmount.getAmount());
|
||||
}
|
||||
|
||||
+7
-4
@@ -28,6 +28,7 @@ import org.apache.fineract.organisation.monetary.domain.Money;
|
||||
import org.apache.fineract.portfolio.loanaccount.domain.ChangedTransactionDetail;
|
||||
import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge;
|
||||
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment;
|
||||
import org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariations;
|
||||
import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
|
||||
import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.MoneyHolder;
|
||||
import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.TransactionCtx;
|
||||
@@ -52,14 +53,16 @@ public class ProgressiveTransactionCtx extends TransactionCtx {
|
||||
|
||||
public ProgressiveTransactionCtx(MonetaryCurrency currency, List<LoanRepaymentScheduleInstallment> installments,
|
||||
Set<LoanCharge> charges, MoneyHolder overpaymentHolder, ChangedTransactionDetail changedTransactionDetail,
|
||||
ProgressiveLoanInterestScheduleModel model) {
|
||||
this(currency, installments, charges, overpaymentHolder, changedTransactionDetail, model, Money.zero(currency));
|
||||
ProgressiveLoanInterestScheduleModel model, List<LoanTermVariations> activeLoanTermVariations) {
|
||||
this(currency, installments, charges, overpaymentHolder, changedTransactionDetail, model, Money.zero(currency),
|
||||
activeLoanTermVariations);
|
||||
}
|
||||
|
||||
public ProgressiveTransactionCtx(MonetaryCurrency currency, List<LoanRepaymentScheduleInstallment> installments,
|
||||
Set<LoanCharge> charges, MoneyHolder overpaymentHolder, ChangedTransactionDetail changedTransactionDetail,
|
||||
ProgressiveLoanInterestScheduleModel model, Money sumOfInterestRefundAmount) {
|
||||
super(currency, installments, charges, overpaymentHolder, changedTransactionDetail);
|
||||
ProgressiveLoanInterestScheduleModel model, Money sumOfInterestRefundAmount,
|
||||
List<LoanTermVariations> activeLoanTermVariations) {
|
||||
super(currency, installments, charges, overpaymentHolder, changedTransactionDetail, activeLoanTermVariations);
|
||||
this.sumOfInterestRefundAmount = sumOfInterestRefundAmount;
|
||||
this.model = model;
|
||||
}
|
||||
|
||||
+2
-1
@@ -112,7 +112,8 @@ public class InterestScheduleModelRepositoryWrapperImpl implements InterestSched
|
||||
savedModel = extractModel(progressiveLoanModel);
|
||||
if (savedModel.isPresent() && progressiveLoanModel.get().getBusinessDate().isBefore(businessDate)) {
|
||||
ProgressiveTransactionCtx ctx = new ProgressiveTransactionCtx(loan.getCurrency(), loan.getRepaymentScheduleInstallments(),
|
||||
Set.of(), new MoneyHolder(loan.getTotalOverpaidAsMoney()), new ChangedTransactionDetail(), savedModel.get());
|
||||
Set.of(), new MoneyHolder(loan.getTotalOverpaidAsMoney()), new ChangedTransactionDetail(), savedModel.get(),
|
||||
loan.getActiveLoanTermVariations());
|
||||
ctx.setChargedOff(loan.isChargedOff());
|
||||
ctx.setWrittenOff(loan.isClosedWrittenOff());
|
||||
ctx.setContractTerminated(loan.isContractTermination());
|
||||
|
||||
Reference in New Issue
Block a user