diff --git a/expert/browser/results.pt b/expert/browser/results.pt
index 7d30c4f..2fd8129 100644
--- a/expert/browser/results.pt
+++ b/expert/browser/results.pt
@@ -68,9 +68,19 @@
+
+
+
+
+
+
+
-
diff --git a/expert/field.py b/expert/field.py
index 2295771..2ff64af 100644
--- a/expert/field.py
+++ b/expert/field.py
@@ -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
diff --git a/organize/work/README.txt b/organize/work/README.txt
index 49bb1a8..bc9b5d4 100644
--- a/organize/work/README.txt
+++ b/organize/work/README.txt
@@ -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}
diff --git a/organize/work/report.py b/organize/work/report.py
index 537e32f..1d15e8f 100644
--- a/organize/work/report.py
+++ b/organize/work/report.py
@@ -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'])