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'])