wcs: add status to card cell available filters (#78065)

Valentin Deniaud 2023-06-01 15:58:33 +02:00
parent 71aa067da8
commit ed8a375d20
4 changed files with 46 additions and 7 deletions

View File

@ -178,7 +178,7 @@ class WcsCardCellFiltersForm(forms.Form):
return
for filter_id in cell.filters:
if filter_id == 'status':
if filter_id == 'status' and 'workflow' in cell.cached_json:
options = [(x['id'], x['name']) for x in cell.cached_json['workflow']['statuses']]
self.fields[filter_id] = forms.MultipleChoiceField(
label=_('Status'), choices=options, widget=MultipleSelect2Widget

View File

@ -66,7 +66,7 @@ def get_filter_attrs(cell, card):
attrs = {}
for filter_id in cell.filters:
if filter_id == 'status':
if filter_id == 'status' and 'workflow' in card:
value = card['workflow']['real_status']['id']
else:
value = card['fields'].get(filter_id + '_raw')

View File

@ -748,7 +748,7 @@ def test_manager_card_cell_filters(mock_send, app, admin_user):
# only item and items field with varnames are allowed
assert resp.form['c%s-filters' % cell.get_reference()].options == [
('', True, '---------'),
('status', 'Status'),
('status', False, 'Status'),
('fieldj', False, 'Field J'),
('related', False, 'Related'),
]
@ -1599,19 +1599,28 @@ def test_card_cell_table_mode_render_filters(mock_send, context, app):
{},
]
cell.filters = ['related', 'fieldj']
cell.filters = ['related', 'fieldj', 'status']
cell.save()
resp = TestResponse(cell.render(context))
assert len(resp.form.fields) == 2
assert len(resp.form.fields) == 3
assert resp.form['fieldj'].options == [
('first value', False, 'First Value'),
('second value \'', False, 'Second Value \''),
('third value', False, 'Third Value'),
]
assert resp.form['status'].options == [('recorded', False, 'Recorded'), ('deleted', False, 'Deleted')]
assert [x.attrib for x in resp.pyquery('.list-of-cards li')] == [
{'data-related': '["42"]', 'data-fieldj': '["first value", "second value \'"]'},
{'data-related': '["13"]', 'data-fieldj': '["first value", "third value"]'},
{
'data-related': '["42"]',
'data-fieldj': '["first value", "second value \'"]',
'data-status': '["recorded"]',
},
{
'data-related': '["13"]',
'data-fieldj': '["first value", "third value"]',
'data-status': '["deleted"]',
},
{},
]
@ -1621,6 +1630,7 @@ def test_card_cell_table_mode_render_filters(mock_send, context, app):
{'varname': 'fieldb', 'field_content': 'value', 'display_mode': 'title'},
]
}
cell.filters = ['related', 'fieldj']
cell.save()
resp = TestResponse(cell.render(context))

View File

@ -138,6 +138,10 @@ WCS_CARDS_DATA = {
'first_name': 'User',
'last_name': 'Foo Bar',
},
'workflow': {
'real_status': {'id': 'recorded', 'name': 'Recorded'},
'status': {'id': 'recorded', 'name': 'Recorded'},
},
},
{
'id': 12,
@ -152,6 +156,10 @@ WCS_CARDS_DATA = {
'related': 'Abc',
'related_raw': 13,
},
'workflow': {
'real_status': {'id': 'deleted', 'name': 'Deleted'},
'status': {'id': 'deleted', 'name': 'Deleted'},
},
},
{
'id': 13,
@ -285,6 +293,27 @@ WCS_CARDDEF_SCHEMAS = {
{'label': 'Last name', 'varname': 'last_name', 'type': 'string'},
],
},
'workflow': {
'fields': [],
'functions': {'_editor': 'Editor', '_viewer': 'Viewer'},
'name': 'default',
'statuses': [
{
'endpoint': False,
'forced_endpoint': False,
'id': 'recorded',
'name': 'Recorded',
'waitpoint': True,
},
{
'endpoint': True,
'forced_endpoint': False,
'id': 'deleted',
'name': 'Deleted',
'waitpoint': True,
},
],
},
},
'card_a': {
'name': 'Card A',