backoffice: extend global status filter to waiting/open/done/all (#15003)
This commit is contained in:
parent
81cfa1bfd3
commit
b177c79e3f
|
@ -2166,6 +2166,20 @@ def test_global_listing(pub):
|
|||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.body[resp.body.index('<tbody'):].count('<tr') == 17
|
||||
|
||||
resp = app.get('/backoffice/management/listing?limit=500')
|
||||
resp.forms['listing-settings']['status'] = 'waiting'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.body[resp.body.index('<tbody'):].count('<tr') == 37
|
||||
resp.forms['listing-settings']['status'] = 'open'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.body[resp.body.index('<tbody'):].count('<tr') == 37
|
||||
resp.forms['listing-settings']['status'] = 'all'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.body[resp.body.index('<tbody'):].count('<tr') == 70
|
||||
resp.forms['listing-settings']['status'] = 'done'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.body[resp.body.index('<tbody'):].count('<tr') == 33
|
||||
|
||||
def test_global_listing_with_no_formdefs(pub):
|
||||
if not pub.is_using_postgresql():
|
||||
pytest.skip('this requires SQL')
|
||||
|
|
|
@ -524,8 +524,12 @@ class ManagementDirectory(Directory):
|
|||
get_response().add_javascript(['jquery.js'])
|
||||
DateWidget.prepare_javascript()
|
||||
form = Form(use_tokens=False, id='listing-settings')
|
||||
form.add(CheckboxWidget, 'waiting', title=_('Waiting for an action'),
|
||||
value=True)
|
||||
form.add(SingleSelectWidget, 'status', title=_('Status'),
|
||||
options=[
|
||||
('waiting', _('Waiting for an action'), 'waiting'),
|
||||
('open', C_('formdata|Open'), 'open'),
|
||||
('done', _('Done'), 'done'),
|
||||
('all', _('All'), 'all')])
|
||||
form.add(DateWidget, 'start', title=_('Start Date'))
|
||||
form.add(DateWidget, 'end', title=_('End Date'))
|
||||
|
||||
|
@ -703,13 +707,23 @@ class ManagementDirectory(Directory):
|
|||
parsed_values = {}
|
||||
user_roles = [logged_users_role().id] + (get_request().user.roles or [])
|
||||
criterias = get_global_criteria(get_request(), parsed_values)
|
||||
criterias.append(Equal('is_at_endpoint', False))
|
||||
query_parameters = (get_request().form or {}).copy()
|
||||
query_parameters.pop('callback', None) # when using jsonp
|
||||
if not query_parameters or get_request().form.get('waiting') == 'yes':
|
||||
status = query_parameters.get('status', 'waiting')
|
||||
if query_parameters.get('waiting') == 'yes':
|
||||
# compatibility with ?waiting=yes|no parameter, still used in
|
||||
# the /count endpoint used for indicators
|
||||
status = 'waiting'
|
||||
elif query_parameters.get('waiting') == 'no':
|
||||
status = 'open'
|
||||
if status == 'waiting':
|
||||
criterias.append(Equal('is_at_endpoint', False))
|
||||
criterias.append(Intersects('actions_roles_array', user_roles))
|
||||
else:
|
||||
elif status == 'open':
|
||||
criterias.append(Equal('is_at_endpoint', False))
|
||||
criterias.append(Intersects('concerned_roles_array', user_roles))
|
||||
elif status == 'done':
|
||||
criterias.append(Equal('is_at_endpoint', True))
|
||||
if get_request().form.get('submission_channel'):
|
||||
if get_request().form.get('submission_channel') == 'web':
|
||||
criterias.append(Null('submission_channel'))
|
||||
|
|
Loading…
Reference in New Issue