improve group handling
This commit is contained in:
parent
25030e3e8d
commit
cd97e6787e
2 changed files with 21 additions and 8 deletions
|
@ -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'
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue