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: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"> <metal:target define-macro="target">
<tal:column define="value python:col.getDisplayValue(row)"> <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:attributes="href value/url"
tal:content="value/title" /> tal:content="value/title" />
</tal:column> </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.field import Field as BaseField
from cybertools.composer.report.result import ResultSet from cybertools.composer.report.result import ResultSet
from cybertools.stateful.interfaces import IStateful, IStatesDefinition
from cybertools.util.date import timeStamp2Date from cybertools.util.date import timeStamp2Date
from loops.common import baseObject from loops.common import baseObject
from loops.expert.report import ReportInstance from loops.expert.report import ReportInstance
@ -100,6 +101,23 @@ class DateField(Field):
return value.isoformat()[:10] 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): class VocabularyField(Field):
vocabulary = None vocabulary = None

View file

@ -228,7 +228,8 @@ The user interface is a ReportConceptView subclass that is directly associated w
... print ... print
08/12/28 19:00 20:15 08/12/28 19:00 20:15
{'url': '.../home/.36', 'title': u'loops Development'} {'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 >>> results.totals.data
{'effort': 900} {'effort': 900}

View file

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