workflows: store structured values in backoffice fields (#24209)
This commit is contained in:
parent
cfe5f85502
commit
0f19aab60b
|
@ -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()
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue