workflow: add target mode/id to external and edit card items (#45653)

This commit is contained in:
Lauréline Guérin 2020-12-07 16:35:20 +01:00 committed by Frédéric Péters
parent 56b010ff16
commit a7ba34aaec
3 changed files with 42 additions and 5 deletions

View File

@ -1612,6 +1612,16 @@ def test_workflows_global_actions_external_workflow_action(pub):
resp.forms[0]['trigger_id'] = 'action:%s' % trigger.identifier
resp = resp.forms[0].submit('submit').follow().follow()
assert 'External workflow (action "Global action" on external)' in resp.text
assert Workflow.get(workflow.id).possible_status[0].items[0].target_mode == 'all'
assert Workflow.get(workflow.id).possible_status[0].items[0].target_id is None
resp = app.get('/backoffice/workflows/%s/status/%s/items/1/' % (workflow.id, st.id))
resp.forms[0]['target_mode'] = 'manual'
resp.forms[0]['target_id$type'] = 'template'
resp.forms[0]['target_id$value_template'] = '{{ form_var_plop_id }}'
resp = resp.forms[0].submit('submit')
assert Workflow.get(workflow.id).possible_status[0].items[0].target_mode == 'manual'
assert Workflow.get(workflow.id).possible_status[0].items[0].target_id == '{{ form_var_plop_id }}'
trigger.identifier = 'another_test'
wf.store()
@ -1658,6 +1668,16 @@ def test_workflows_edit_carddata_action(pub):
resp.forms[0]['mappings$element0$field_id'] = '1'
resp = resp.forms[0].submit('submit').follow()
assert 'Edit Card Data (not configured)' not in resp.text
assert Workflow.get(wf.id).possible_status[0].items[0].target_mode == 'all'
assert Workflow.get(wf.id).possible_status[0].items[0].target_id is None
resp = app.get('/backoffice/workflows/%s/status/%s/items/1/' % (wf.id, st.id))
resp.forms[0]['target_mode'] = 'manual'
resp.forms[0]['target_id$type'] = 'template'
resp.forms[0]['target_id$value_template'] = '{{ form_var_plop_id }}'
resp = resp.forms[0].submit('submit')
assert Workflow.get(wf.id).possible_status[0].items[0].target_mode == 'manual'
assert Workflow.get(wf.id).possible_status[0].items[0].target_id == '{{ form_var_plop_id }}'
def test_workflows_criticality_levels(pub):

View File

@ -35,7 +35,7 @@ class EditCarddataWorkflowStatusItem(CreateCarddataWorkflowStatusItem, ExternalW
return ExternalWorkflowGlobalAction.is_available()
def get_parameters(self):
return ('formdef_slug', 'mappings', 'condition')
return ('formdef_slug', 'target_mode', 'target_id', 'mappings', 'condition')
@property
def slug(self):

View File

@ -17,7 +17,7 @@
from quixote import get_publisher
from wcs.qommon import _
from wcs.qommon.form import SingleSelectWidget
from wcs.qommon.form import SingleSelectWidget, ComputedExpressionWidget
from wcs.workflows import WorkflowStatusItem, perform_items, register_item_class
from wcs.workflows import WorkflowGlobalActionWebserviceTrigger, Workflow
@ -32,6 +32,8 @@ class ExternalWorkflowGlobalAction(WorkflowStatusItem):
category = 'formdata-action'
slug = None
target_mode = None
target_id = None
trigger_id = None
@classmethod
@ -66,8 +68,7 @@ class ExternalWorkflowGlobalAction(WorkflowStatusItem):
return trigger
def add_parameters_widgets(self, form, parameters, prefix='', formdef=None):
super(ExternalWorkflowGlobalAction, self).add_parameters_widgets(
form, parameters, prefix=prefix, formdef=formdef)
super().add_parameters_widgets(form, parameters, prefix=prefix, formdef=formdef)
if 'slug' in parameters:
objects = [(None, '---', '')]
@ -87,6 +88,22 @@ class ExternalWorkflowGlobalAction(WorkflowStatusItem):
required=True,
options=objects)
if 'target_mode' in parameters:
target_modes = [('all', _('Automatic'), 'all'), ('manual', _('Manual'), 'manual')]
form.add(SingleSelectWidget, '%starget_mode' % prefix,
title=_('Targeting'),
value=self.target_mode or 'all',
required=True,
options=target_modes,
attrs={'data-dynamic-display-parent': 'true'})
if 'target_id' in parameters:
form.add(ComputedExpressionWidget, '%starget_id' % prefix,
value=self.target_id,
required=False,
attrs={'data-dynamic-display-child-of': 'target_mode',
'data-dynamic-display-value': 'manual'})
if 'trigger_id' in parameters and form.get('%sslug' % prefix):
object_def = self.get_object_def(form.get('%sslug' % prefix))
if not object_def:
@ -116,7 +133,7 @@ class ExternalWorkflowGlobalAction(WorkflowStatusItem):
yield from formdata.iter_target_datas(objectdef=objectdef, object_type=self.slug, status_item=self)
def get_parameters(self):
return ('slug', 'trigger_id', 'condition')
return ('slug', 'target_mode', 'target_id', 'trigger_id', 'condition')
def perform(self, formdata):
objectdef = self.get_object_def()