misc: record parent object class (#43361)

This commit is contained in:
Frédéric Péters 2020-05-27 09:23:54 +02:00
parent ecfed38818
commit 4a1d638ff9
7 changed files with 27 additions and 10 deletions

View File

@ -6284,6 +6284,7 @@ def test_backoffice_create_formdata_backoffice_submission(create_formdata):
assert target_formdata.submission_context == {
'agent_id': str(create_formdata['admin'].id),
'orig_object_type': 'formdef',
'orig_formdata_id': '1',
'orig_formdef_id': '1'
}
@ -6400,6 +6401,7 @@ def test_backoffice_create_formdata_map_fields_by_varname(create_formdata):
assert target_formdata.submission_context == {
'agent_id': str(create_formdata['admin'].id),
'orig_object_type': 'formdef',
'orig_formdata_id': '1',
'orig_formdef_id': '1'
}

View File

@ -7799,6 +7799,7 @@ def test_create_formdata_anonymous_draft(create_formdata):
assert target_formdata.data.get('1').get_content() == b'foobar'
assert target_formdata.status == 'draft'
assert target_formdata.submission_context == {
'orig_object_type': 'formdef',
'orig_formdata_id': str(create_formdata['source_formdef'].data_class().select()[0].id),
'orig_formdef_id': str(create_formdata['source_formdef'].id),
}
@ -7850,6 +7851,7 @@ def test_create_formdata_anonymous_submitted(create_formdata):
assert target_formdata.data.get('1').get_content() == b'foobar'
assert target_formdata.status == 'wf-new'
assert target_formdata.submission_context == {
'orig_object_type': 'formdef',
'orig_formdata_id': str(create_formdata['source_formdef'].data_class().select()[0].id),
'orig_formdef_id': str(create_formdata['source_formdef'].id),
}

View File

@ -2019,6 +2019,7 @@ def test_form_parent(pub):
child = formdef.data_class()()
child.data = {'0': 'world'}
child.submission_context = {
'orig_object_type': 'formdef',
'orig_formdef_id': formdef.id,
'orig_formdata_id': parent.id,
}

View File

@ -358,6 +358,25 @@ class FormData(StorableObject):
def get_submission_channel_label(self):
return self.get_submission_channels().get(self.submission_channel) or _('Web')
def get_parent(self):
if not self.submission_context:
return None
object_type = self.submission_context.get('orig_object_type', 'formdef')
objectdef_id = self.submission_context.get('orig_formdef_id')
objectdata_id = self.submission_context.get('orig_formdata_id')
if not (object_type and objectdef_id and objectdata_id):
return None
if object_type == 'carddef':
from .carddef import CardDef
objectdef_class = CardDef
else:
from .formdef import FormDef
objectdef_class = FormDef
try:
return objectdef_class.get(objectdef_id).data_class().get(objectdata_id)
except KeyError:
return None
def just_created(self):
self.receipt_time = time.localtime()
self.status = 'wf-%s' % self.formdef.workflow.possible_status[0].id

View File

@ -412,16 +412,7 @@ class LazyFormData(LazyFormDef):
@property
def parent(self):
if not self._formdata.submission_context:
return None
if 'orig_formdef_id' not in self._formdata.submission_context:
return None
if 'orig_formdata_id' not in self._formdata.submission_context:
return None
formdef = FormDef.get(self._formdata.submission_context['orig_formdef_id'], ignore_errors=True)
if formdef is None:
return None
formdata = formdef.data_class().get(self._formdata.submission_context['orig_formdata_id'], ignore_errors=True)
formdata = self._formdata.get_parent()
if formdata is None:
return None
return formdata.get_substitution_variables()

View File

@ -323,6 +323,7 @@ class CreateFormdataWorkflowStatusItem(WorkflowStatusItem):
if self.backoffice_submission and get_request() and get_request().user is not None:
new_formdata.submission_context['agent_id'] = str(get_request().user.id)
new_formdata.submission_context['orig_object_type'] = formdata.formdef.xml_root_node
new_formdata.submission_context['orig_formdef_id'] = str(formdata.formdef.id)
new_formdata.submission_context['orig_formdata_id'] = str(formdata.id)
new_formdata.data = {}

View File

@ -80,6 +80,7 @@ class ResubmitWorkflowStatusItem(WorkflowStatusItem):
new_formdata.backoffice_submission = get_request().is_in_backoffice()
if not new_formdata.submission_context:
new_formdata.submission_context = {}
new_formdata.submission_context['orig_object_type'] = formdata.formdef.xml_root_node
new_formdata.submission_context['orig_formdef_id'] = formdata.formdef.id
new_formdata.submission_context['orig_formdata_id'] = formdata.id
new_formdata.data = {}