in service/src/main/java/org/apache/fineract/cn/portfolio/service/internal/util/AccountingAdapter.java [304:347]
public String createOrFindCaseAccountForLedgerAssignment(
final String customerIdentifier,
final AccountAssignment ledgerAssignment,
final BigDecimal currentBalance) {
if (ledgerAssignment.getAccountIdentifier() != null) try
{
final Account existingAccount = ledgerManager.findAccount(ledgerAssignment.getAccountIdentifier());
return existingAccount.getIdentifier();
}
catch (final AccountNotFoundException ignored) {
//If the "existing" account doesn't exist after all, create a new one.
}
final Ledger ledger = ledgerManager.findLedger(ledgerAssignment.getLedgerIdentifier());
final AccountPage accountsOfLedger = ledgerManager.fetchAccountsOfLedger(ledger.getIdentifier(), null, null, null, null);
final Account generatedAccount = new Account();
generatedAccount.setBalance(currentBalance.doubleValue());
generatedAccount.setType(ledger.getType());
generatedAccount.setState(Account.State.OPEN.name());
generatedAccount.setHolders(Sets.newHashSet(customerIdentifier));
long guestimatedAccountIndex = accountsOfLedger.getTotalElements() + 1;
generatedAccount.setLedger(ledger.getIdentifier());
final Optional<String> createdAccountNumber =
Stream.iterate(guestimatedAccountIndex, i -> i + 1).limit(99999 - guestimatedAccountIndex)
.map(i -> {
final String accountNumber = createCaseAccountNumber(customerIdentifier, ledgerAssignment.getDesignator(), i);
generatedAccount.setIdentifier(accountNumber);
generatedAccount.setName(accountNumber);
generatedAccount.setAlternativeAccountNumber(ledgerAssignment.getAlternativeAccountNumber());
try {
ledgerManager.createAccount(generatedAccount);
return Optional.of(accountNumber);
} catch (final AccountAlreadyExistsException e) {
logger.error("Account '{}' could not be created because it already exists.", accountNumber);
return Optional.<String>empty();
}
})
.filter(Optional::isPresent).map(Optional::get)
.findFirst();
return createdAccountNumber.orElseThrow(() ->
ServiceException.conflict("Failed to create an account for customer ''{0}'' and ''{1}'', in ledger ''{2}''.",
customerIdentifier, ledgerAssignment.getDesignator(), ledgerAssignment.getLedgerIdentifier()));
}