workflows: store structured values in backoffice fields (#24209)

This commit is contained in:
Thomas NOËL 2018-06-01 17:26:46 +02:00
parent cfe5f85502
commit 0f19aab60b
2 changed files with 52 additions and 0 deletions

View File

@ -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()
@ -3222,6 +3243,30 @@ def test_set_backoffice_field_items(two_pubs):
assert formdata.data['bo1'] == ['a', 'b']
assert formdata.data['bo1_display'] == 'aa, bb'
datasource = {'type': 'formula',
'value': repr([{'id': 'a', 'text': 'aa', 'more': 'aaa'},
{'id': 'b', 'text': 'bb', 'more': 'bbb'},
{'id': 'c', 'text': 'cc', 'more': 'ccc'}])}
wf.backoffice_fields_formdef.fields = [
ItemsField(id='bo1', label='1st backoffice field',
type='items', varname='backoffice_item',
data_source=datasource),
]
wf.store()
item = SetBackofficeFieldsWorkflowStatusItem()
item.parent = st1
item.fields = [{'field_id': 'bo1', 'value': "=['a', 'c']"}]
item.perform(formdata)
formdata = formdef.data_class().get(formdata.id)
assert formdata.data['bo1'] == ['a', 'c']
assert formdata.data['bo1_display'] == 'aa, cc'
assert len(formdata.data['bo1_structured']) == 2
assert {'id': 'a', 'more': 'aaa', 'text': 'aa'} in formdata.data['bo1_structured']
assert {'id': 'c', 'more': 'ccc', 'text': 'cc'} in formdata.data['bo1_structured']
def test_set_backoffice_field_date(two_pubs):
Workflow.wipe()
FormDef.wipe()

View File

@ -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.