diff --git a/composer/report/base.py b/composer/report/base.py index 785db0c..46543c4 100644 --- a/composer/report/base.py +++ b/composer/report/base.py @@ -106,6 +106,9 @@ class Report(Template): def getOutputFields(self): return [f for f in self.fields if 'output' in f.executionSteps] + def getAllFields(self): + return [f for f in self.fields] + def getActiveOutputFields(self): if not self.outputFields: fieldNames = [f.name for f in self.getOutputFields()] @@ -146,7 +149,7 @@ class Report(Template): for gf in self.getGroupFields(): result.append([f for f in self.fields if gf.name in f.totals]) return result - + class BaseQueryCriteria(Component): diff --git a/composer/report/result.py b/composer/report/result.py index 08939de..ca0b139 100644 --- a/composer/report/result.py +++ b/composer/report/result.py @@ -57,6 +57,10 @@ class Row(BaseRow): @Lazy def displayedColumns(self): return self.parent.context.getActiveOutputFields() + + @Lazy + def allColumns(self): + return self.partent.context.getAllFields() def useRowProperty(self, attr): return getattr(self, attr) @@ -114,10 +118,12 @@ class ResultSet(object): headerRow.headerColumns.append(headerColumn) return headerRow - def getSubTotalsRow(self, row, columns, values): + def getSubTotalsRow(self, row, columns, values, dcolumns): subTotalsRow = SubTotalsRow(None, self) for idx, c in enumerate(columns): subTotalsRow.data[c.name] = values[idx] + for c in dcolumns: + subTotalsRow.data[c.output] = u'SUMME: ' + c.getRawValue(row) return subTotalsRow def getResult(self): @@ -130,7 +136,10 @@ class ResultSet(object): res = [] groupValues = [None for f in self.groupColumns] subTotals = [[0.0 for f in stc] for stc in self.subTotalsColumns] + lastRow = None for row in result: + if lastRow is None: + lastRow = row subTotalsRows = [] headerRows = [] for idx, f in enumerate(self.groupColumns): @@ -138,8 +147,11 @@ class ResultSet(object): if value != groupValues[idx]: groupValues[idx] = value headerRows.append(self.getHeaderRow(row, (f,) + f.outputWith)) - subTotalsRows.append(self.getSubTotalsRow( - row, self.subTotalsColumns[idx], subTotals[idx])) + subTotalsRows.append( + self.getSubTotalsRow(lastRow, + self.subTotalsColumns[idx], + subTotals[idx], + f.outputWith)) subTotals[idx] = [0.0 for f in self.subTotalsColumns[idx]] for subTotalsRow in reversed(subTotalsRows): res.append(subTotalsRow) @@ -149,6 +161,7 @@ class ResultSet(object): for idx, sc in enumerate(self.subTotalsColumns): for idx2, f in enumerate(sc): subTotals[idx][idx2] += f.getValue(row) + lastRow = row result = res if self.limits: start, stop = self.limits @@ -180,4 +193,4 @@ class ResultSet(object): @Lazy def subTotalsColumns(self): return self.context.getSubTotalsFields() - \ No newline at end of file +