some minor refactorings as preparation for more flexible queries

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3171 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2009-01-22 18:38:23 +00:00
parent da8c54e0ea
commit afa64c7028
3 changed files with 86 additions and 88 deletions

View file

@ -50,88 +50,6 @@ from loops.util import _
work_macros = ViewPageTemplateFile('work_macros.pt')
# work item collections
class BaseWorkItemsView(object):
columns = set(['Task', 'User', 'Title', 'Start', 'End', 'Duration', 'Info'])
lastMonth = lastDay = None
def __init__(self, context, request):
self.context = context
self.request = request
@Lazy
def work_macros(self):
return work_macros.macros
@Lazy
def workItems(self):
rm = self.loopsRoot.getRecordManager()
if rm is not None:
ts = rm.get('work')
if ts is not None:
return IWorkItems(ts)
@Lazy
def workItemsCriteria(self):
result = {}
form = self.request.form
start = parseDate(form.get('wi_start'))
end = parseDate(form.get('wi_end'))
if end:
end += 3600 * 24 # include full end date
if start or end:
result['timeFromTo'] = (start, end)
return result
class WorkItemsView(BaseWorkItemsView, NodeView):
""" Standard view for showing work items for a node's target.
"""
columns = set(['User', 'Title', 'Day', 'Start', 'End', 'Duration', 'Info'])
@Lazy
def allWorkItems(self):
result = []
target = self.virtualTargetObject
workItems = self.workItems
if None in (workItems, target):
return result
criteria = self.workItemsCriteria
criteria['task'] = util.getUidForObject(target)
for wi in workItems.query(**criteria):
result.append(WorkItemDetails(self, wi))
return sorted(result, key=lambda x: x.track.timeStamp)
class UserWorkItems(BaseWorkItemsView, ConceptView):
""" A query view showing work items for a person, the query's parent.
"""
columns = set(['Task', 'Title', 'Day', 'Start', 'End', 'Duration', 'Info'])
@property
def macro(self):
return self.work_macros['userworkitems']
@Lazy
def allWorkItems(self):
workItems = self.workItems
if self.workItems is None:
return []
result = []
for target in self.context.getParents([self.defaultPredicate]):
criteria = dict(self.workItemsCriteria)
un = criteria.setdefault('userName', [])
un.append(util.getUidForObject(target))
for wi in workItems.query(**criteria):
result.append(WorkItemDetails(self, wi))
return sorted(result, key=lambda x: x.track.timeStamp)
# single work items
class WorkItemDetails(TrackDetails):
@ -228,6 +146,87 @@ class WorkItemView(BaseTrackView):
"""
# work item collections
class BaseWorkItemsView(object):
allColumns = set(['Task', 'User', 'Title', 'Start', 'End', 'Duration', 'Info'])
columns = allColumns
detailsFactory = WorkItemDetails
lastMonth = lastDay = None
def __init__(self, context, request):
self.context = context
self.request = request
@Lazy
def work_macros(self):
return work_macros.macros
@Lazy
def workItems(self):
rm = self.loopsRoot.getRecordManager()
if rm is not None:
ts = rm.get('work')
if ts is not None:
return IWorkItems(ts)
@Lazy
def baseCriteria(self):
result = {}
form = self.request.form
start = parseDate(form.get('wi_start'))
end = parseDate(form.get('wi_end'))
if end:
end += 3600 * 24 # include full end date
if start or end:
result['timeFromTo'] = (start, end)
state = form.get('wi_state')
if state is not None:
result['state'] = state
return result
def query(self, **criteria):
if self.workItems is None:
return []
return [self.detailsFactory(self, wi)
for wi in self.workItems.query(**criteria)]
class WorkItemsView(BaseWorkItemsView, NodeView):
""" Standard view for showing work items for a node's target.
"""
columns = set(['User', 'Title', 'Day', 'Start', 'End', 'Duration', 'Info'])
@Lazy
def listWorkItems(self):
target = self.virtualTargetObject
criteria = self.baseCriteria
criteria['task'] = util.getUidForObject(target)
return sorted(self.query(**criteria), key=lambda x: x.track.timeStamp)
class PersonWorkItems(BaseWorkItemsView, ConceptView):
""" A query view showing work items for a person, the query's parent.
"""
columns = set(['Task', 'Title', 'Day', 'Start', 'End', 'Duration', 'Info'])
@property
def macro(self):
return self.work_macros['userworkitems']
@Lazy
def listWorkItems(self):
criteria = self.baseCriteria
for target in self.context.getParents([self.defaultPredicate]):
un = criteria.setdefault('userName', [])
un.append(util.getUidForObject(target))
return sorted(self.query(**criteria), key=lambda x: x.track.timeStamp)
# forms and form controllers
class CreateWorkItemForm(ObjectForm, BaseTrackView):

View file

@ -29,11 +29,11 @@
permission="zope.View" />
<zope:adapter
name="userworkitems.html"
name="personworkitems.html"
for="loops.interfaces.IConcept
zope.publisher.interfaces.browser.IBrowserRequest"
provides="zope.interface.Interface"
factory="loops.organize.work.browser.UserWorkItems"
factory="loops.organize.work.browser.PersonWorkItems"
permission="zope.View" />
<browser:page

View file

@ -6,21 +6,20 @@
<metal:work define-macro="workitems"
tal:define="work nocall:view/workItems"
tal:condition="work/allWorkItems">
tal:condition="work/listWorkItems">
<br />
<h2 i18n:translate="">Work Items</h2>
<metal:workitems define-macro="workitems_listing"
tal:define="work nocall:work|nocall:view/workItems;">
<table class="listing">
<tr>
<tal:colheader repeat="column python:
('Day', 'Start', 'End', 'Duration', 'Task', 'User', 'Title', 'Info')">
<tal:colheader repeat="column work/allColumns">
<th tal:condition="python: column in work.columns"
tal:content="column"
i18n:translate="">Task</th>
</tal:colheader>
</tr>
<tal:workitem tal:repeat="row work/allWorkItems">
<tal:workitem tal:repeat="row work/listWorkItems">
<tr tal:condition="row/monthChanged">
<td class="headline"
tal:attributes="colspan python: len(work.columns)"