From 6246baa2ff57b20f120222255d563396224cc63e Mon Sep 17 00:00:00 2001 From: Thomas NOEL Date: Fri, 1 Jun 2018 17:26:46 +0200 Subject: [PATCH] workflows: store structured values in backoffice fields (#24209) --- tests/test_workflows.py | 21 +++++++++++++++++++++ wcs/wf/backoffice_fields.py | 7 +++++++ 2 files changed, 28 insertions(+) diff --git a/tests/test_workflows.py b/tests/test_workflows.py index 2b4eb136..acd2b066 100644 --- a/tests/test_workflows.py +++ b/tests/test_workflows.py @@ -3170,6 +3170,27 @@ def test_set_backoffice_field_item(two_pubs): assert formdata.data['bo1'] == 'a' assert formdata.data['bo1_display'] == 'aa' + datasource = {'type': 'formula', + 'value': repr([{'id': 'a', 'text': 'aa', 'more': 'aaa'}, + {'id': 'b', 'text': 'bb', 'more': 'bbb'}])} + + wf.backoffice_fields_formdef.fields = [ + ItemField(id='bo1', label='1st backoffice field', + type='item', varname='backoffice_item', + data_source=datasource), + ] + wf.store() + + item = SetBackofficeFieldsWorkflowStatusItem() + item.parent = st1 + item.fields = [{'field_id': 'bo1', 'value': 'a'}] + item.perform(formdata) + + formdata = formdef.data_class().get(formdata.id) + assert formdata.data['bo1'] == 'a' + assert formdata.data['bo1_display'] == 'aa' + assert formdata.data['bo1_structured'] == {'id': 'a', 'more': 'aaa', 'text': 'aa'} + def test_set_backoffice_field_items(two_pubs): Workflow.wipe() FormDef.wipe() diff --git a/wcs/wf/backoffice_fields.py b/wcs/wf/backoffice_fields.py index a130aa91..eaf2ed3a 100644 --- a/wcs/wf/backoffice_fields.py +++ b/wcs/wf/backoffice_fields.py @@ -117,6 +117,13 @@ class SetBackofficeFieldsWorkflowStatusItem(WorkflowStatusItem): formdata.data['%s_display' % formdef_field.id] = display_value elif formdata.data.has_key('%s_display' % formdef_field.id): del formdata.data['%s_display' % formdef_field.id] + if formdef_field.store_structured_value and formdata.data.get(formdef_field.id): + structured_value = formdef_field.store_structured_value(formdata.data, + formdef_field.id) + if structured_value: + formdata.data['%s_structured' % formdef_field.id] = structured_value + elif '%s_structured' % formdef_field.id in formdata.data: + del formdata.data['%s_structured' % formdef_field.id] # store formdata everytime so substitution cache is invalidated, # and backoffice field values can be used in subsequent fields. -- 2.17.0