- work items: provide move action for assigning a work item to
another task git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@4197 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
16eb14155a
commit
1133edf677
1 changed files with 23 additions and 5 deletions
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2009 Helmut Merz helmutm@cy55.de
|
# Copyright (c) 2011 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
|
||||||
|
@ -46,7 +46,7 @@ def workItemStates():
|
||||||
color='red'),
|
color='red'),
|
||||||
State('planned', 'planned',
|
State('planned', 'planned',
|
||||||
('plan', 'accept', 'start', 'work', 'finish', 'delegate',
|
('plan', 'accept', 'start', 'work', 'finish', 'delegate',
|
||||||
'cancel', 'modify'), color='red'),
|
'move', 'cancel', 'modify'), color='red'),
|
||||||
State('accepted', 'accepted',
|
State('accepted', 'accepted',
|
||||||
('plan', 'accept', 'start', 'work', 'finish', 'cancel', 'modify'),
|
('plan', 'accept', 'start', 'work', 'finish', 'cancel', 'modify'),
|
||||||
color='yellow'),
|
color='yellow'),
|
||||||
|
@ -66,6 +66,8 @@ def workItemStates():
|
||||||
# not directly reachable states:
|
# not directly reachable states:
|
||||||
State('delegated', 'delegated', (), color='purple'),
|
State('delegated', 'delegated', (), color='purple'),
|
||||||
State('delegated_x', 'delegated', (), color='purple'),
|
State('delegated_x', 'delegated', (), color='purple'),
|
||||||
|
State('moved', 'moved', (), color='grey'),
|
||||||
|
State('moved_x', 'moved', (), color='grey'),
|
||||||
State('replaced', 'replaced', (), color='grey'),
|
State('replaced', 'replaced', (), color='grey'),
|
||||||
State('planned_x', 'planned', (), color='red'),
|
State('planned_x', 'planned', (), color='red'),
|
||||||
State('accepted_x', 'accepted', (), color='yellow'),
|
State('accepted_x', 'accepted', (), color='yellow'),
|
||||||
|
@ -79,6 +81,7 @@ def workItemStates():
|
||||||
Transition('cancel', 'cancel', 'cancelled'),
|
Transition('cancel', 'cancel', 'cancelled'),
|
||||||
Transition('modify', 'modify', 'new'),
|
Transition('modify', 'modify', 'new'),
|
||||||
Transition('delegate', 'delegate', 'planned'),
|
Transition('delegate', 'delegate', 'planned'),
|
||||||
|
Transition('move', 'move', 'planned'),
|
||||||
Transition('close', 'close', 'closed'),
|
Transition('close', 'close', 'closed'),
|
||||||
initialState='new')
|
initialState='new')
|
||||||
|
|
||||||
|
@ -209,6 +212,19 @@ class WorkItem(Stateful, Track):
|
||||||
new.reindex('state')
|
new.reindex('state')
|
||||||
return new
|
return new
|
||||||
|
|
||||||
|
def move(self, userName, **kw):
|
||||||
|
if self.state in ('planned', 'accepted', 'done'):
|
||||||
|
self.state = self.state + '_x'
|
||||||
|
self.reindex('state')
|
||||||
|
moved = self.createNew('move', userName, **kw)
|
||||||
|
moved.state = 'moved'
|
||||||
|
moved.reindex('state')
|
||||||
|
task = kw.pop('task', None)
|
||||||
|
new = moved.createNew('plan', userName, taskId=task, **kw)
|
||||||
|
new.doTransition('plan')
|
||||||
|
new.reindex('state')
|
||||||
|
return new
|
||||||
|
|
||||||
def close(self, userName, **kw):
|
def close(self, userName, **kw):
|
||||||
kw['start'] = kw['end'] = getTimeStamp()
|
kw['start'] = kw['end'] = getTimeStamp()
|
||||||
kw['duration'] = kw['effort'] = None
|
kw['duration'] = kw['effort'] = None
|
||||||
|
@ -222,7 +238,8 @@ class WorkItem(Stateful, Track):
|
||||||
item.reindex('state')
|
item.reindex('state')
|
||||||
return new
|
return new
|
||||||
|
|
||||||
specialActions = dict(modify=modify, delegate=delegate, close=close)
|
specialActions = dict(modify=modify, delegate=delegate, move=move,
|
||||||
|
close=close)
|
||||||
|
|
||||||
def setData(self, ignoreParty=False, **kw):
|
def setData(self, ignoreParty=False, **kw):
|
||||||
if self.state != 'new':
|
if self.state != 'new':
|
||||||
|
@ -244,7 +261,8 @@ class WorkItem(Stateful, Track):
|
||||||
if start and end and end < start:
|
if start and end and end < start:
|
||||||
data['end'] = start
|
data['end'] = start
|
||||||
|
|
||||||
def createNew(self, action, userName, copyData=None, **kw):
|
def createNew(self, action, userName, taskId=None, copyData=None, **kw):
|
||||||
|
taskId = taskId or self.taskId
|
||||||
if copyData is None:
|
if copyData is None:
|
||||||
copyData = self.initAttributes
|
copyData = self.initAttributes
|
||||||
newData = {}
|
newData = {}
|
||||||
|
@ -259,7 +277,7 @@ class WorkItem(Stateful, Track):
|
||||||
if v not in (None, _not_found):
|
if v not in (None, _not_found):
|
||||||
newData[k] = v
|
newData[k] = v
|
||||||
workItems = IWorkItems(getParent(self))
|
workItems = IWorkItems(getParent(self))
|
||||||
new = workItems.add(self.taskId, userName, self.runId, **newData)
|
new = workItems.add(taskId, userName, self.runId, **newData)
|
||||||
return new
|
return new
|
||||||
|
|
||||||
def replace(self, other, keepState=False):
|
def replace(self, other, keepState=False):
|
||||||
|
|
Loading…
Add table
Reference in a new issue