workflows: let backoffice item field be assigned from data label (#32134)
This commit is contained in:
parent
3bf1110393
commit
189ede3c58
|
@ -3479,6 +3479,38 @@ def test_set_backoffice_field_item(two_pubs):
|
|||
assert formdata.data['bo1_display'] == 'aa'
|
||||
assert formdata.data['bo1_structured'] == {'id': 'a', 'more': 'aaa', 'text': 'aa'}
|
||||
|
||||
# check when assigning using the display value
|
||||
formdata = formdef.data_class()()
|
||||
formdata.data = {}
|
||||
formdata.just_created()
|
||||
formdata.store()
|
||||
|
||||
item = SetBackofficeFieldsWorkflowStatusItem()
|
||||
item.parent = st1
|
||||
item.fields = [{'field_id': 'bo1', 'value': 'aa'}]
|
||||
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'}
|
||||
|
||||
# check with unknown value
|
||||
formdata = formdef.data_class()()
|
||||
formdata.data = {}
|
||||
formdata.just_created()
|
||||
formdata.store()
|
||||
|
||||
item = SetBackofficeFieldsWorkflowStatusItem()
|
||||
item.parent = st1
|
||||
item.fields = [{'field_id': 'bo1', 'value': 'foobar'}]
|
||||
item.perform(formdata)
|
||||
|
||||
formdata = formdef.data_class().get(formdata.id)
|
||||
assert formdata.data['bo1'] == 'foobar'
|
||||
assert formdata.data.get('bo1_display') is None
|
||||
assert formdata.data.get('bo1_structured') is None
|
||||
|
||||
def test_set_backoffice_field_items(two_pubs):
|
||||
Workflow.wipe()
|
||||
FormDef.wipe()
|
||||
|
|
|
@ -366,10 +366,17 @@ class NamedDataSource(XmlStorableObject):
|
|||
if response['data']:
|
||||
value = response['data'][0]
|
||||
else:
|
||||
for item in get_structured_items(self.data_source, mode='lazy'):
|
||||
structured_items = get_structured_items(self.data_source, mode='lazy')
|
||||
for item in structured_items:
|
||||
if str(item['id']) == str(option_id):
|
||||
value = item
|
||||
break
|
||||
else:
|
||||
# recheck in case option label was given instead of option id.
|
||||
for item in structured_items:
|
||||
if str(item['text']) == str(option_id):
|
||||
value = item
|
||||
break
|
||||
if value is None:
|
||||
return None
|
||||
return value
|
||||
|
|
|
@ -128,6 +128,9 @@ class SetBackofficeFieldsWorkflowStatusItem(WorkflowStatusItem):
|
|||
structured_value = formdef_field.store_structured_value(
|
||||
formdata.data, formdef_field.id)
|
||||
if structured_value:
|
||||
if isinstance(structured_value, dict) and structured_value.get('id'):
|
||||
# in case of list field, override id
|
||||
formdata.data['%s' % formdef_field.id] = str(structured_value.get('id'))
|
||||
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]
|
||||
|
|
Loading…
Reference in New Issue