general: store computed data fields after backoffice submission (#54928)

This commit is contained in:
Frédéric Péters 2021-06-16 20:25:02 +02:00
parent 1725e65cda
commit 032b9c8da3
2 changed files with 27 additions and 0 deletions

View File

@ -1661,3 +1661,27 @@ def test_backoffice_submission_sidebar_lateral_block(pub):
lateral_block_url = re.findall('data-async-url="(.*/lateral-block)"', resp.text)[0]
partial_resp = app.get(lateral_block_url)
assert partial_resp.text == '<div class="lateral-block">foo bar blah</div>'
def test_backoffice_submission_computed_field(pub):
user = create_user(pub)
FormDef.wipe()
formdef = FormDef()
formdef.name = 'form title'
formdef.fields = [
fields.ComputedField(id='1', label='computed', varname='computed', value_template='{{ "xxx" }}'),
]
formdef.backoffice_submission_roles = user.roles[:]
formdef.workflow_roles = {'_receiver': user.roles[0]}
formdef.store()
formdef.data_class().wipe()
app = login(get_app(pub))
resp = app.get('/backoffice/submission/form-title/')
resp = resp.forms[0].submit('submit') # -> validation
resp = resp.forms[0].submit('submit').follow() # -> submit
assert 'The form has been recorded' in resp.text
assert formdef.data_class().count() == 1
formdata = formdef.data_class().select()[0]
assert formdata.data == {'1': 'xxx'}

View File

@ -328,6 +328,9 @@ class FormFillPage(PublicFormFillPage):
return redirect(get_publisher().get_backoffice_url() + '/submission/')
filled.just_created()
filled.data = self.formdef.get_data(form)
magictoken = get_request().form['magictoken']
computed_values = get_session().get_by_magictoken('%s-computed' % magictoken, {})
filled.data.update(computed_values)
filled.backoffice_submission = True
if not filled.submission_context:
filled.submission_context = {}