private void prepareTransfer()

in service/src/main/java/org/apache/fineract/cn/interoperation/service/internal/service/InteropService.java [291:323]


    private void prepareTransfer(@NotNull InteropTransferCommand request, @NotNull AccountWrapper accountWrapper, @NotNull InteropActionEntity action,
                                 List<Charge> charges, LocalDateTime transactionDate) {
        BigDecimal amount = request.getAmount().getAmount();
        // TODO: validate amount with quote amount
        boolean isDebit = request.getTransactionRole().isWithdraw();
        if (!isDebit)
            return;

        String prepareAccountId = action.getTransaction().getPrepareAccountIdentifier();
        Account payableAccount = prepareAccountId == null ? null : validateAndGetAccount(request, prepareAccountId);
        if (payableAccount == null) {
            logger.warn("Can not prepare transfer: Payable account was not found for " + accountWrapper.account.getIdentifier());
            return;
        }

        final JournalEntry journalEntry = createJournalEntry(action.getIdentifier(), TransactionType.CURRENCY_WITHDRAWAL.getCode(),
                DateConverter.toIsoString(transactionDate), request.getNote(), getLoginUser());

        HashSet<Debtor> debtors = new HashSet<>(1);
        HashSet<Creditor> creditors = new HashSet<>(1);

        addCreditor(accountWrapper.account.getIdentifier(), amount.doubleValue(), creditors);
        addDebtor(payableAccount.getIdentifier(), amount.doubleValue(), debtors);

        prepareCharges(request, accountWrapper, action, charges, payableAccount, debtors, creditors);

        if (debtors.isEmpty()) // must be same size as creditors
            return;

        journalEntry.setDebtors(debtors);
        journalEntry.setCreditors(creditors);
        accountingService.createJournalEntry(journalEntry);
    }