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