backoffice: support existing criteria when filtering statistics (#87909)

This commit is contained in:
Frédéric Péters 2024-03-07 21:57:10 +01:00
parent 06d6487bb3
commit 658aff404e
2 changed files with 18 additions and 5 deletions

View File

@ -148,6 +148,12 @@ def test_backoffice_statistics_status_select(pub):
assert 'Total number of records: 26' in resp.text
assert resp.pyquery('ul.resolution-times.status-wf-new li')[0].text == 'Count: 9'
resp.forms['listing-settings']['filter-%s-value' % field1.id].value = 'baz'
resp.forms['listing-settings']['filter-%s-operator' % field1.id].value = 'existing'
resp = resp.forms['listing-settings'].submit()
assert 'Total number of records: 50' in resp.text
assert resp.pyquery('ul.resolution-times.status-wf-new li')[0].text == 'Count: 17'
resp.forms['listing-settings']['filter-%s-value' % field1.id].value = 'foo'
resp.forms['listing-settings']['filter-%s-operator' % field1.id].value = 'eq'
resp = resp.forms['listing-settings'].submit()

View File

@ -2355,13 +2355,20 @@ class SqlDataMixin(SqlMixin):
if period_end:
criterias.append(Less('f.receipt_time', period_end))
if extra_criterias:
for criteria in extra_criterias:
def alter_criteria(criteria):
# change attributes to point to the formdata table (f)
if hasattr(criteria, 'attribute'):
criteria.attribute = f'f.{criteria.attribute}'
elif hasattr(criteria, 'criteria'): # Not()
alter_criteria(criteria.criteria)
elif hasattr(criteria, 'criterias'): # Or()
for c in criteria.criterias:
alter_criteria(c)
for criteria in extra_criterias:
altered_criteria = copy.deepcopy(criteria)
if isinstance(criteria, Not):
altered_criteria.criteria.attribute = f'f.{criteria.criteria.attribute}'
else:
altered_criteria.attribute = f'f.{criteria.attribute}'
alter_criteria(altered_criteria)
criterias.append(altered_criteria)
where_clauses, params, dummy = parse_clause(criterias)