work in progress: task management: creation of work items OK

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3097 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2008-12-29 12:27:55 +00:00
parent 07c98536e7
commit a77166dfee
4 changed files with 67 additions and 23 deletions

View file

@ -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 for the view on the currently shown node. The data from the form is processed
by calling the form controller's update method by calling the form controller's update method
>>> #input = {'form.action': 'create_workitem', 'workitem.action': 'finish'} >>> input = {u'form.action': u'create_workitem', u'workitem.action': u'finish',
>>> input = {u'comment': u'Comment', u'workitem.action': u'finish', ... u'description': u'Description', u'comment': u'Comment',
... u'description': u'Description', u'start_time': u'T19:24:00', ... u'start_date': u'2008-12-28', u'start_time': u'T19:00:00',
... u'form.action': u'create_workitem', u'end_time': u'T19:24:00', ... u'end_time': u'T20:15:00', u'duration': u'1:15', u'effort': u'0:15'}
... u'duration': u'1:15', u'effort': u'0:15', u'start_date': u'2008-12-28'}
>>> request = TestRequest(form=input) >>> request = TestRequest(form=input)
>>> request.setPrincipal(pJohn) >>> request.setPrincipal(pJohn)
@ -94,6 +93,18 @@ by calling the form controller's update method
>>> cwiController.update() >>> cwiController.update()
False False
>>> list(workItems)
[<WorkItem ['36', 1, '33', '2008-12-28 19:15', 'finished']:
{'comment': u'Comment', 'end': 1230491700, 'description': u'Description',
'created': ..., 'creator': '33', 'assigned': ...,
'start': 1230487200, 'duration': 4500, 'effort': 900}>]
>>> 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 Fin de partie
============= =============

View file

@ -78,18 +78,41 @@ class CreateWorkItem(EditObject, BaseTrackView):
def object(self): def object(self):
return self.view.virtualTargetObject return self.view.virtualTargetObject
@Lazy def processForm(self):
def data(self):
result = {}
form = self.request.form form = self.request.form
#print '***', form action = form.get('workitem.action')
return result 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): def update(self):
rm = self.view.loopsRoot.getRecordManager() rm = self.view.loopsRoot.getRecordManager()
workItems = IWorkItems(rm.get('work')) workItems = IWorkItems(rm.get('work'))
action, data = self.processForm()
if not action:
return True
wi = workItems.add(util.getUidForObject(self.object), self.personId) wi = workItems.add(util.getUidForObject(self.object), self.personId)
wi.doAction('finish', **self.data) wi.doAction(action, **data)
url = self.view.virtualTargetUrl + '?version=this' url = self.view.virtualTargetUrl + '?version=this'
self.request.response.redirect(url) self.request.response.redirect(url)
return False return False
@ -104,3 +127,16 @@ actions.register('createWorkitem', 'portlet', DialogAction,
dialogName='createWorkitem', dialogName='createWorkitem',
prerequisites=['registerDojoDateWidget', 'registerDojoNumberWidget'], 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')))

View file

@ -8,6 +8,8 @@
<zope:class class="loops.organize.work.base.WorkItem"> <zope:class class="loops.organize.work.base.WorkItem">
<require permission="zope.View" <require permission="zope.View"
interface="cybertools.organize.work.IWorkItem" /> interface="cybertools.organize.work.IWorkItem" />
<require permission="zope.View"
attributes="getName" />
<require permission="zope.ManageContent" <require permission="zope.ManageContent"
set_schema="cybertools.organize.work.IWorkItem" /> set_schema="cybertools.organize.work.IWorkItem" />
</zope:class> </zope:class>

View file

@ -21,29 +21,24 @@
<label i18n:translate="" <label i18n:translate=""
for="start-end">Start - End</label> for="start-end">Start - End</label>
<div id="start-end"> <div id="start-end">
<input type="text" style="width: 8em" <input type="text" name="start_date" style="width: 8em"
dojoType="dijit.form.DateTextBox" dojoType="dijit.form.DateTextBox"
name="start_date" required="true"
tal:attributes="value view/defaultDate" /> tal:attributes="value view/defaultDate" />
<input type="text" style="width: 6em" <input type="text" name="start_time" style="width: 6em"
dojoType="dijit.form.TimeTextBox" dojoType="dijit.form.TimeTextBox"
name="start_time" required="true"
tal:attributes="value view/defaultTime" /> - tal:attributes="value view/defaultTime" /> -
<input type="text" style="width: 6em" <input type="text" name="end_time" style="width: 6em"
dojoType="dijit.form.TimeTextBox" dojoType="dijit.form.TimeTextBox"
name="end_time" required="true"
tal:attributes="value view/defaultTime" /></div> tal:attributes="value view/defaultTime" /></div>
<label i18n:translate="" <label i18n:translate=""
for="duration-effort">Duration / Effort (hh:mm)</label> for="duration-effort">Duration / Effort (hh:mm)</label>
<div id="duration-effort"> <div id="duration-effort">
<input type="text" style="width: 5em" <input type="text" name="duration" style="width: 5em"
dojoType="dijit.form.ValidationTextBox" dojoType="dijit.form.ValidationTextBox"
regexp="[0-9]{1,2}(:[0-5][0-9]){0,1}" regexp="[0-9]{1,2}(:[0-5][0-9]){0,1}" /> /
name="duration" /> / <input type="text" name="effort" style="width: 5em"
<input type="text" style="width: 5em"
dojoType="dijit.form.ValidationTextBox" dojoType="dijit.form.ValidationTextBox"
regexp="[0-9]{1,2}(:[0-5][0-9]){0,1}" regexp="[0-9]{1,2}(:[0-5][0-9]){0,1}" /></div>
name="effort" /></div>
</div> </div>
<div> <div>
<label i18n:translate="" <label i18n:translate=""