subtotals fixes
This commit is contained in:
parent
0208aa5595
commit
c5715c322d
1 changed files with 17 additions and 5 deletions
|
@ -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] = \
|
||||||
|
|
Loading…
Add table
Reference in a new issue