provide state field for reports, use in meeting minutes

This commit is contained in:
Helmut Merz 2012-08-25 10:08:56 +02:00
parent 6c72358426
commit e054d43221
4 changed files with 33 additions and 10 deletions

View file

@ -68,9 +68,19 @@
</metal:right>
<metal:state define-macro="state">
<tal:column define=" value python:col.getDisplayValue(row)">
<img tal:attributes="src string:$resourceBase${value/icon};
alt value/title;
title value/title" />
</tal:column>
</metal:state>
<metal:target define-macro="target">
<tal:column define="value python:col.getDisplayValue(row)">
<a tal:omit-tag="python:not getattr(item, 'showLinks', True) or not value['url']"
<a tal:omit-tag="python:
not getattr(item, 'showLinks', True) or not value['url']"
tal:attributes="href value/url"
tal:content="value/title" />
</tal:column>

View file

@ -27,6 +27,7 @@ from zope.schema.interfaces import IVocabularyFactory, IContextSourceBinder
from cybertools.composer.report.field import Field as BaseField
from cybertools.composer.report.result import ResultSet
from cybertools.stateful.interfaces import IStateful, IStatesDefinition
from cybertools.util.date import timeStamp2Date
from loops.common import baseObject
from loops.expert.report import ReportInstance
@ -100,6 +101,23 @@ class DateField(Field):
return value.isoformat()[:10]
class StateField(Field):
statesDefinition = 'workItemStates'
renderer = 'state'
def getDisplayValue(self, row):
if IStateful.providedBy(row.context):
stf = row.context
else:
stf = component.getAdapter(row.context, IStateful,
name=self.statesDefinition)
stateObject = stf.getStateObject()
icon = stateObject.icon or 'led%s.png' % stateObject.color
return dict(title=util._(stateObject.title),
icon='cybertools.icons/' + icon)
class VocabularyField(Field):
vocabulary = None

View file

@ -228,7 +228,8 @@ The user interface is a ReportConceptView subclass that is directly associated w
... print
08/12/28 19:00 20:15
{'url': '.../home/.36', 'title': u'loops Development'}
{'url': '.../home/.33', 'title': u'john'} 01:15 00:15 finished
{'url': '.../home/.33', 'title': u'john'} 01:15 00:15
{'icon': 'cybertools.icons/ledgreen.png', 'title': u'finished'}
>>> results.totals.data
{'effort': 900}

View file

@ -34,7 +34,7 @@ from cybertools.util.format import formatDate
from cybertools.util.jeep import Jeep
from loops.common import adapted, baseObject
from loops.expert.browser.report import ReportConceptView
from loops.expert.field import Field, TargetField, DateField, \
from loops.expert.field import Field, TargetField, DateField, StateField, \
TextField, UrlField
from loops.expert.field import SubReport, SubReportField
from loops.expert.report import ReportInstance
@ -50,13 +50,6 @@ class WorkStatementView(ReportConceptView):
# fields
class StateField(Field):
def getDisplayValue(self, row):
value = self.getValue(row)
return util._(value)
class TrackDateField(Field):
fieldType = 'date'
@ -165,6 +158,7 @@ effort = DurationField('effort', u'Effort',
state = StateField('state', u'State',
description=u'The state of the work.',
cssClass='center',
statesDefinition='workItemStates',
executionSteps=['query', 'output'])