public String createLedger()

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


  public String createLedger(
      final String customerIdentifier,
      final String groupName,
      final String parentLedger) throws InterruptedException {
    final Ledger ledger = ledgerManager.findLedger(parentLedger);
    final List<Ledger> subLedgers = ledger.getSubLedgers() == null ? Collections.emptyList() : ledger.getSubLedgers();

    final Ledger generatedLedger = new Ledger();
    generatedLedger.setShowAccountsInChart(true);
    generatedLedger.setParentLedgerIdentifier(parentLedger);
    generatedLedger.setType(ledger.getType());
    final IdentiferWithIndex ledgerIdentifer = createLedgerIdentifier(customerIdentifier, groupName, subLedgers);
    generatedLedger.setIdentifier(ledgerIdentifer.getIdentifier());
    generatedLedger.setDescription("Individual loan case specific ledger");
    generatedLedger.setName(ledgerIdentifer.getIdentifier());


    final EventExpectation expectation = accountingListener.expectLedgerCreation(generatedLedger.getIdentifier());
    boolean created = false;
    while (!created) {
      try {
        logger.info("Attempting to create ledger with identifier '{}'", ledgerIdentifer.getIdentifier());
        ledgerManager.addSubLedger(parentLedger, generatedLedger);
        created = true;
      } catch (final LedgerAlreadyExistsException e) {
        ledgerIdentifer.incrementIndex();
        generatedLedger.setIdentifier(ledgerIdentifer.getIdentifier());
        generatedLedger.setName(ledgerIdentifer.getIdentifier());
      }
    }
    final boolean ledgerCreationDetected = expectation.waitForOccurrence(10, TimeUnit.SECONDS);
    if (!ledgerCreationDetected)
      logger.warn("Waited 5 seconds for creation of ledger '{}', but it was not detected. This could cause subsequent " +
              "account creations to fail. Is there something wrong with the accounting service? Is ActiveMQ setup properly?",
          generatedLedger.getIdentifier());
    return ledgerIdentifer.getIdentifier();
  }