provide state field for reports, use in meeting minutes
This commit is contained in:
parent
6c72358426
commit
e054d43221
4 changed files with 33 additions and 10 deletions
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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}
|
||||||
|
|
|
@ -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'])
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue