in service/src/main/java/org/apache/fineract/cn/individuallending/internal/service/costcomponent/CostComponentService.java [46:93]
public static PaymentBuilder getCostComponentsForScheduledCharges(
final Collection<ScheduledCharge> scheduledCharges,
final BigDecimal maximumBalance,
final RunningBalances preChargeBalances,
final BigDecimal contractualRepayment,
final BigDecimal requestedDisbursement,
final BigDecimal requestedRepayment,
final BigDecimal percentPoints,
final int minorCurrencyUnitDigits,
final boolean accrualAccounting) {
final PaymentBuilder paymentBuilder = new PaymentBuilder(preChargeBalances, accrualAccounting);
for (final ScheduledCharge scheduledCharge : scheduledCharges) {
if (accrualAccounting || !isAccrualChargeForAction(scheduledCharge.getChargeDefinition(), scheduledCharge.getScheduledAction().getAction())) {
final BigDecimal chargeAmount;
if (!isIncurralActionForAccruedCharge(scheduledCharge.getChargeDefinition(), scheduledCharge.getScheduledAction().getAction()))
{
final BigDecimal amountProportionalTo = getAmountProportionalTo(
scheduledCharge,
maximumBalance,
preChargeBalances,
contractualRepayment,
requestedDisbursement,
requestedRepayment,
paymentBuilder);
if (scheduledCharge.getChargeRange().map(x ->
!x.amountIsWithinRange(amountProportionalTo)).orElse(false))
continue;
chargeAmount = howToApplyScheduledChargeToAmount(scheduledCharge, percentPoints)
.apply(amountProportionalTo)
.setScale(minorCurrencyUnitDigits, BigDecimal.ROUND_HALF_EVEN);
}
else
{
chargeAmount = preChargeBalances.getAccruedBalanceForCharge(scheduledCharge.getChargeDefinition())
.add(paymentBuilder.getBalanceAdjustment(scheduledCharge.getChargeDefinition().getAccrualAccountDesignator()));
}
paymentBuilder.adjustBalances(
scheduledCharge.getScheduledAction().getAction(),
scheduledCharge.getChargeDefinition(),
chargeAmount);
}
}
return paymentBuilder;
}