Skip to content

Commit 8953cd3

Browse files
Merge pull request #230 from NHSDigital/ssr-hide-year-checkboxes
Change year group checkbox visibility based on programme selected
2 parents d29cbfe + d7b0160 commit 8953cd3

File tree

4 files changed

+67
-6
lines changed

4 files changed

+67
-6
lines changed

mavis/reporting/api_client/client.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
from mavis.reporting.helpers import mavis_helper
22
from mavis.reporting.helpers.mavis_helper import MavisApiError, parse_json_response
33

4+
PROGRAMME_YEAR_GROUPS = {
5+
"flu": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"],
6+
"hpv": ["8", "9", "10", "11"],
7+
"menacwy": ["9", "10", "11"],
8+
"td_ipv": ["9", "10", "11"],
9+
}
10+
411

512
class MavisApiClient:
613
def __init__(self, app=None, session=None):
@@ -102,8 +109,15 @@ def get_year_groups(self) -> list[dict]:
102109
{"value": "9", "text": "Year 9"},
103110
{"value": "10", "text": "Year 10"},
104111
{"value": "11", "text": "Year 11"},
112+
{"value": "12", "text": "Year 12"},
113+
{"value": "13", "text": "Year 13"},
105114
]
106115

116+
def get_year_groups_for_programme(self, programme: str) -> list[dict]:
117+
all_year_groups = self.get_year_groups()
118+
eligible_values = PROGRAMME_YEAR_GROUPS.get(programme, [])
119+
return [yg for yg in all_year_groups if yg["value"] in eligible_values]
120+
107121
# https://www.datadictionary.nhs.uk/attributes/person_gender_code.html
108122
def get_genders(self) -> list[dict]:
109123
return [

mavis/reporting/templates/components/filters.jinja

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,16 @@
66
{% from "button/macro.jinja" import button %}
77

88
{% macro filters(params) %}
9-
<form method="get"
9+
<form id="filters-form"
10+
method="get"
1011
action="{{ params.form_action }}"
1112
hx-get="{{ params.form_action }}"
1213
hx-trigger="change from:input"
1314
hx-target="#dashboard"
1415
hx-select="#dashboard"
16+
hx-select-oob="#filters-form:outerHTML"
1517
hx-swap="outerHTML"
16-
hx-replace-url="true"
17-
hx-sync="this:replace">
18+
hx-replace-url="true">
1819
{% call fieldset({
1920
"legend": {
2021
"text": "Filter data",

mavis/reporting/views.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,13 +149,18 @@ def vaccinations(workgroup):
149149
filters = {}
150150

151151
filters["team_workgroup"] = team.workgroup
152-
filters["programme"] = request.args.get("programme") or "hpv"
152+
filters["programme"] = request.args.get("programme") or "flu"
153153

154154
gender_values = request.args.getlist("gender")
155155
if gender_values:
156156
filters["gender"] = gender_values
157157

158-
year_group_values = request.args.getlist("year-group")
158+
year_groups = g.api_client.get_year_groups_for_programme(filters["programme"])
159+
valid_year_group_values = {yg["value"] for yg in year_groups}
160+
161+
year_group_values = [
162+
v for v in request.args.getlist("year-group") if v in valid_year_group_values
163+
]
159164
if year_group_values:
160165
filters["year_group"] = year_group_values
161166

@@ -165,7 +170,7 @@ def vaccinations(workgroup):
165170
"vaccinations.jinja",
166171
team=team,
167172
programmes=g.api_client.get_programmes(),
168-
year_groups=g.api_client.get_year_groups(),
173+
year_groups=year_groups,
169174
genders=g.api_client.get_genders(),
170175
academic_year=get_current_academic_year_range(),
171176
data=data,

tests/api_client/test_client.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,44 @@ def test_valid_vaccination_data(api_client, mock_mavis_get_request):
4545

4646
assert result["cohort"] == expected_cohort
4747
assert "vaccinated_percentage" in result
48+
49+
50+
class TestGetYearGroupsForProgramme:
51+
def test_flu_returns_all_year_groups(self, api_client):
52+
result = api_client.get_year_groups_for_programme("flu")
53+
values = [yg["value"] for yg in result]
54+
assert values == [
55+
"0",
56+
"1",
57+
"2",
58+
"3",
59+
"4",
60+
"5",
61+
"6",
62+
"7",
63+
"8",
64+
"9",
65+
"10",
66+
"11",
67+
"12",
68+
"13",
69+
]
70+
71+
def test_hpv_returns_years_8_to_11(self, api_client):
72+
result = api_client.get_year_groups_for_programme("hpv")
73+
values = [yg["value"] for yg in result]
74+
assert values == ["8", "9", "10", "11"]
75+
76+
def test_menacwy_returns_years_9_to_11(self, api_client):
77+
result = api_client.get_year_groups_for_programme("menacwy")
78+
values = [yg["value"] for yg in result]
79+
assert values == ["9", "10", "11"]
80+
81+
def test_td_ipv_returns_years_9_to_11(self, api_client):
82+
result = api_client.get_year_groups_for_programme("td_ipv")
83+
values = [yg["value"] for yg in result]
84+
assert values == ["9", "10", "11"]
85+
86+
def test_unknown_programme_returns_empty_list(self, api_client):
87+
result = api_client.get_year_groups_for_programme("unknown")
88+
assert result == []

0 commit comments

Comments
 (0)