wf: accept empty values in mapping of edit card action (#46031)
This commit is contained in:
parent
2b3e287b02
commit
b5a8437129
|
@ -1477,11 +1477,19 @@ def test_workflows_global_actions_external_workflow_action(pub):
|
|||
def test_workflows_edit_carddata_action(pub):
|
||||
create_superuser(pub)
|
||||
Workflow.wipe()
|
||||
CardDef.wipe()
|
||||
|
||||
wf = Workflow(name='edit card')
|
||||
st = wf.add_status('Update card', 'st')
|
||||
wf.store()
|
||||
|
||||
carddef = CardDef()
|
||||
carddef.name = 'My card'
|
||||
carddef.fields = [
|
||||
fields.StringField(id='1', label='string'),
|
||||
]
|
||||
carddef.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
|
||||
resp = app.get('/backoffice/workflows/%s/status/%s/' % (wf.id, st.id))
|
||||
|
@ -1489,6 +1497,15 @@ def test_workflows_edit_carddata_action(pub):
|
|||
|
||||
resp.forms[0]['action-formdata-action'] = 'Edit Card Data'
|
||||
resp = resp.forms[0].submit().follow()
|
||||
assert 'Edit Card Data (not configured)' in resp.text
|
||||
|
||||
resp = app.get('/backoffice/workflows/%s/status/%s/items/1/' % (wf.id, st.id))
|
||||
resp.forms[0]['formdef_slug'] = 'my-card'
|
||||
resp = resp.forms[0].submit('submit')
|
||||
assert 'Leaving the field blank will empty the value.' in resp.text
|
||||
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
|
||||
|
||||
|
||||
def test_workflows_criticality_levels(pub):
|
||||
|
|
|
@ -44,6 +44,7 @@ class Mapping(object):
|
|||
class MappingWidget(CompositeWidget):
|
||||
def __init__(self, name, value=None, to_formdef=None, **kwargs):
|
||||
value = value or Mapping(None, '')
|
||||
self.accept_empty_value = kwargs.pop('accept_empty_value', False)
|
||||
super(MappingWidget, self).__init__(name, value, **kwargs)
|
||||
|
||||
to_fields = self._fields_to_options(to_formdef)
|
||||
|
@ -54,10 +55,15 @@ class MappingWidget(CompositeWidget):
|
|||
value=value.field_id,
|
||||
options=to_fields)
|
||||
|
||||
placeholder = ''
|
||||
if self.accept_empty_value:
|
||||
placeholder = _('Leaving the field blank will empty the value.')
|
||||
|
||||
self.add(ComputedExpressionWidget,
|
||||
name='expression',
|
||||
title=_('Expression'),
|
||||
value=value.expression)
|
||||
value=value.expression,
|
||||
value_placeholder=placeholder)
|
||||
|
||||
def _fields_to_options(self, formdef):
|
||||
return [(None, '---', '')] + [
|
||||
|
@ -65,7 +71,7 @@ class MappingWidget(CompositeWidget):
|
|||
|
||||
def _parse(self, request):
|
||||
super(MappingWidget, self)._parse(request)
|
||||
if self.get('field_id') is not None and self.get('expression') is not None:
|
||||
if self.get('field_id') is not None and self.accept_empty_value or self.get('expression') is not None:
|
||||
self.value = Mapping(field_id=self.get('field_id'), expression=self.get('expression'))
|
||||
else:
|
||||
self.value = None
|
||||
|
@ -87,11 +93,13 @@ class MappingsWidget(WidgetListAsTable):
|
|||
# reorder mappings based on to_formdef fields order
|
||||
value.sort(key=lambda mapping: self.ranks.get(str(mapping.field_id), 9999))
|
||||
|
||||
accept_empty_value = kwargs.pop('accept_empty_value', False)
|
||||
super(MappingsWidget, self).__init__(
|
||||
name,
|
||||
element_type=MappingWidget,
|
||||
element_kwargs={
|
||||
'to_formdef': to_formdef,
|
||||
'accept_empty_value': accept_empty_value,
|
||||
},
|
||||
**kwargs)
|
||||
|
||||
|
@ -197,6 +205,7 @@ class CreateFormdataWorkflowStatusItem(WorkflowStatusItem):
|
|||
formdef_slug = None
|
||||
formdef_label = N_('Form')
|
||||
mappings_label = N_('Mappings to new form fields')
|
||||
accept_empty_value = False
|
||||
varname_hint = N_('This is used to get linked forms in expressions.')
|
||||
|
||||
draft = False
|
||||
|
@ -256,6 +265,7 @@ class CreateFormdataWorkflowStatusItem(WorkflowStatusItem):
|
|||
if 'mappings' in parameters and formdef:
|
||||
widget = form.add(MappingsWidget, '%smappings' % prefix,
|
||||
title=_(self.mappings_label),
|
||||
accept_empty_value=self.accept_empty_value,
|
||||
to_formdef=formdef,
|
||||
value=self.mappings)
|
||||
if form.is_submitted() and get_request().form.get('map_fields_by_varname') != 'yes':
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from wcs.qommon import _
|
||||
from ..qommon import _
|
||||
from quixote import get_publisher
|
||||
|
||||
from wcs.workflows import register_item_class
|
||||
|
@ -28,6 +28,7 @@ class EditCarddataWorkflowStatusItem(CreateCarddataWorkflowStatusItem, ExternalW
|
|||
description = _('Edit Card Data')
|
||||
key = 'edit_carddata'
|
||||
mappings_label = _('Mappings to card fields')
|
||||
accept_empty_value = True
|
||||
|
||||
@classmethod
|
||||
def is_available(cls, workflow=None):
|
||||
|
|
Loading…
Reference in New Issue