improve group handling

This commit is contained in:
Helmut Merz 2012-04-11 11:20:29 +02:00
parent 25030e3e8d
commit cd97e6787e
2 changed files with 21 additions and 8 deletions

View file

@ -45,6 +45,8 @@ class Field(Component):
renderer = 'standard' renderer = 'standard'
operator = 'in' operator = 'in'
showTitle = True showTitle = True
output = None
outputWith = ()
colspan=1 colspan=1
colheaderspan=1 colheaderspan=1
colwidth='auto' colwidth='auto'

View file

@ -59,9 +59,15 @@ class Row(BaseRow):
self.parent.context.fields if 'group' in f.executionSteps] self.parent.context.fields if 'group' in f.executionSteps]
class GroupHeaderRow(BaseRow):
def getRawValue(self, attr):
return self.data.get(attr, u'')
class ResultSet(object): class ResultSet(object):
def __init__(self, context, data, rowFactory=Row, headerRowFactory=Row, def __init__(self, context, data, rowFactory=Row, headerRowFactory=GroupHeaderRow,
sortCriteria=None, queryCriteria=BaseQueryCriteria()): sortCriteria=None, queryCriteria=BaseQueryCriteria()):
self.context = context # the report or report instance self.context = context # the report or report instance
self.data = data self.data = data
@ -71,8 +77,12 @@ class ResultSet(object):
self.queryCriteria = queryCriteria self.queryCriteria = queryCriteria
self.totals = BaseRow(None, self) self.totals = BaseRow(None, self)
def insertHeaderRow(self, idx, result): def insertHeaderRow(self, idx, result, columns):
result.insert(idx, self.headerRowFactory(result[idx].context, self)) headerRow = self.headerRowFactory(None, self)
for c in columns:
if c.output:
headerRow.data[c.output] = c.getDisplayValue(result[idx])
result.insert(idx, headerRow)
def getResult(self): def getResult(self):
result = [self.rowFactory(item, self) for item in self.data] result = [self.rowFactory(item, self) for item in self.data]
@ -81,16 +91,17 @@ class ResultSet(object):
result.sort(key=lambda x: [f.getSortValue(x) for f in self.sortCriteria]) result.sort(key=lambda x: [f.getSortValue(x) for f in self.sortCriteria])
if self.groupColumns: if self.groupColumns:
for idx, row in enumerate(result): for idx, row in enumerate(result):
insert = False insert = []
for f in self.groupColumns: for f in self.groupColumns:
output = [f] + f.outputWith
if idx == 0: if idx == 0:
insert = True insert.append(output)
else: else:
if (result[idx].getRawValue(f.name) != if (result[idx].getRawValue(f.name) !=
result[idx-1].getRawValue(f.name)): result[idx-1].getRawValue(f.name)):
insert = True insert.append(output)
if insert: for output in insert:
self.insertHeaderRow(idx, result) self.insertHeaderRow(idx, result, output)
for idx, row in enumerate(result): for idx, row in enumerate(result):
row.sequenceNumber = idx + 1 row.sequenceNumber = idx + 1
return result return result