in service/src/main/java/org/apache/fineract/cn/reporting/service/internal/specification/CustomerListReportSpecification.java [166:227]
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 DecimalFormat decimalFormat = new DecimalFormat("0.00");
final Query accountQuery = this.entityManager.createNativeQuery(this.buildAccountQuery(reportRequest, customerIdentifier));
final List<?> accountResultList = accountQuery.getResultList();
final ArrayList<String> values = new ArrayList<>();
accountResultList.forEach(accountResult -> {
if (accountResult instanceof Object[]) {
final Object[] accountResultValues = (Object[]) accountResult;
final String accountValue = accountResultValues[0].toString() + " (" +
decimalFormat.format(Double.valueOf(accountResultValues[1].toString())) + ")";
values.add(accountValue);
}
});
final Value accountValue = new Value();
accountValue.setValues(values.toArray(new String[values.size()]));
row.getValues().add(accountValue);
final String addressQueryString = this.buildAddressQuery(reportRequest, customerIdentifier);
if (addressQueryString != null) {
final Query addressQuery = this.entityManager.createNativeQuery(addressQueryString);
final List<?> resultList = addressQuery.getResultList();
final Value addressValue = new Value();
addressValue.setValues(new String[]{resultList.get(0).toString()});
row.getValues().add(addressValue);
}
rows.add(row);
});
return rows;
}