diff --git a/combo/apps/dataviz/forms.py b/combo/apps/dataviz/forms.py index 13ef209e..501a144e 100644 --- a/combo/apps/dataviz/forms.py +++ b/combo/apps/dataviz/forms.py @@ -219,6 +219,14 @@ class ChartNgForm(ChartFiltersMixin, forms.ModelForm): 'time_range_end_template', ): del self.fields[field] + else: + if self.instance.time_range != 'range': + del self.fields['time_range_start'] + del self.fields['time_range_end'] + + if self.instance.time_range != 'range-template': + del self.fields['time_range_start_template'] + del self.fields['time_range_end_template'] def add_filter_fields(self): new_fields = OrderedDict() @@ -357,6 +365,9 @@ class ChartFiltersForm(ChartFiltersMixin, forms.ModelForm): self.fields.pop(field, None) else: self.update_time_range_choices(first_cell.statistic, exclude_template_choice=True) + if not self.is_bound and first_cell.time_range != 'range': + del self.fields['time_range_start'] + del self.fields['time_range_end'] for cell in chart_cells[1:]: cell_filter_fields = self.get_filter_fields(cell) @@ -422,6 +433,12 @@ class ChartFiltersForm(ChartFiltersMixin, forms.ModelForm): filters_cell.save() + def clean(self): + super().clean() + if self.cleaned_data['time_range'] != 'range': + del self.fields['time_range_start'] + del self.fields['time_range_end'] + class ChartFiltersConfigForm(forms.ModelForm): filters = forms.MultipleChoiceField( diff --git a/combo/apps/dataviz/templates/combo/chart-filters.html b/combo/apps/dataviz/templates/combo/chart-filters.html index 9be1970b..eebf265a 100644 --- a/combo/apps/dataviz/templates/combo/chart-filters.html +++ b/combo/apps/dataviz/templates/combo/chart-filters.html @@ -44,18 +44,6 @@ }); } - start_field = $('#id_filter-time_range_start_p'); - end_field = $('#id_filter-time_range_end_p'); - $('#id_filter-time_range').change(function() { - if(this.value == 'range') { - start_field.show(); - end_field.show(); - } else { - start_field.hide(); - end_field.hide(); - } - }).change(); - form.submit(function(e) { e.preventDefault(); $(window).trigger('combo:refresh-graphs'); diff --git a/combo/apps/dataviz/templates/combo/chartngcell_form.html b/combo/apps/dataviz/templates/combo/chartngcell_form.html index a7797b37..532dd692 100644 --- a/combo/apps/dataviz/templates/combo/chartngcell_form.html +++ b/combo/apps/dataviz/templates/combo/chartngcell_form.html @@ -11,30 +11,8 @@ diff --git a/tests/test_dataviz.py b/tests/test_dataviz.py index f0326b38..22465f15 100644 --- a/tests/test_dataviz.py +++ b/tests/test_dataviz.py @@ -1721,6 +1721,10 @@ def test_chartng_cell_manager_new_api(app, admin_user, new_api_statistics): assert cell.time_range == 'previous-year' resp.form[field_prefix + 'time_range'] = 'range' + assert field_prefix + 'time_range_start' not in resp.form.fields + assert field_prefix + 'time_range_end' not in resp.form.fields + manager_submit_cell(resp.form) + resp.form[field_prefix + 'time_range_start'] = '2020-10-01' resp.form[field_prefix + 'time_range_end'] = '2020-11-03' manager_submit_cell(resp.form) @@ -1978,6 +1982,10 @@ def test_chartng_cell_manager_new_api_time_range_templates(app, admin_user, new_ field_prefix = 'cdataviz_chartngcell-%s-' % cell.id resp.form[field_prefix + 'time_range'] = 'range-template' + assert field_prefix + 'time_range_start_template' not in resp.form.fields + assert field_prefix + 'time_range_end_template' not in resp.form.fields + manager_submit_cell(resp.form) + resp.form[field_prefix + 'time_range_start_template'] = 'today|add_days:"7"|adjust_to_week_monday' resp.form[field_prefix + 'time_range_end_template'] = 'now|add_days:"14"|adjust_to_week_monday' manager_submit_cell(resp.form) @@ -2732,9 +2740,9 @@ def test_chart_filters_cell(new_api_statistics, app, admin_user, nocache): first_cell.statistic = Statistic.objects.get(slug='one-serie') first_cell.save() resp = app.get('/') - assert len(resp.form.fields) == 8 - assert 'filter-time_range_start' in resp.form.fields - assert 'filter-time_range_end' in resp.form.fields + assert len(resp.form.fields) == 6 + assert 'filter-time_range_start' not in resp.form.fields + assert 'filter-time_range_end' not in resp.form.fields time_range_field = resp.form['filter-time_range'] assert time_range_field.value == '' @@ -2777,7 +2785,7 @@ def test_chart_filters_cell(new_api_statistics, app, admin_user, nocache): assert ( resp.form['filter-overridden_filters'].value - == 'time_range,time_range_start,time_range_end,overridden_filters,time_interval,ou,service' + == 'time_range,overridden_filters,time_interval,ou,service' ) # adding new cell with same statistics changes nothing @@ -2899,7 +2907,7 @@ def test_chart_filters_cell_future_data(app, admin_user, new_api_statistics): @with_httmock(new_api_mock) -def test_chart_filters_cell_range_template(new_api_statistics, app, admin_user, nocache): +def test_chart_filters_cell_time_range(new_api_statistics, app, admin_user, nocache): page = Page.objects.create(title='One', slug='index') cell = ChartNgCell(page=page, order=1, placeholder='content') cell.statistic = Statistic.objects.get(slug='one-serie') @@ -2907,6 +2915,29 @@ def test_chart_filters_cell_range_template(new_api_statistics, app, admin_user, ChartFiltersCell.objects.create(page=page, order=2, placeholder='content') app = login(app) + + # time range start/end field are hidden by default on page load + resp = app.get('/') + assert 'filter-time_range' in resp.form.fields + assert 'filter-time_range_start' not in resp.form.fields + assert 'filter-time_range_end' not in resp.form.fields + + # time range start/end field are hidden by default on ajax refresh + location = resp.pyquery('.chartfilterscell').attr('data-ajax-cell-url') + resp = app.get(location + '?filters_cell_id=xxx') + assert 'filter-time_range' in resp.form.fields + assert 'filter-time_range_start' not in resp.form.fields + assert 'filter-time_range_end' not in resp.form.fields + + # if custom time range is set in filters cell, time range start/end fields are shown + resp = app.get(location + '?filter-time_range=range&filters_cell_id=xxx') + assert 'filter-time_range' in resp.form.fields + assert 'filter-time_range_start' in resp.form.fields + assert 'filter-time_range_end' in resp.form.fields + + # if custom time range is set in chart cell, time range start/end fields are shown + cell.time_range = 'range' + cell.save() resp = app.get('/') assert 'filter-time_range' in resp.form.fields assert 'filter-time_range_start' in resp.form.fields @@ -3029,7 +3060,7 @@ def test_chart_filters_cell_select_filters(new_api_statistics, app, admin_user, cell.save() resp = app.get('/') - assert len(resp.form.fields) == 8 + assert len(resp.form.fields) == 6 assert 'filter-ou' in resp.form.fields assert 'filter-service' in resp.form.fields assert 'filter-time_range' in resp.form.fields @@ -3051,7 +3082,7 @@ def test_chart_filters_cell_select_filters(new_api_statistics, app, admin_user, manager_submit_cell(resp.forms[0]) resp = app.get('/') - assert len(resp.form.fields) == 7 + assert len(resp.form.fields) == 5 assert 'filter-ou' not in resp.form.fields assert 'filter-service' in resp.form.fields assert 'filter-time_range' in resp.form.fields