provide party state field for use in work and qualification reports

This commit is contained in:
Helmut Merz 2015-03-18 07:34:31 +01:00
parent f6f266acb5
commit 81dde67338
3 changed files with 43 additions and 8 deletions

View file

@ -39,6 +39,9 @@ from loops import util
class Field(BaseField): class Field(BaseField):
def getContext(self, row):
return row.context
def getSelectValue(self, row): def getSelectValue(self, row):
return self.getValue(row) return self.getValue(row)
@ -120,12 +123,13 @@ class StateField(Field):
renderer = 'state' renderer = 'state'
def getDisplayValue(self, row): def getDisplayValue(self, row):
if IStateful.providedBy(row.context): context = self.getContext(row)
stf = row.context if IStateful.providedBy(context):
elif row.context is None: stf = context
elif context is None:
return None return None
else: else:
stf = component.getAdapter(row.context, IStateful, stf = component.getAdapter(context, IStateful,
name=self.statesDefinition) name=self.statesDefinition)
stateObject = stf.getStateObject() stateObject = stf.getStateObject()
icon = stateObject.icon or 'led%s.png' % stateObject.color icon = stateObject.icon or 'led%s.png' % stateObject.color

View file

@ -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 deadline, day, task, party, state
from loops.organize.work.report import dayStart, dayEnd from loops.organize.work.report import dayStart, dayEnd
from loops.organize.work.report import workTitle, workDescription from loops.organize.work.report import workTitle, workDescription
from loops.organize.work.report import partyState
from loops import util from loops import util
@ -38,7 +39,8 @@ class QualificationOverview(ReportInstance):
rowFactory = WorkRow rowFactory = WorkRow
fields = Jeep((task, party, workTitle, dayStart, dayEnd, state)) # +deadline? fields = Jeep((task, party, workTitle, dayStart, dayEnd, state,))
#partyState,)) # +deadline?
defaultOutputFields = fields defaultOutputFields = fields
defaultSortCriteria = (party, task,) defaultSortCriteria = (party, task,)

View file

@ -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 # 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 # 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.app.pagetemplate import ViewPageTemplateFile
from zope.cachedescriptors.property import Lazy 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 Report
from cybertools.composer.report.base import LeafQueryCriteria, CompoundQueryCriteria from cybertools.composer.report.base import LeafQueryCriteria, CompoundQueryCriteria
from cybertools.composer.report.field import CalculatedField from cybertools.composer.report.field import CalculatedField
from cybertools.composer.report.result import ResultSet, Row as BaseRow from cybertools.composer.report.result import ResultSet, Row as BaseRow
from cybertools.meta.interfaces import IOptions
from cybertools.organize.interfaces import IWorkItems from cybertools.organize.interfaces import IWorkItems
from cybertools.stateful.interfaces import IStateful
from cybertools.util.date import timeStamp2Date, timeStamp2ISO from cybertools.util.date import timeStamp2Date, timeStamp2ISO
from cybertools.util.jeep import Jeep from cybertools.util.jeep import Jeep
from loops.common import adapted, baseObject from loops.common import adapted, baseObject
@ -77,6 +79,19 @@ class DurationField(Field):
return u'%02i:%02i' % divmod(value * 60, 60) 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 # common fields
tasks = Field('tasks', u'Tasks', tasks = Field('tasks', u'Tasks',
@ -142,6 +157,11 @@ state = WorkItemStateField('state', u'State',
cssClass='center', cssClass='center',
statesDefinition='workItemStates', statesDefinition='workItemStates',
executionSteps=['query', 'output']) 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 # basic definitions and work report instance
@ -177,10 +197,19 @@ class WorkRow(BaseRow):
value = self.getDuration(attr) value = self.getDuration(attr)
return value 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, attributeHandlers = dict(day=getDay,
dayStart=getStart, dayEnd=getEnd, dayStart=getStart, dayEnd=getEnd,
dayFrom=getDay, dayTo=getDay, dayFrom=getDay, dayTo=getDay,
duration=getDuration, effort=getEffort) duration=getDuration, effort=getEffort,)
#partyState=getPartyState)
class WorkReportInstance(ReportInstance): class WorkReportInstance(ReportInstance):