diff --git a/expert/field.py b/expert/field.py index 2263b84..a7fb33d 100644 --- a/expert/field.py +++ b/expert/field.py @@ -39,6 +39,9 @@ from loops import util class Field(BaseField): + def getContext(self, row): + return row.context + def getSelectValue(self, row): return self.getValue(row) @@ -120,12 +123,13 @@ class StateField(Field): renderer = 'state' def getDisplayValue(self, row): - if IStateful.providedBy(row.context): - stf = row.context - elif row.context is None: + context = self.getContext(row) + if IStateful.providedBy(context): + stf = context + elif context is None: return None else: - stf = component.getAdapter(row.context, IStateful, + stf = component.getAdapter(context, IStateful, name=self.statesDefinition) stateObject = stf.getStateObject() icon = stateObject.icon or 'led%s.png' % stateObject.color diff --git a/knowledge/qualification/report.py b/knowledge/qualification/report.py index 7849b70..494bb97 100644 --- a/knowledge/qualification/report.py +++ b/knowledge/qualification/report.py @@ -28,6 +28,7 @@ from loops.organize.work.report import WorkRow from loops.organize.work.report import deadline, day, task, party, state from loops.organize.work.report import dayStart, dayEnd from loops.organize.work.report import workTitle, workDescription +from loops.organize.work.report import partyState from loops import util @@ -38,7 +39,8 @@ class QualificationOverview(ReportInstance): rowFactory = WorkRow - fields = Jeep((task, party, workTitle, dayStart, dayEnd, state)) # +deadline? + fields = Jeep((task, party, workTitle, dayStart, dayEnd, state,)) + #partyState,)) # +deadline? defaultOutputFields = fields defaultSortCriteria = (party, task,) diff --git a/organize/work/report.py b/organize/work/report.py index c3e90d1..648a4af 100644 --- a/organize/work/report.py +++ b/organize/work/report.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2014 Helmut Merz helmutm@cy55.de +# Copyright (c) 2015 Helmut Merz helmutm@cy55.de # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -22,13 +22,15 @@ Work report definitions. from zope.app.pagetemplate import ViewPageTemplateFile from zope.cachedescriptors.property import Lazy -from zope.component import adapter +from zope.component import adapter, getAdapter from cybertools.composer.report.base import Report from cybertools.composer.report.base import LeafQueryCriteria, CompoundQueryCriteria from cybertools.composer.report.field import CalculatedField from cybertools.composer.report.result import ResultSet, Row as BaseRow +from cybertools.meta.interfaces import IOptions from cybertools.organize.interfaces import IWorkItems +from cybertools.stateful.interfaces import IStateful from cybertools.util.date import timeStamp2Date, timeStamp2ISO from cybertools.util.jeep import Jeep from loops.common import adapted, baseObject @@ -77,6 +79,19 @@ class DurationField(Field): return u'%02i:%02i' % divmod(value * 60, 60) +class PartyStateField(StateField): + + def getContext(self, row): + if row.context is None: + return None + party = util.getObjectForUid(row.context.party) + ptype = adapted(party.conceptType) + stdefs = IOptions(ptype)('organize.stateful') or [] + if self.statesDefinition in stdefs: + return party + return None + + # common fields tasks = Field('tasks', u'Tasks', @@ -142,6 +157,11 @@ state = WorkItemStateField('state', u'State', cssClass='center', statesDefinition='workItemStates', executionSteps=['query', 'output']) +partyState = PartyStateField('partyState', u'Party State', + description=u'State of the party, mainly for selection.', + cssClass='center', + statesDefinition='contact_states', + executionSteps=['query', 'output']) # basic definitions and work report instance @@ -177,10 +197,19 @@ class WorkRow(BaseRow): value = self.getDuration(attr) return value + def xx_getPartyState(self, attr): + party = util.getObjectForUid(self.context.party) + ptype = adapted(party.conceptType) + for std in IOptions(ptype)('organize.stateful') or []: + stf = getAdapter(party, IStateful, name=std) + return stf.state + return None + attributeHandlers = dict(day=getDay, dayStart=getStart, dayEnd=getEnd, dayFrom=getDay, dayTo=getDay, - duration=getDuration, effort=getEffort) + duration=getDuration, effort=getEffort,) + #partyState=getPartyState) class WorkReportInstance(ReportInstance):