static JournalEntry getJournalEntry()

in service/src/main/java/org/apache/fineract/cn/portfolio/service/internal/util/AccountingAdapter.java [145:198]


  static JournalEntry getJournalEntry(
      final Map<String, BigDecimal> balanceAdjustments,
      final DesignatorToAccountIdentifierMapper designatorToAccountIdentifierMapper,
      final String note,
      final String transactionDate,
      final String message,
      final String transactionType,
      final String user) {
    final JournalEntry journalEntry = new JournalEntry();
    final Set<Creditor> creditors = new HashSet<>();
    journalEntry.setCreditors(creditors);
    final Set<Debtor> debtors = new HashSet<>();
    journalEntry.setDebtors(debtors);
    final Map<String, BigDecimal> summedBalanceAdjustments = balanceAdjustments.entrySet().stream()
        .map(entry -> {
          final String accountIdentifier = designatorToAccountIdentifierMapper.mapOrThrow(entry.getKey());
          return new BalanceAdjustment(accountIdentifier, entry.getValue());
        })
        .collect(Collectors.groupingBy(BalanceAdjustment::getAccountIdentifier,
            Collectors.mapping(BalanceAdjustment::getAdjustment,
                Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))));

    summedBalanceAdjustments.forEach((accountIdentifier, balanceAdjustment) -> {
      final int sign = balanceAdjustment.compareTo(BigDecimal.ZERO);
      if (sign == 0)
        return;

      if (sign < 0) {
        final Debtor debtor = new Debtor();
        debtor.setAccountNumber(accountIdentifier);
        debtor.setAmount(balanceAdjustment.negate().toPlainString());
        debtors.add(debtor);
      } else {
        final Creditor creditor = new Creditor();
        creditor.setAccountNumber(accountIdentifier);
        creditor.setAmount(balanceAdjustment.toPlainString());
        creditors.add(creditor);
      }
    });

    if (creditors.isEmpty() && !debtors.isEmpty() ||
        debtors.isEmpty() && !creditors.isEmpty())
      throw ServiceException.internalError("either only creditors or only debtors were provided.");


    journalEntry.setCreditors(creditors);
    journalEntry.setDebtors(debtors);
    journalEntry.setClerk(user);
    journalEntry.setTransactionDate(transactionDate);
    journalEntry.setMessage(message);
    journalEntry.setTransactionType(transactionType);
    journalEntry.setNote(note);
    return journalEntry;
  }