backoffice: always allow channel selection when it's not set (#49751)
This commit is contained in:
parent
081ff59114
commit
9dbcfe9567
|
@ -2421,6 +2421,7 @@ def test_backoffice_wfedit(pub):
|
|||
form_class = formdef.data_class()
|
||||
|
||||
number31 = [x for x in form_class.select() if x.data['1'] == 'FOO BAR 30'][0]
|
||||
number31.submission_channel = 'mail'
|
||||
number31.submission_context = {
|
||||
'mail_url': 'http://www.example.com/test.pdf',
|
||||
}
|
||||
|
|
|
@ -1324,6 +1324,92 @@ def test_backoffice_submission_only_one_check(pub, local_user):
|
|||
assert 'This form is limited to one per user' in resp
|
||||
|
||||
|
||||
def test_backoffice_submission_channel_selection(pub):
|
||||
user = create_user(pub)
|
||||
|
||||
FormDef.wipe()
|
||||
formdef = FormDef()
|
||||
formdef.name = 'form title'
|
||||
formdef.fields = [
|
||||
fields.PageField(id='0', label='1st page', type='page'),
|
||||
fields.StringField(id='1', label='Field on 1st page', type='string'),
|
||||
fields.PageField(id='2', label='2nd page', type='page'),
|
||||
fields.StringField(id='3', label='Field on 2nd page', type='string'),
|
||||
]
|
||||
formdef.backoffice_submission_roles = user.roles[:]
|
||||
formdef.workflow_roles = {'_receiver': 1}
|
||||
formdef.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
|
||||
resp = app.get('/backoffice/submission/%s/' % formdef.url_name)
|
||||
assert resp.form['submission_channel'].attrs['type'] == 'hidden'
|
||||
assert resp.pyquery('.submit-channel-selection')
|
||||
resp.form['submission_channel'] = 'counter' # happens via javascript
|
||||
resp.form['f1'] = 'test submission'
|
||||
resp = resp.form.submit('submit') # -> 2nd page
|
||||
assert resp.pyquery('.submit-channel-selection option[selected=selected]')[0].attrib['value'] == 'counter'
|
||||
assert resp.form['submission_channel'].value == 'counter'
|
||||
resp.form['f3'] = 'baz'
|
||||
resp = resp.form.submit('submit') # -> validation page
|
||||
assert 'Check values then click submit.' in resp
|
||||
assert '<h3>Channel: Counter</h3>' in resp
|
||||
resp = resp.form.submit('submit') # final submit
|
||||
formdata_no = resp.location.split('/')[-2]
|
||||
data_class = formdef.data_class()
|
||||
assert data_class.get(formdata_no).submission_channel == 'counter'
|
||||
|
||||
# select channel on second page
|
||||
resp = app.get('/backoffice/submission/%s/' % formdef.url_name)
|
||||
assert resp.form['submission_channel'].attrs['type'] == 'hidden'
|
||||
resp.form['f1'] = 'test submission'
|
||||
resp = resp.form.submit('submit') # -> 2nd page
|
||||
assert resp.pyquery('.submit-channel-selection')
|
||||
resp.form['submission_channel'] = 'counter' # happens via javascript
|
||||
resp.form['f3'] = 'baz'
|
||||
resp = resp.form.submit('submit') # -> validation page
|
||||
assert 'Check values then click submit.' in resp
|
||||
assert '<h3>Channel: Counter</h3>' in resp
|
||||
resp = resp.form.submit('submit') # final submit
|
||||
formdata_no = resp.location.split('/')[-2]
|
||||
data_class = formdef.data_class()
|
||||
assert data_class.get(formdata_no).submission_channel == 'counter'
|
||||
|
||||
# with preset channel
|
||||
resp = app.get('/backoffice/submission/%s/?channel=counter' % formdef.url_name)
|
||||
resp = resp.follow().follow()
|
||||
assert resp.form['submission_channel'].attrs['type'] == 'hidden'
|
||||
resp.form['f1'] = 'test submission'
|
||||
resp = resp.form.submit('submit') # -> 2nd page
|
||||
assert not resp.pyquery('.submit-channel-selection')
|
||||
assert '<h3>Channel: Counter</h3>' in resp
|
||||
resp.form['f3'] = 'baz'
|
||||
resp = resp.form.submit('submit') # -> validation page
|
||||
assert 'Check values then click submit.' in resp
|
||||
assert '<h3>Channel: Counter</h3>' in resp
|
||||
resp = resp.form.submit('submit') # final submit
|
||||
formdata_no = resp.location.split('/')[-2]
|
||||
data_class = formdef.data_class()
|
||||
assert data_class.get(formdata_no).submission_channel == 'counter'
|
||||
|
||||
# with submission_context but not submission channel
|
||||
resp = app.get('/backoffice/submission/%s/?ReturnURL=https://example.org' % formdef.url_name)
|
||||
resp = resp.follow().follow()
|
||||
assert resp.form['submission_channel'].attrs['type'] == 'hidden'
|
||||
resp.form['f1'] = 'test submission'
|
||||
resp = resp.form.submit('submit') # -> 2nd page
|
||||
assert resp.pyquery('.submit-channel-selection')
|
||||
resp.form['submission_channel'] = 'counter' # happens via javascript
|
||||
resp.form['f3'] = 'baz'
|
||||
resp = resp.form.submit('submit') # -> validation page
|
||||
assert 'Check values then click submit.' in resp
|
||||
assert '<h3>Channel: Counter</h3>' in resp
|
||||
resp = resp.form.submit('submit') # final submit
|
||||
formdata_no = resp.location.split('/')[-2]
|
||||
data_class = formdef.data_class()
|
||||
assert data_class.get(formdata_no).submission_channel == 'counter'
|
||||
|
||||
|
||||
def test_backoffice_submission_user_selection(pub):
|
||||
user = create_user(pub)
|
||||
|
||||
|
|
|
@ -2635,6 +2635,7 @@ class FormBackOfficeStatusPage(FormStatusPage):
|
|||
r += htmltext('</div>')
|
||||
|
||||
r += self.get_extra_submission_context_bar()
|
||||
r += self.get_extra_submission_channel_bar()
|
||||
r += self.get_extra_submission_user_id_bar()
|
||||
r += self.get_extra_geolocation_bar()
|
||||
if formdata.formdef.lateral_template:
|
||||
|
@ -2677,9 +2678,15 @@ class FormBackOfficeStatusPage(FormStatusPage):
|
|||
r += htmltext('<p><a href="%s">%s</a></p>') % (
|
||||
orig_formdata.get_url(backoffice=True),
|
||||
orig_formdata.get_display_name())
|
||||
if formdata.submission_channel:
|
||||
r += htmltext('<h3>%s</h3>') % '%s: %s' % (
|
||||
_('Channel'), formdata.get_submission_channel_label())
|
||||
return r.getvalue()
|
||||
|
||||
def get_extra_submission_channel_bar(self):
|
||||
formdata = self.filled
|
||||
r = TemplateIO(html=True)
|
||||
if formdata.submission_channel:
|
||||
extra_context = formdata.submission_context or {}
|
||||
r += htmltext('<h3>%s</h3>') % '%s: %s' % (
|
||||
_('Channel'), formdata.get_submission_channel_label())
|
||||
if extra_context.get('caller'):
|
||||
r += htmltext('<h3>%s: %s</h3>') % (_('Phone'), extra_context['caller'])
|
||||
if extra_context.get('thumbnail_url'):
|
||||
|
|
|
@ -232,6 +232,9 @@ class FormFillPage(PublicFormFillPage):
|
|||
if formdata and formdata.submission_context and \
|
||||
set(formdata.submission_context.keys()) != {'return_url'}:
|
||||
r += FormBackOfficeStatusPage(self.formdef, formdata).get_extra_submission_context_bar()
|
||||
|
||||
if formdata and formdata.submission_channel:
|
||||
r += FormBackOfficeStatusPage(self.formdef, formdata).get_extra_submission_channel_bar()
|
||||
elif self.has_channel_support:
|
||||
r += htmltext('<div class="submit-channel-selection" style="display: none;">')
|
||||
r += htmltext('<h3>%s</h3>') % _('Channel')
|
||||
|
|
Loading…
Reference in New Issue