in service/src/main/java/org/apache/fineract/cn/individuallending/internal/service/costcomponent/CostComponentService.java [118:154]
static BigDecimal getAmountProportionalTo(
final ScheduledCharge scheduledCharge,
final ChargeProportionalDesignator chargeProportionalTo,
final BigDecimal maximumBalance,
final RunningBalances runningBalances,
final BigDecimal contractualRepayment,
final BigDecimal requestedDisbursement,
final BigDecimal requestedRepayment,
final PaymentBuilder paymentBuilder) {
switch (chargeProportionalTo) {
case NOT_PROPORTIONAL:
return BigDecimal.ONE;
case MAXIMUM_BALANCE_DESIGNATOR:
return maximumBalance;
case RUNNING_BALANCE_DESIGNATOR: {
final BigDecimal customerLoanRunningBalance = runningBalances.getBalance(AccountDesignators.CUSTOMER_LOAN_GROUP).orElse(BigDecimal.ZERO);
return customerLoanRunningBalance.subtract(paymentBuilder.getBalanceAdjustment(AccountDesignators.CUSTOMER_LOAN_GROUP));
}
case PRINCIPAL_DESIGNATOR: {
return runningBalances.getBalance(AccountDesignators.CUSTOMER_LOAN_PRINCIPAL).orElse(BigDecimal.ZERO);
}
case CONTRACTUAL_REPAYMENT_DESIGNATOR:
return contractualRepayment;
case REQUESTED_DISBURSEMENT_DESIGNATOR:
return requestedDisbursement;
case REQUESTED_REPAYMENT_DESIGNATOR:
return requestedRepayment.add(paymentBuilder.getBalanceAdjustment(AccountDesignators.ENTRY));
case TO_ACCOUNT_DESIGNATOR:
return runningBalances.getBalance(scheduledCharge.getChargeDefinition().getToAccountDesignator()).orElse(BigDecimal.ZERO)
.subtract(paymentBuilder.getBalanceAdjustment(scheduledCharge.getChargeDefinition().getToAccountDesignator()));
case FROM_ACCOUNT_DESIGNATOR:
return runningBalances.getBalance(scheduledCharge.getChargeDefinition().getFromAccountDesignator()).orElse(BigDecimal.ZERO)
.add(paymentBuilder.getBalanceAdjustment(scheduledCharge.getChargeDefinition().getFromAccountDesignator()));
default:
return BigDecimal.ZERO;
}
}