subtotals fixes

This commit is contained in:
hplattner 2017-10-11 14:21:13 +02:00
parent 0208aa5595
commit c5715c322d

View file

@ -22,12 +22,13 @@ Report result sets and related classes.
from copy import copy from copy import copy
from zope.cachedescriptors.property import Lazy from zope.cachedescriptors.property import Lazy
from zope.traversing.api import getName
from cybertools.composer.interfaces import IInstance from cybertools.composer.interfaces import IInstance
from cybertools.composer.report.base import BaseQueryCriteria from cybertools.composer.report.base import BaseQueryCriteria
from cybertools.util.jeep import Jeep from cybertools.util.jeep import Jeep
from loops.common import normalizeName from loops.common import baseObject, normalizeName, AdapterBase
class BaseRow(object): class BaseRow(object):
@ -133,9 +134,9 @@ class ResultSet(object):
self.limits = limits self.limits = limits
self.totals = TotalsRow(None, self) self.totals = TotalsRow(None, self)
def getHeaderRow(self, row, columns): def getHeaderRow(self, row, columns, index=None):
headerRow = self.headerRowFactory(None, self) headerRow = self.headerRowFactory(None, self)
headerRow.cssClass = 'headerRow' headerRow.cssClass = 'headerRow level-' + str(index and index + 1 or 1)
headerRow.headerColumns = [] headerRow.headerColumns = []
for c in columns: for c in columns:
if c.output: if c.output:
@ -165,6 +166,10 @@ class ResultSet(object):
if isinstance(value, basestring): if isinstance(value, basestring):
rowId = '%s-%s' % (gf.name, normalizeName(value)) rowId = '%s-%s' % (gf.name, normalizeName(value))
rowId = rowId.replace('.', '_') rowId = rowId.replace('.', '_')
if isinstance(value, AdapterBase):
value = getName(baseObject(value))
rowId = '%s-%s' % (gf.name, normalizeName(value))
rowId = rowId.replace('.', '_')
subTotalsRow.cssClass = 'subTotalsRow' subTotalsRow.cssClass = 'subTotalsRow'
subTotalsRow.rowId = rowId subTotalsRow.rowId = rowId
for idx, c in enumerate(columns): for idx, c in enumerate(columns):
@ -215,7 +220,8 @@ class ResultSet(object):
# for j, f in enumerate(self.groupColumns)[idx:]: # for j, f in enumerate(self.groupColumns)[idx:]:
# # use idx+j for correct indexing # # use idx+j for correct indexing
groupValues[idx] = value groupValues[idx] = value
headerRows.append(self.getHeaderRow(row, (f,) + f.outputWith)) headerRows.append(self.getHeaderRow(row, (f,) + f.outputWith,
index=idx))
if lastRow is not None and f.getDisplayValue(lastRow): if lastRow is not None and f.getDisplayValue(lastRow):
subTr = self.getSubTotalsRow(f, lastRow, subTr = self.getSubTotalsRow(f, lastRow,
self.subTotalsColumns[idx], subTotals[idx]) self.subTotalsColumns[idx], subTotals[idx])
@ -235,7 +241,7 @@ class ResultSet(object):
if lastRow is not None: if lastRow is not None:
subTotalsRows = [] subTotalsRows = []
for idx, f in enumerate(self.groupColumns): for idx, f in enumerate(self.groupColumns):
if f.getDisplayValue(lastRow): if f.getValue(lastRow):
subTr = self.getSubTotalsRow(f, lastRow, subTr = self.getSubTotalsRow(f, lastRow,
self.subTotalsColumns[idx], subTotals[idx]) self.subTotalsColumns[idx], subTotals[idx])
if subTr is not None: if subTr is not None:
@ -264,6 +270,12 @@ class ResultSet(object):
value = value.replace('.', '_') value = value.replace('.', '_')
row.subTotalsRowIds = copy(row.subTotalsRowIds) +\ row.subTotalsRowIds = copy(row.subTotalsRowIds) +\
['%s-%s' % (name, value)] ['%s-%s' % (name, value)]
if isinstance(value, AdapterBase):
value = getName(baseObject(value))
value = normalizeName(value)
value = value.replace('.', '_')
row.subTotalsRowIds = copy(row.subTotalsRowIds) +\
['%s-%s' % (name, value)]
elif isinstance(row, GroupHeaderRow): elif isinstance(row, GroupHeaderRow):
sourceField = row.sourceField sourceField = row.sourceField
groupNumbers[sourceField] = \ groupNumbers[sourceField] = \