From c185f72eeadbe8412d50b6a1d711fdc75b3d069f Mon Sep 17 00:00:00 2001 From: helmutm Date: Sun, 11 Jan 2009 18:32:49 +0000 Subject: [PATCH] work in progress: configurable work item listings git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3142 fd906abe-77d9-0310-91a1-e0d9ade77398 --- organize/work/browser.py | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/organize/work/browser.py b/organize/work/browser.py index 93e5a26..c2a8d7e 100644 --- a/organize/work/browser.py +++ b/organize/work/browser.py @@ -68,6 +68,18 @@ class BaseWorkItemsView(object): 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. @@ -82,7 +94,9 @@ class WorkItemsView(BaseWorkItemsView, NodeView): workItems = self.workItems if None in (workItems, target): return result - for wi in workItems.query(task=util.getUidForObject(target)): + 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) @@ -104,7 +118,10 @@ class UserWorkItems(BaseWorkItemsView, ConceptView): return [] result = [] for target in self.context.getParents([self.defaultPredicate]): - for wi in workItems.query(userName=util.getUidForObject(target)): + 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) @@ -233,6 +250,8 @@ actions.register('createWorkitem', 'portlet', DialogAction, # auxiliary functions def parseTime(s): + if not s: + return None if ':' in s: h, m = [int(v) for v in s.split(':')] else: @@ -240,4 +259,11 @@ def parseTime(s): return h * 3600 + m * 60 def parseDateTime(s): + if not s: + return None return int(time.mktime(time.strptime(s, '%Y-%m-%dT%H:%M:%S'))) + +def parseDate(s): + if not s: + return None + return int(time.mktime(time.strptime(s, '%Y-%m-%d')))