in service/src/main/java/org/apache/fineract/cn/deposit/service/internal/command/handler/ProductInstanceAggregate.java [81:116]
public String createProductInstance(final CreateProductInstanceCommand createProductInstanceCommand) {
final ProductInstance productInstance = createProductInstanceCommand.productInstance();
final ProductInstanceEntity productInstanceEntity =
ProductInstanceMapper.map(productInstance, this.productDefinitionRepository);
final Optional<ProductDefinitionEntity> optionalProductDefinition =
productDefinitionRepository.findByIdentifier(productInstance.getProductIdentifier());
optionalProductDefinition.ifPresent(productDefinitionEntity -> {
final List<ProductInstanceEntity> currentProductInstances =
this.productInstanceRepository.findByCustomerIdentifier(productInstance.getCustomerIdentifier());
final int accountSuffix = currentProductInstances.size() + 1;
final String accountNumber = fixedAccountId ? productInstance.getCustomerIdentifier() :
productInstance.getCustomerIdentifier() +
"." + productDefinitionEntity.getEquityLedgerIdentifier() +
"." + String.format("%05d", accountSuffix);
productInstanceEntity.setAccountIdentifier(accountNumber);
this.accountingService.createAccount(productDefinitionEntity.getEquityLedgerIdentifier(),
productDefinitionEntity.getName(), productInstanceEntity.getCustomerIdentifier(),
accountNumber, productInstance.getAlternativeAccountNumber(),
productInstance.getBalance());
this.logger.info("Account Created Successfully for the Product !!!!!!!!!!!");
});
productInstanceEntity.setCreatedBy(UserContextHolder.checkedGetUser());
productInstanceEntity.setCreatedOn(LocalDateTime.now(Clock.systemUTC()));
productInstanceEntity.setState("PENDING");
this.productInstanceRepository.save(productInstanceEntity);
return productInstance.getCustomerIdentifier();
}