provide party state field for use in work and qualification reports
This commit is contained in:
parent
f6f266acb5
commit
81dde67338
3 changed files with 43 additions and 8 deletions
|
@ -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
|
||||||
|
|
|
@ -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,)
|
||||||
|
|
|
@ -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):
|
||||||
|
|
Loading…
Add table
Reference in a new issue