diff --git a/organize/work/README.txt b/organize/work/README.txt index 8d0d13a..473f380 100644 --- a/organize/work/README.txt +++ b/organize/work/README.txt @@ -79,11 +79,10 @@ When this form is submitted, a form controller is automatically created for the view on the currently shown node. The data from the form is processed by calling the form controller's update method - >>> #input = {'form.action': 'create_workitem', 'workitem.action': 'finish'} - >>> input = {u'comment': u'Comment', u'workitem.action': u'finish', - ... u'description': u'Description', u'start_time': u'T19:24:00', - ... u'form.action': u'create_workitem', u'end_time': u'T19:24:00', - ... u'duration': u'1:15', u'effort': u'0:15', u'start_date': u'2008-12-28'} + >>> input = {u'form.action': u'create_workitem', u'workitem.action': u'finish', + ... u'description': u'Description', u'comment': u'Comment', + ... u'start_date': u'2008-12-28', u'start_time': u'T19:00:00', + ... u'end_time': u'T20:15:00', u'duration': u'1:15', u'effort': u'0:15'} >>> request = TestRequest(form=input) >>> request.setPrincipal(pJohn) @@ -94,6 +93,18 @@ by calling the form controller's update method >>> cwiController.update() False + >>> list(workItems) + [] + + >>> from loops.organize.work.browser import WorkItemView + >>> wi01 = workItems['0000001'] + >>> view = WorkItemView(wi01, TestRequest()) + >>> view.taskUrl + 'http://127.0.0.1/loops/concepts/loops_dev/@@SelectedManagementView.html' + Fin de partie ============= diff --git a/organize/work/browser.py b/organize/work/browser.py index 63e49ad..ae52d67 100644 --- a/organize/work/browser.py +++ b/organize/work/browser.py @@ -78,18 +78,41 @@ class CreateWorkItem(EditObject, BaseTrackView): def object(self): return self.view.virtualTargetObject - @Lazy - def data(self): - result = {} + def processForm(self): form = self.request.form - #print '***', form - return result + action = form.get('workitem.action') + if not action: + return None, {} + result = dict() + def setValue(k): + v = form.get(k) + if v: + result[k] = v + for k in ('description', 'comment'): + setValue(k) + startDate = form.get('start_date') + startTime = form.get('start_time') + endTime = form.get('end_time') + if startDate and startTime: + result['start'] = parseDateTime(startDate + startTime) + if startDate and endTime: + result['end'] = parseDateTime(startDate + endTime) + duration = form.get('duration') + if duration: + result['duration'] = parseTime(duration) + effort = form.get('effort') + if effort: + result['effort'] = parseTime(effort) + return action, result def update(self): rm = self.view.loopsRoot.getRecordManager() workItems = IWorkItems(rm.get('work')) + action, data = self.processForm() + if not action: + return True wi = workItems.add(util.getUidForObject(self.object), self.personId) - wi.doAction('finish', **self.data) + wi.doAction(action, **data) url = self.view.virtualTargetUrl + '?version=this' self.request.response.redirect(url) return False @@ -104,3 +127,16 @@ actions.register('createWorkitem', 'portlet', DialogAction, dialogName='createWorkitem', prerequisites=['registerDojoDateWidget', 'registerDojoNumberWidget'], ) + + +# auxiliary functions + +def parseTime(s): + if ':' in s: + h, m = [int(v) for v in s.split(':')] + else: + h, m = int(s), 0 + return h * 3600 + m * 60 + +def parseDateTime(s): + return int(time.mktime(time.strptime(s, '%Y-%m-%dT%H:%M:%S'))) diff --git a/organize/work/configure.zcml b/organize/work/configure.zcml index f9231bc..914b17d 100644 --- a/organize/work/configure.zcml +++ b/organize/work/configure.zcml @@ -8,6 +8,8 @@ + diff --git a/organize/work/work_macros.pt b/organize/work/work_macros.pt index 4cfb2ed..5634aae 100644 --- a/organize/work/work_macros.pt +++ b/organize/work/work_macros.pt @@ -21,29 +21,24 @@
- - - -
- / - / +
+ regexp="[0-9]{1,2}(:[0-5][0-9]){0,1}" />