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 ()
|
formdata.jump_status('_previous') # pop ()
|
||||||
assert formdata.status == 'wf-%s' % st1.id
|
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):
|
def test_backoffice_fields(pub):
|
||||||
user = create_user(pub)
|
user = create_user(pub)
|
||||||
create_environment(pub)
|
create_environment(pub)
|
||||||
|
|
|
@ -193,6 +193,7 @@ class JumpWorkflowStatusItem(WorkflowStatusJumpItem):
|
||||||
wf_status = self.get_target_status(formdata)
|
wf_status = self.get_target_status(formdata)
|
||||||
if wf_status:
|
if wf_status:
|
||||||
formdata.status = 'wf-%s' % wf_status[0].id
|
formdata.status = 'wf-%s' % wf_status[0].id
|
||||||
|
self.handle_markers_stack(formdata)
|
||||||
|
|
||||||
def must_jump(self, formdata):
|
def must_jump(self, formdata):
|
||||||
must_jump = True
|
must_jump = True
|
||||||
|
|
|
@ -1724,6 +1724,15 @@ class WorkflowStatusJumpItem(WorkflowStatusItem):
|
||||||
value=self.set_marker_on_status,
|
value=self.set_marker_on_status,
|
||||||
advanced=not(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):
|
def get_parameters(self):
|
||||||
return ('status', 'set_marker_on_status')
|
return ('status', 'set_marker_on_status')
|
||||||
|
|
||||||
|
@ -1936,13 +1945,7 @@ class ChoiceWorkflowStatusItem(WorkflowStatusJumpItem):
|
||||||
wf_status = self.get_target_status(formdata)
|
wf_status = self.get_target_status(formdata)
|
||||||
if wf_status:
|
if wf_status:
|
||||||
evo.status = 'wf-%s' % wf_status[0].id
|
evo.status = 'wf-%s' % wf_status[0].id
|
||||||
if self.set_marker_on_status:
|
self.handle_markers_stack(formdata)
|
||||||
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})
|
|
||||||
form.clear_errors()
|
form.clear_errors()
|
||||||
return True # get out of processing loop
|
return True # get out of processing loop
|
||||||
|
|
||||||
|
@ -1992,6 +1995,7 @@ class JumpOnSubmitWorkflowStatusItem(WorkflowStatusJumpItem):
|
||||||
wf_status = self.get_target_status(formdata)
|
wf_status = self.get_target_status(formdata)
|
||||||
if wf_status:
|
if wf_status:
|
||||||
evo.status = 'wf-%s' % wf_status[0].id
|
evo.status = 'wf-%s' % wf_status[0].id
|
||||||
|
self.handle_markers_stack(formdata)
|
||||||
|
|
||||||
def get_parameters(self):
|
def get_parameters(self):
|
||||||
return ('status', 'set_marker_on_status')
|
return ('status', 'set_marker_on_status')
|
||||||
|
|
Loading…
Reference in New Issue