in service/src/main/java/org/apache/fineract/cn/reporting/service/internal/specification/BalanceSheetReportSpecification.java [152:296]
private List<Row> buildRows(ReportRequest reportRequest, List<?> accountResultList) {
final ArrayList<Row> rows = new ArrayList<>();
final Row totalAssetRow = new Row();
totalAssetRow.setValues(new ArrayList<>());
final Value subAssetTotal = new Value();
final BigDecimal[] assetSubTotal = {new BigDecimal("0.000")};
accountResultList.forEach(result -> {
final Row row = new Row();
row.setValues(new ArrayList<>());
if (result instanceof Object[]) {
final Object[] resultValues;
resultValues = (Object[]) result;
for (int i = 0; i < resultValues.length; i++){
final Value assetValue = new Value();
if (resultValues[i] != null){
assetValue.setValues(new String[]{resultValues[i].toString()});
}else assetValue.setValues(new String[]{});
row.getValues().add(assetValue);
assetSubTotal[0] = assetSubTotal[0].add((BigDecimal)resultValues[3]);
}
} else {
final Value value = new Value();
value.setValues(new String[]{result.toString()});
row.getValues().add(value);
}
rows.add(row);
});
subAssetTotal.setValues(new String[]{new StringBuilder().append("TOTAL ASSETS ").append(assetSubTotal[0]).toString()});
totalAssetRow.getValues().add(subAssetTotal);
rows.add(totalAssetRow);
final String liabilityQueryString = this.buildLiabilityQuery(reportRequest);
final Query liabilityQuery = this.entityManager.createNativeQuery(liabilityQueryString);
final List<?> liabilityResultList = liabilityQuery.getResultList();
final Row totalLiabilityRow = new Row();
totalLiabilityRow.setValues(new ArrayList<>());
final Value subLiabilityTotal = new Value();
final BigDecimal[] liabilitySubTotal = {new BigDecimal("0.000")};
liabilityResultList.forEach(result -> {
final Row row = new Row();
row.setValues(new ArrayList<>());
if (result instanceof Object[]) {
final Object[] resultValues;
resultValues = (Object[]) result;
for (int i = 0; i < resultValues.length; i++){
final Value liabilityValue = new Value();
if (resultValues[i] != null) liabilityValue.setValues(new String[]{resultValues[i].toString()});
else liabilityValue.setValues(new String[]{});
row.getValues().add(liabilityValue);
liabilitySubTotal[0] = liabilitySubTotal[0].add((BigDecimal)resultValues[3]);
}
} else {
final Value value;
value = new Value();
value.setValues(new String[]{result.toString()});
row.getValues().add(value);
}
rows.add(row);
});
subLiabilityTotal.setValues(new String[]{new StringBuilder().append("TOTAL LIABILITIES ").append(liabilitySubTotal[0]).toString()});
totalLiabilityRow.getValues().add(subLiabilityTotal);
rows.add(totalLiabilityRow);
final String equityQueryString = this.buildEquityQuery(reportRequest);
final Query equityQuery = this.entityManager.createNativeQuery(equityQueryString);
final List<?> equityResultList = equityQuery.getResultList();
final Row totalEquityRow = new Row();
totalEquityRow.setValues(new ArrayList<>());
final Value subEquityTotal = new Value();
final Row totalLiabilityAndEquityRow = new Row();
totalLiabilityAndEquityRow.setValues(new ArrayList<>());
final Value totalLiabilityAndEquityValue = new Value();
final BigDecimal[] equitySubTotal = {new BigDecimal("0.000")};
equityResultList.forEach(result -> {
final Row row = new Row();
row.setValues(new ArrayList<>());
if (result instanceof Object[]) {
final Object[] resultValues;
resultValues = (Object[]) result;
for (int i = 0; i < resultValues.length; i++){
final Value equityValue = new Value();
if (resultValues[i] != null) equityValue.setValues(new String[]{resultValues[i].toString()});
else equityValue.setValues(new String[]{});
row.getValues().add(equityValue);
equitySubTotal[0] = equitySubTotal[0].add((BigDecimal)resultValues[3]);
}
} else {
final Value value;
value = new Value();
value.setValues(new String[]{result.toString()});
row.getValues().add(value);
}
rows.add(row);
});
subEquityTotal.setValues(new String[]{new StringBuilder().append("TOTAL EQUITY ").append(equitySubTotal[0]).toString()});
totalEquityRow.getValues().add(subEquityTotal);
rows.add(totalEquityRow);
final BigDecimal liabilityAndEquity = liabilitySubTotal[0].add(equitySubTotal[0]);
totalLiabilityAndEquityValue.setValues(new String[]{new StringBuilder().append("TOTAL LIABILITIES and EQUITY ").append(liabilityAndEquity).toString()});
totalLiabilityAndEquityRow.getValues().add(totalLiabilityAndEquityValue);
rows.add(totalLiabilityAndEquityRow);
return rows;
}