workflows: extend marker support to other jump types for real (#17248)
This commit is contained in:
parent
6829877759
commit
3e553b881c
|
@ -3384,6 +3384,114 @@ def test_workflow_jump_previous(pub):
|
|||
formdata.jump_status('_previous') # pop ()
|
||||
assert formdata.status == 'wf-%s' % st1.id
|
||||
|
||||
def test_workflow_jump_previous_on_submit(pub):
|
||||
user = create_user(pub)
|
||||
create_environment(pub)
|
||||
|
||||
wf = Workflow(name='blah')
|
||||
st1 = wf.add_status('North')
|
||||
st1.id = 'north'
|
||||
st2 = wf.add_status('South')
|
||||
st2.id = 'south'
|
||||
|
||||
commentable = CommentableWorkflowStatusItem()
|
||||
commentable.id = '_commentable'
|
||||
commentable.by = ['_submitter', '_receiver']
|
||||
commentable.button_label = 'CLICK ME!'
|
||||
|
||||
st1.items.append(commentable)
|
||||
commentable.parent = st1
|
||||
|
||||
jump = JumpOnSubmitWorkflowStatusItem()
|
||||
jump.id = '_jump'
|
||||
jump.status = st2.id
|
||||
st1.items.append(jump)
|
||||
jump.parent = st1
|
||||
jump.set_marker_on_status = True
|
||||
|
||||
back = ChoiceWorkflowStatusItem()
|
||||
back.id = '_back'
|
||||
back.label = 'Back'
|
||||
back.by = ['_receiver']
|
||||
back.status = '_previous'
|
||||
st2.items.append(back)
|
||||
back.parent = st2
|
||||
|
||||
wf.store()
|
||||
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.data_class().wipe()
|
||||
formdef.workflow = wf
|
||||
formdef.store()
|
||||
|
||||
formdata = formdef.data_class()()
|
||||
formdata.data = {}
|
||||
formdata.just_created()
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/%s/' % formdata.id)
|
||||
resp.form['comment'] = 'HELLO WORLD'
|
||||
resp = resp.form.submit('button_commentable')
|
||||
resp = resp.follow()
|
||||
|
||||
assert formdef.data_class().get(formdata.id).status == 'wf-south'
|
||||
assert formdef.data_class().get(formdata.id).workflow_data['_markers_stack']
|
||||
resp = resp.form.submit('button_back')
|
||||
resp = resp.follow()
|
||||
|
||||
assert formdef.data_class().get(formdata.id).status == 'wf-north'
|
||||
assert not formdef.data_class().get(formdata.id).workflow_data['_markers_stack']
|
||||
|
||||
def test_workflow_jump_previous_auto(pub):
|
||||
user = create_user(pub)
|
||||
create_environment(pub)
|
||||
|
||||
wf = Workflow(name='blah')
|
||||
st1 = wf.add_status('North')
|
||||
st1.id = 'north'
|
||||
st2 = wf.add_status('South')
|
||||
st2.id = 'south'
|
||||
|
||||
jump = JumpWorkflowStatusItem()
|
||||
jump.id = '_auto-jump'
|
||||
jump.set_marker_on_status = True
|
||||
jump.status = st2.id
|
||||
st1.items.append(jump)
|
||||
jump.parent = st1
|
||||
|
||||
back = ChoiceWorkflowStatusItem()
|
||||
back.id = '_back'
|
||||
back.label = 'Back'
|
||||
back.by = ['_receiver']
|
||||
back.status = '_previous'
|
||||
st2.items.append(back)
|
||||
back.parent = st2
|
||||
|
||||
wf.store()
|
||||
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.data_class().wipe()
|
||||
formdef.workflow = wf
|
||||
formdef.store()
|
||||
|
||||
formdata = formdef.data_class()()
|
||||
formdata.data = {}
|
||||
formdata.just_created()
|
||||
formdata.store()
|
||||
formdata.perform_workflow()
|
||||
assert formdata.status == 'wf-south'
|
||||
assert formdata.workflow_data['_markers_stack']
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/%s/' % formdata.id)
|
||||
resp = resp.form.submit('button_back')
|
||||
resp = resp.follow()
|
||||
|
||||
# jumped and got back
|
||||
assert formdef.data_class().get(formdata.id).status == 'wf-south'
|
||||
assert not formdef.data_class().get(formdata.id).workflow_data['_markers_stack']
|
||||
|
||||
def test_backoffice_fields(pub):
|
||||
user = create_user(pub)
|
||||
create_environment(pub)
|
||||
|
|
|
@ -193,6 +193,7 @@ class JumpWorkflowStatusItem(WorkflowStatusJumpItem):
|
|||
wf_status = self.get_target_status(formdata)
|
||||
if wf_status:
|
||||
formdata.status = 'wf-%s' % wf_status[0].id
|
||||
self.handle_markers_stack(formdata)
|
||||
|
||||
def must_jump(self, formdata):
|
||||
must_jump = True
|
||||
|
|
|
@ -1724,6 +1724,15 @@ class WorkflowStatusJumpItem(WorkflowStatusItem):
|
|||
value=self.set_marker_on_status,
|
||||
advanced=not(self.set_marker_on_status))
|
||||
|
||||
def handle_markers_stack(self, formdata):
|
||||
if self.set_marker_on_status:
|
||||
if formdata.workflow_data and '_markers_stack' in formdata.workflow_data:
|
||||
markers_stack = formdata.workflow_data.get('_markers_stack')
|
||||
else:
|
||||
markers_stack = []
|
||||
markers_stack.append({'status_id': formdata.status[3:]})
|
||||
formdata.update_workflow_data({'_markers_stack': markers_stack})
|
||||
|
||||
def get_parameters(self):
|
||||
return ('status', 'set_marker_on_status')
|
||||
|
||||
|
@ -1936,13 +1945,7 @@ class ChoiceWorkflowStatusItem(WorkflowStatusJumpItem):
|
|||
wf_status = self.get_target_status(formdata)
|
||||
if wf_status:
|
||||
evo.status = 'wf-%s' % wf_status[0].id
|
||||
if self.set_marker_on_status:
|
||||
if formdata.workflow_data and '_markers_stack' in formdata.workflow_data:
|
||||
markers_stack = formdata.workflow_data.get('_markers_stack')
|
||||
else:
|
||||
markers_stack = []
|
||||
markers_stack.append({'status_id': formdata.status[3:]})
|
||||
formdata.update_workflow_data({'_markers_stack': markers_stack})
|
||||
self.handle_markers_stack(formdata)
|
||||
form.clear_errors()
|
||||
return True # get out of processing loop
|
||||
|
||||
|
@ -1992,6 +1995,7 @@ class JumpOnSubmitWorkflowStatusItem(WorkflowStatusJumpItem):
|
|||
wf_status = self.get_target_status(formdata)
|
||||
if wf_status:
|
||||
evo.status = 'wf-%s' % wf_status[0].id
|
||||
self.handle_markers_stack(formdata)
|
||||
|
||||
def get_parameters(self):
|
||||
return ('status', 'set_marker_on_status')
|
||||
|
|
Loading…
Reference in New Issue