formdata: handle form_tracking_code of unsaved data in lazy mode (#30536)

This commit is contained in:
Frédéric Péters 2019-02-11 17:04:59 +01:00
parent 9520fa5d02
commit 4c25688057
3 changed files with 31 additions and 3 deletions

View File

@ -715,6 +715,24 @@ def test_lazy_formdata(pub, variable_test_data):
assert lazy_formdata.var.filefield.raw.base_filename == 'test.txt'
assert lazy_formdata.var.filefield.raw.content_type == 'text/plain'
formdata = FormDef.select()[0].data_class()
lazy_formdata = LazyFormData(formdata)
assert lazy_formdata.tracking_code is None
formdata.data = {'future_tracking_code': 'CDCBGWQX'}
assert lazy_formdata.tracking_code == 'CDCBGWQX'
formdata = FormDef.select()[0].data_class().select()[0]
lazy_formdata = LazyFormData(formdata)
assert lazy_formdata.tracking_code is None
tracking_code = pub.tracking_code_class()
tracking_code.formdata = formdata
tracking_code.store()
formdata = FormDef.select()[0].data_class().get(formdata.id)
lazy_formdata = LazyFormData(formdata)
assert lazy_formdata.tracking_code == tracking_code.id
def test_lazy_variables(pub, variable_test_data):
formdata = FormDef.select()[0].data_class().select()[0]
for mode in (None, 'lazy'):

View File

@ -684,8 +684,12 @@ class FormData(StorableObject):
if self.tracking_code:
d['form_tracking_code'] = self.tracking_code
elif not self.status and self.data and 'future_tracking_code' in self.data:
d['form_tracking_code'] = self.data['future_tracking_code']
elif not self.status and self.data:
if 'future_tracking_code' in self.data:
d['form_tracking_code'] = self.data['future_tracking_code']
elif 'draft_formdata_id' in self.data:
formdata = self.formdef.data_class().get(self.data['draft_formdata_id'])
d['form_tracking_code'] = formdata.tracking_code
d['form_submission_backoffice'] = self.backoffice_submission
d['form_submission_channel'] = self.submission_channel

View File

@ -144,7 +144,13 @@ class LazyFormData(LazyFormDef):
@property
def tracking_code(self):
return self.formdata.tracking_code
formdata = self.formdata
if not formdata.status and formdata.data:
if 'future_tracking_code' in formdata.data:
return formdata.data['future_tracking_code']
elif 'draft_formdata_id' in formdata.data:
formdata = formdata.formdef.data_class().get(formdata.data['draft_formdata_id'])
return formdata.tracking_code
@property
def submission_backoffice(self):