in service/src/main/java/org/apache/fineract/cn/individuallending/internal/service/costcomponent/AcceptPaymentBuilderService.java [51:102]
public PaymentBuilder getPaymentBuilder(
final DataContextOfAction dataContextOfAction,
final BigDecimal requestedLoanPaymentSize,
final LocalDate forDate,
final RunningBalances runningBalances) {
final LocalDateTime startOfTerm = runningBalances.getStartOfTermOrThrow(dataContextOfAction);
final CaseParametersEntity caseParameters = dataContextOfAction.getCaseParametersEntity();
final String productIdentifier = dataContextOfAction.getProductEntity().getIdentifier();
final int minorCurrencyUnitDigits = dataContextOfAction.getProductEntity().getMinorCurrencyUnitDigits();
final ScheduledAction scheduledAction
= ScheduledActionHelpers.getNextScheduledPayment(
startOfTerm.toLocalDate(),
forDate,
dataContextOfAction.getCustomerCaseEntity().getEndOfTerm().toLocalDate(),
dataContextOfAction.getCaseParameters()
);
final List<ScheduledCharge> scheduledChargesForThisAction = scheduledChargesService.getScheduledCharges(
productIdentifier,
Collections.singletonList(scheduledAction));
final BigDecimal loanPaymentSize;
if (requestedLoanPaymentSize != null) {
loanPaymentSize = requestedLoanPaymentSize
.min(runningBalances.getBalance(AccountDesignators.CUSTOMER_LOAN_GROUP).orElse(BigDecimal.ZERO));
}
else if (scheduledAction.getActionPeriod() != null && scheduledAction.getActionPeriod().isLastPeriod()) {
loanPaymentSize = runningBalances.getBalance(AccountDesignators.CUSTOMER_LOAN_GROUP).orElse(BigDecimal.ZERO);
}
else {
loanPaymentSize = dataContextOfAction.getCaseParametersEntity().getPaymentSize()
.min(runningBalances.getBalance(AccountDesignators.CUSTOMER_LOAN_GROUP).orElse(BigDecimal.ZERO));
}
final AvailableRunningBalancesWithLimits availableRunningBalanceWithLimits =
new AvailableRunningBalancesWithLimits(runningBalances);
availableRunningBalanceWithLimits.setUpperLimit(AccountDesignators.ENTRY, loanPaymentSize);
return CostComponentService.getCostComponentsForScheduledCharges(
scheduledChargesForThisAction,
caseParameters.getBalanceRangeMaximum(),
availableRunningBalanceWithLimits,
dataContextOfAction.getCaseParametersEntity().getPaymentSize(),
BigDecimal.ZERO,
loanPaymentSize,
dataContextOfAction.getInterest(),
minorCurrencyUnitDigits,
true);
}