misc: insert tracking code if not found (#51849)

This commit is contained in:
Frédéric Péters 2021-03-09 16:30:52 +01:00
parent b727a1f5af
commit 3d551101a6
2 changed files with 34 additions and 1 deletions

View File

@ -481,6 +481,32 @@ def test_backoffice_parallel_submission(pub):
assert 'This form has already been submitted.' in resp4.text
def test_backoffice_submission_autosave_tracking_code(pub):
user = create_user(pub)
FormDef.wipe()
formdef = FormDef()
formdef.name = 'form title'
formdef.fields = [
fields.StringField(
id='1', label='1st field', type='string', display_locations=['validation', 'summary', 'listings']
),
]
formdef.backoffice_submission_roles = user.roles[:]
formdef.workflow_roles = {'_receiver': 1}
formdef.enable_tracking_codes = True
formdef.store()
app = login(get_app(pub))
resp = app.get('/backoffice/submission/form-title/')
resp.form['f1'] = 'foo'
resp_autosave = app.post('/backoffice/submission/form-title/autosave', params=resp.form.submit_fields())
assert resp_autosave.json['result'] == 'success'
resp = resp.form.submit('submit') # -> validation
resp = resp.form.submit('submit') # -> done
def test_backoffice_submission_dispatch(pub):
user = create_user(pub)

View File

@ -2588,8 +2588,15 @@ class TrackingCode(SqlMixin, wcs.tracking_code.TrackingCode):
else:
column_names = sql_dict.keys()
sql_dict['id'] = self.id
sql_statement = '''UPDATE %s SET %s WHERE id = %%(id)s RETURNING id''' % (
sql_statement = '''INSERT INTO %s (%s)
VALUES (%s)
ON CONFLICT ON CONSTRAINT tracking_codes_pkey
DO UPDATE
SET %s
RETURNING id''' % (
self._table_name,
', '.join(column_names),
', '.join(['%%(%s)s' % x for x in column_names]),
', '.join(['%s = %%(%s)s' % (x, x) for x in column_names]),
)
cur.execute(sql_statement, sql_dict)