statistics: allow group by field inside block (#62404) #212
|
@ -103,7 +103,9 @@ def formdef(pub):
|
|||
anonymise=False,
|
||||
)
|
||||
items_field.display_locations = ['statistics']
|
||||
block_field = fields.BlockField(id='4', label='Block Data', varname='blockdata', type='block:foobar')
|
||||
block_field = fields.BlockField(
|
||||
id='4', label='Block Data', varname='blockdata', type='block:foobar', anonymise=False
|
||||
)
|
||||
formdef.fields = [item_field, items_field, block_field]
|
||||
formdef.store()
|
||||
formdef.data_class().wipe()
|
||||
|
@ -416,6 +418,8 @@ def test_statistics_forms_count_subfilters(pub, formdef):
|
|||
{'id': 'simple-status', 'label': 'Simplified status'},
|
||||
{'id': 'test-item', 'label': 'Test item'},
|
||||
{'id': 'test-items', 'label': 'Test items'},
|
||||
{'id': 'blockdata_bool', 'label': 'Bool'},
|
||||
{'id': 'blockdata_block-items', 'label': 'Block items'},
|
||||
{'id': 'checkbox', 'label': 'Checkbox'},
|
||||
{'id': 'status', 'label': 'Status'},
|
||||
],
|
||||
|
@ -735,6 +739,12 @@ def test_statistics_forms_count_group_by(pub, formdef, anonymise):
|
|||
formdata.data['2_display'] = 'Foo'
|
||||
formdata.data['3'] = ['bar', 'baz']
|
||||
formdata.data['3_display'] = 'Bar, Baz'
|
||||
formdata.data['4'] = {
|
||||
'data': [
|
||||
{'1': True, '2': ['baz'], '2_display': 'Baz'},
|
||||
{'1': False, '2': ['foo'], '2_display': 'Foo'},
|
||||
]
|
||||
}
|
||||
# "Web" channel has three equivalent values
|
||||
if i == 1:
|
||||
formdata.submission_channel = 'web'
|
||||
|
@ -746,6 +756,7 @@ def test_statistics_forms_count_group_by(pub, formdef, anonymise):
|
|||
formdata.data['1'] = False
|
||||
formdata.data['2'] = 'baz'
|
||||
formdata.data['3'] = ['baz']
|
||||
formdata.data['4'] = {'data': [{'1': False, '2': ['foo', 'bar'], '2_display': 'Foo, Bar'}]}
|
||||
if i == 3:
|
||||
formdata.jump_status('3')
|
||||
elif i == 9:
|
||||
|
@ -819,6 +830,25 @@ def test_statistics_forms_count_group_by(pub, formdef, anonymise):
|
|||
{'data': [None, None, 4], 'label': 'None'},
|
||||
]
|
||||
|
||||
# group by boolean field inside block
|
||||
resp = get_app(pub).get(sign_uri(url + '&group-by=blockdata_bool'))
|
||||
assert resp.json['data']['x_labels'] == ['2021-01', '2021-02', '2021-03']
|
||||
assert resp.json['data']['series'] == [
|
||||
{'label': 'Yes', 'data': [13, None, None]},
|
||||
{'label': 'No', 'data': [16, None, None]},
|
||||
{'label': 'None', 'data': [None, None, 4]},
|
||||
]
|
||||
|
||||
# group by items field inside block
|
||||
resp = get_app(pub).get(sign_uri(url + '&group-by=blockdata_block-items'))
|
||||
assert resp.json['data']['x_labels'] == ['2021-01', '2021-02', '2021-03']
|
||||
assert resp.json['data']['series'] == [
|
||||
{'label': 'Bar', 'data': [3, None, None]},
|
||||
{'label': 'Baz', 'data': [13, None, None]},
|
||||
{'label': 'Foo', 'data': [16, None, None]},
|
||||
{'label': 'None', 'data': [None, None, 4]},
|
||||
]
|
||||
|
||||
# group by status
|
||||
resp = get_app(pub).get(sign_uri(url + '&group-by=status'))
|
||||
assert resp.json['data']['x_labels'] == ['2021-01', '2021-02', '2021-03']
|
||||
|
@ -879,10 +909,6 @@ def test_statistics_forms_count_group_by(pub, formdef, anonymise):
|
|||
assert resp.json['data']['x_labels'] == ['Middle status 2', 'Middle status 1', 'End status', 'New status']
|
||||
assert resp.json['data']['series'] == [{'data': [1, 1, 1, 17], 'label': 'Forms Count'}]
|
||||
|
||||
# group by on block field is not supported
|
||||
resp = get_app(pub).get(sign_uri(url + '&group-by=blockdata_bool'))
|
||||
assert resp.json['data']['series'] == [{'data': [16, 0, 4], 'label': 'Forms Count'}]
|
||||
|
||||
# invalid field
|
||||
resp = get_app(pub).get(sign_uri(url + '&group-by=xxx'))
|
||||
assert resp.json['data']['series'] == [{'data': [16, 0, 4], 'label': 'Forms Count'}]
|
||||
|
|
|
@ -429,8 +429,7 @@ class FormsCountView(RestrictedView):
|
|||
filter_description['default'] = field.default_filter_value
|
||||
|
||||
subfilters.append(filter_description)
|
||||
if not hasattr(field, 'block_field'):
|
||||
field_choices.append((field.contextual_varname, field.label))
|
||||
field_choices.append((field.contextual_varname, field.label))
|
||||
|
||||
if field_choices:
|
||||
additionnal_filters = [
|
||||
|
@ -472,8 +471,7 @@ class FormsCountView(RestrictedView):
|
|||
and getattr(x, 'include_in_statistics', False)
|
||||
]
|
||||
if fields:
|
||||
if not hasattr(fields[0], 'block_field'): # block fields are not supported
|
||||
return fields[0]
|
||||
return fields[0]
|
||||
|
||||
def get_group_labels(self, group_by_field, formdef, group_by):
|
||||
group_labels = {}
|
||||
|
|
Loading…
Reference in New Issue