workflows: redirect to fields after wf form submit (#50660)

This commit is contained in:
Lauréline Guérin 2021-02-08 17:00:28 +01:00 committed by Frédéric Péters
parent 12d70ce6c5
commit dbf5c67c57
3 changed files with 44 additions and 11 deletions

View File

@ -24,6 +24,7 @@ from wcs.workflows import (
CommentableWorkflowStatusItem,
ChoiceWorkflowStatusItem,
JumpOnSubmitWorkflowStatusItem,
WorkflowVariablesFieldsFormDef,
)
from wcs.wf.create_carddata import CreateCarddataWorkflowStatusItem
from wcs.wf.create_formdata import CreateFormdataWorkflowStatusItem, Mapping
@ -31,6 +32,7 @@ from wcs.wf.dispatch import DispatchWorkflowStatusItem
from wcs.wf.edit_carddata import EditCarddataWorkflowStatusItem
from wcs.wf.export_to_model import ExportToModel
from wcs.wf.external_workflow import ExternalWorkflowGlobalAction
from wcs.wf.form import FormWorkflowStatusItem, WorkflowFormFieldsFormDef
from wcs.wf.jump import JumpWorkflowStatusItem
from wcs.wf.redirect_to_url import RedirectToUrlWorkflowStatusItem
from wcs.wf.register_comment import RegisterCommenterWorkflowStatusItem
@ -933,12 +935,11 @@ def test_workflows_edit_display_form_action(pub):
resp = resp.click('baz')
resp.forms[0]['action-interaction'] = 'Form'
resp = resp.forms[0].submit()
resp = resp.follow()
resp = resp.forms[0].submit().follow()
resp = resp.click(re.compile('^Form$'))
resp = resp.click('Edit Fields')
resp.form['varname'] = 'myform'
resp = resp.forms[0].submit('submit').follow()
# fields page
resp.form['label'] = 'foobar'
resp.form['type'] = 'string'
resp = resp.form.submit()
@ -2221,10 +2222,37 @@ def test_workflows_wscall_status_error(pub):
assert error.occurences_count == 5
def test_workflows_inspect_view(pub):
from wcs.workflows import WorkflowVariablesFieldsFormDef
from wcs.wf.form import FormWorkflowStatusItem, WorkflowFormFieldsFormDef
def test_workflows_form_action_config(pub):
create_superuser(pub)
Workflow.wipe()
wf = Workflow(name='foo')
st = wf.add_status('New')
form = FormWorkflowStatusItem()
form.parent = st
st.items.append(form)
wf.store()
app = login(get_app(pub))
resp = app.get('/backoffice/workflows/%s/status/%s/items/1/' % (wf.id, st.id))
resp.form['by$element0'] = '_submitter'
resp.form['varname'] = 'myform'
resp.form['condition$type'] = 'django'
resp.form['condition$value_django'] = '42'
resp = resp.form.submit('submit')
assert resp.location == 'http://example.net/backoffice/workflows/%s/status/%s/items/1/fields/' % (
wf.id,
st.id,
)
wf = Workflow.get(wf.id)
form = wf.possible_status[0].items[0]
assert form.by == ['_submitter']
assert form.varname == 'myform'
assert form.condition == {'type': 'django', 'value': '42'}
def test_workflows_inspect_view(pub):
create_superuser(pub)
role = create_role()

View File

@ -341,7 +341,10 @@ class WorkflowItemPage(Directory):
self.item.fill_admin_form(form)
if not self.workflow.is_readonly():
form.add_submit('submit', _('Submit'))
submit_label = _('Submit')
if hasattr(self.item, 'submit_button_label'):
submit_label = _(self.item.submit_button_label)
form.add_submit('submit', submit_label)
form.add_submit('cancel', _('Cancel'))
if form.get_widget('cancel').parse():
@ -357,6 +360,8 @@ class WorkflowItemPage(Directory):
'status': self.parent.name,
}
)
if hasattr(self.item, 'redirect_after_submit_url'):
return redirect(self.item.redirect_after_submit_url)
return redirect('..')
self.html_top('%s - %s' % (_('Workflow'), self.workflow.name))

View File

@ -90,6 +90,8 @@ class FormWorkflowStatusItem(WorkflowStatusItem):
ok_in_global_action = False
endpoint = False
waitpoint = True
redirect_after_submit_url = 'fields/'
submit_button_label = N_('Submit and go to fields edition')
by = []
formdef = None
@ -128,8 +130,6 @@ class FormWorkflowStatusItem(WorkflowStatusItem):
hint=_('This is used as prefix for form fields variable names.'),
)
form.widgets.append(HtmlWidget(htmltext('<p><a href="fields/">%s</a></p>') % _('Edit Fields')))
def get_parameters(self):
return ('by', 'varname', 'condition')