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):
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

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 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,)

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
# 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):