private List buildRows()

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;
    }