in service/src/main/java/org/apache/fineract/cn/reporting/service/internal/specification/DepositListReportSpecification.java [174:293]
private List<Row> buildRows(final ReportRequest reportRequest, final List<?> customerResultList) {
final ArrayList<Row> rows = new ArrayList<>();
customerResultList.forEach(result -> {
final Row row = new Row();
row.setValues(new ArrayList<>());
final String customerIdentifier;
if (result instanceof Object[]) {
final Object[] resultValues = (Object[]) result;
customerIdentifier = resultValues[0].toString();
for (final Object resultValue : resultValues) {
final Value value = new Value();
if (resultValue != null) {
value.setValues(new String[]{resultValue.toString()});
} else {
value.setValues(new String[]{});
}
row.getValues().add(value);
}
} else {
customerIdentifier = result.toString();
final Value value = new Value();
value.setValues(new String[]{result.toString()});
row.getValues().add(value);
}
final Query accountQuery = this.entityManager.createNativeQuery(this.buildDepositAccountQuery(reportRequest, customerIdentifier));
final List<?> accountResultList = accountQuery.getResultList();
final ArrayList<String> products = new ArrayList<>();
final ArrayList<String> depositAccountNumber = new ArrayList<>();
final ArrayList<String> depositType = new ArrayList<>();
final ArrayList<String> status = new ArrayList<>();
final ArrayList<String> createdBy = new ArrayList<>();
final ArrayList<String> dateCreated = new ArrayList<>();
accountResultList.forEach(accountResult -> {
final String productIdentifier;
if (accountResult instanceof Object[]) {
final Object[] accountResultValues = (Object[]) accountResult;
productIdentifier = accountResultValues[0].toString();
final Query depositProductQuery = this.entityManager.createNativeQuery(this.buildDepositProductQuery(reportRequest, productIdentifier));
final List<?> depositProductResultList = depositProductQuery.getResultList();
depositProductResultList.forEach(product -> {
final Object[] productResultValues = (Object[]) product;
for (int i = 0; i < productResultValues.length; i++) {
if (i == 0 && productResultValues[0] != null) {
products.add(productResultValues[0].toString());
}
if (i == 1 && productResultValues[1] != null) {
depositType.add(productResultValues[1].toString());
}
}
});
for (int i = 1; i < accountResultValues.length ; i++) {
if (i == 1 && accountResultValues[1] != null){
depositAccountNumber.add(accountResultValues[1].toString());
}
if (i == 2 && accountResultValues[2] != null){
status.add(accountResultValues[2].toString());
}
if (i == 3 && accountResultValues[3] != null){
createdBy.add(accountResultValues[3].toString());
}
if (i == 4 && accountResultValues[4] != null){
dateCreated.add(accountResultValues[4].toString());
}
}
}
});
final Value productValue = new Value();
productValue.setValues(products.toArray(new String[products.size()]));
row.getValues().add(productValue);
final Value depositTypeValue = new Value();
depositTypeValue.setValues(depositType.toArray(new String[depositAccountNumber.size()]));
row.getValues().add(depositTypeValue);
final Value depositAccountNumberValue = new Value();
depositAccountNumberValue.setValues(depositAccountNumber.toArray(new String[depositType.size()]));
row.getValues().add(depositAccountNumberValue);
final Value statusValue = new Value();
statusValue.setValues(status.toArray(new String[status.size()]));
row.getValues().add(statusValue);
final Value createdByValue = new Value();
createdByValue.setValues(createdBy.toArray(new String[createdBy.size()]));
row.getValues().add(createdByValue);
final Value dateCreatedValue = new Value();
dateCreatedValue.setValues(dateCreated.toArray(new String[dateCreated.size()]));
row.getValues().add(dateCreatedValue);
rows.add(row);
});
return rows;
}