in service/src/main/java/org/apache/fineract/cn/individuallending/internal/service/costcomponent/DisbursePaymentBuilderService.java [58:98]
public PaymentBuilder getPaymentBuilder(
final @Nonnull DataContextOfAction dataContextOfAction,
final @Nullable BigDecimal requestedDisbursalSize,
final LocalDate forDate,
final RunningBalances runningBalances)
{
final BigDecimal currentBalance = runningBalances.getBalance(AccountDesignators.CUSTOMER_LOAN_PRINCIPAL).orElse(BigDecimal.ZERO);
if (requestedDisbursalSize != null &&
dataContextOfAction.getCaseParametersEntity().getBalanceRangeMaximum().compareTo(
currentBalance.add(requestedDisbursalSize)) < 0)
throw ServiceException.conflict("Cannot disburse over the maximum balance.");
final CaseParametersEntity caseParameters = dataContextOfAction.getCaseParametersEntity();
final String productIdentifier = dataContextOfAction.getProductEntity().getIdentifier();
final int minorCurrencyUnitDigits = dataContextOfAction.getProductEntity().getMinorCurrencyUnitDigits();
final List<ScheduledAction> scheduledActions = Collections.singletonList(new ScheduledAction(Action.DISBURSE, forDate));
final BigDecimal disbursalSize;
if (requestedDisbursalSize == null)
disbursalSize = dataContextOfAction.getCaseParametersEntity().getBalanceRangeMaximum();
else
disbursalSize = requestedDisbursalSize;
final List<ScheduledCharge> scheduledCharges = scheduledChargesService.getScheduledCharges(
productIdentifier, scheduledActions);
final Optional<ScheduledCharge> initialLossProvisionCharge = lossProvisionChargesService.getScheduledChargeForDisbursement(
dataContextOfAction, forDate);
initialLossProvisionCharge.ifPresent(scheduledCharges::add);
return CostComponentService.getCostComponentsForScheduledCharges(
scheduledCharges,
caseParameters.getBalanceRangeMaximum(),
runningBalances,
dataContextOfAction.getCaseParametersEntity().getPaymentSize(),
disbursalSize,
BigDecimal.ZERO,
dataContextOfAction.getInterest(),
minorCurrencyUnitDigits,
true);
}