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);
}