From 946b1034d68e55058cfa6bfdabe88bf56793220d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Wed, 24 Aug 2016 09:18:06 +0200 Subject: [PATCH] workflows: add support for assigning to workflow item/items field (#12905) --- tests/test_workflows.py | 104 +++++++++++++++++++++++++++++++++++++++++++- wcs/wf/backoffice_fields.py | 8 ++++ 2 files changed, 111 insertions(+), 1 deletion(-) diff --git a/tests/test_workflows.py b/tests/test_workflows.py index 0444a02..b5a1d51 100644 --- a/tests/test_workflows.py +++ b/tests/test_workflows.py @@ -14,7 +14,7 @@ from qommon.form import * from wcs.formdef import FormDef from wcs import sessions -from wcs.fields import StringField, DateField, MapField, FileField +from wcs.fields import StringField, DateField, MapField, FileField, ItemField, ItemsField from wcs.roles import Role from wcs.workflows import (Workflow, WorkflowStatusItem, SendmailWorkflowStatusItem, SendSMSWorkflowStatusItem, @@ -1781,3 +1781,105 @@ def test_set_backoffice_field_file(pub): formdata = formdef.data_class().get(formdata.id) assert not 'bo1' in formdata.data assert not 'bo3' in formdata.data + +def test_set_backoffice_field_item(pub): + Workflow.wipe() + wf = Workflow(name='xxx') + wf.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(wf) + st1 = wf.add_status('Status1') + wf.backoffice_fields_formdef.fields = [ + ItemField(id='bo1', label='1st backoffice field', + type='item', varname='backoffice_item', + items=['a', 'b', 'c']), + ] + wf.store() + + formdef = FormDef() + formdef.name = 'baz' + formdef.fields = [] + formdef.workflow_id = wf.id + formdef.store() + + formdata = formdef.data_class()() + formdata.data = {} + formdata.just_created() + formdata.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'] == 'a' + + datasource = {'type': 'formula', + 'value': repr([('a', 'aa'), ('b', 'bb'), ('c', 'cc')])} + + 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' + +def test_set_backoffice_field_items(pub): + Workflow.wipe() + wf = Workflow(name='xxx') + wf.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(wf) + st1 = wf.add_status('Status1') + wf.backoffice_fields_formdef.fields = [ + ItemsField(id='bo1', label='1st backoffice field', + type='items', varname='backoffice_item', + items=['a', 'b', 'c']), + ] + wf.store() + + formdef = FormDef() + formdef.name = 'baz' + formdef.fields = [] + formdef.workflow_id = wf.id + formdef.store() + + formdata = formdef.data_class()() + formdata.data = {} + formdata.just_created() + formdata.store() + + item = SetBackofficeFieldsWorkflowStatusItem() + item.parent = st1 + item.fields = [{'field_id': 'bo1', 'value': "=['a', 'b']"}] + item.perform(formdata) + + formdata = formdef.data_class().get(formdata.id) + assert formdata.data['bo1'] == ['a', 'b'] + assert formdata.data['bo1_display'] == 'a, b' + + datasource = {'type': 'formula', + 'value': repr([('a', 'aa'), ('b', 'bb'), ('c', 'cc')])} + + 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', 'b']"}] + item.perform(formdata) + + formdata = formdef.data_class().get(formdata.id) + assert formdata.data['bo1'] == ['a', 'b'] + assert formdata.data['bo1_display'] == 'aa, bb' diff --git a/wcs/wf/backoffice_fields.py b/wcs/wf/backoffice_fields.py index 838262a..905b476 100644 --- a/wcs/wf/backoffice_fields.py +++ b/wcs/wf/backoffice_fields.py @@ -131,6 +131,14 @@ class SetBackofficeFieldsWorkflowStatusItem(WorkflowStatusItem): continue formdata.data['%s' % field['field_id']] = new_value + if formdef_field.store_display_value: + display_value = formdef_field.store_display_value( + formdata.data, formdef_field.id) + if display_value: + formdata.data['%s_display' % formdef_field.id] = display_value + elif d.has_key('%s_display' % formdef_field.id): + del formdata.data['%s_display' % formdef_field.id] + formdata.store() def fields_export_to_xml(self, item, charset, include_id=False): -- 2.9.3