introduce special Style class; implement grouping via sequential access

This commit is contained in:
Helmut Merz 2012-04-11 12:34:03 +02:00
parent cd97e6787e
commit ec5e832dd6
2 changed files with 47 additions and 13 deletions

View file

@ -33,6 +33,33 @@ from cybertools.composer.report.interfaces import IField
from cybertools.composer.report.interfaces import fieldTypes from cybertools.composer.report.interfaces import fieldTypes
class Style(object):
initData = {}
def __getitem__(self, k):
return self.data[k]
def __init__(self, **kw):
self.data = dict(self.initData)
self.data.update(kw)
def __str__(self):
return ';'.join('%s: %s' % (k, v) for k, v in self.data.items())
class TableCellStyle(Style):
initData = dict(
width='auto',
textalign='left',
bordertop='1px solid #000',
borderright='1px solid #000',
borderbottom='1px solid #000',
borderleft='1px solid #000',
)
class Field(Component): class Field(Component):
implements(IField) implements(IField)
@ -49,6 +76,7 @@ class Field(Component):
outputWith = () outputWith = ()
colspan=1 colspan=1
colheaderspan=1 colheaderspan=1
style = TableCellStyle()
colwidth='auto' colwidth='auto'
coltextalign='left' coltextalign='left'
colbordertop='1px solid #000' colbordertop='1px solid #000'

View file

@ -81,27 +81,33 @@ class ResultSet(object):
headerRow = self.headerRowFactory(None, self) headerRow = self.headerRowFactory(None, self)
for c in columns: for c in columns:
if c.output: if c.output:
headerRow.data[c.output] = c.getDisplayValue(result[idx]) #headerRow.data[c.output] = c.getRawValue(result[idx])
headerRow.data[c.output] = c.getRawValue(result[idx])
result.insert(idx, headerRow) result.insert(idx, headerRow)
def getHeaderRow(self, row, columns):
headerRow = self.headerRowFactory(None, self)
for c in columns:
if c.output:
headerRow.data[c.output] = c.getRawValue(row)
return 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]
result = [row for row in result if self.queryCriteria.check(row)] result = [row for row in result if self.queryCriteria.check(row)]
if self.sortCriteria: if self.sortCriteria:
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): res = []
insert = [] groupValues = [None for f in self.groupColumns]
for f in self.groupColumns: for row in result:
output = [f] + f.outputWith for idx, f in enumerate(self.groupColumns):
if idx == 0: value = f.getRawValue(row)
insert.append(output) if value != groupValues[idx]:
else: groupValues[idx] = value
if (result[idx].getRawValue(f.name) != res.append(self.getHeaderRow(row, (f,) + f.outputWith))
result[idx-1].getRawValue(f.name)): res.append(row)
insert.append(output) result = res
for output in insert:
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