.csv', endpoint="view_notifications_csv")
+@user_has_permissions('view_activity', admin_override=True)
+def get_notifications(service_id, message_type, status_override=None):
# TODO get the api to return count of pages as well.
page = get_page_from_request()
if page is None:
@@ -220,26 +239,32 @@ def view_notifications(service_id, message_type):
'Content-Type': 'text/csv; charset=utf-8',
'Content-Disposition': 'inline; filename="notifications.csv"'
}
- return render_template(
- 'views/notifications.html',
- notifications=notifications['notifications'],
- page=page,
- prev_page=prev_page,
- next_page=next_page,
- status=request.args.get('status'),
- message_type=message_type,
- download_link=url_for(
- '.view_notifications_csv',
- service_id=current_service['id'],
- message_type=message_type,
- status=request.args.get('status')
+ return {
+ 'counts': render_template(
+ 'views/activity/counts.html',
+ status=request.args.get('status'),
+ status_filters=get_status_filters(
+ current_service,
+ message_type,
+ service_api_client.get_detailed_service(service_id)['data']['statistics']
+ )
),
- status_filters=get_status_filters(
- current_service,
- message_type,
- service_api_client.get_detailed_service(service_id)['data']['statistics']
- )
- )
+ 'notifications': render_template(
+ 'views/activity/notifications.html',
+ notifications=notifications['notifications'],
+ page=page,
+ prev_page=prev_page,
+ next_page=next_page,
+ status=request.args.get('status'),
+ message_type=message_type,
+ download_link=url_for(
+ '.view_notifications_csv',
+ service_id=current_service['id'],
+ message_type=message_type,
+ status=request.args.get('status')
+ )
+ ),
+ }
def get_status_filters(service, message_type, statistics):
diff --git a/app/templates/views/activity/counts.html b/app/templates/views/activity/counts.html
new file mode 100644
index 000000000..b396bb064
--- /dev/null
+++ b/app/templates/views/activity/counts.html
@@ -0,0 +1,9 @@
+{% from "components/pill.html" import pill %}
+
+
+ {{ pill(
+ 'Status',
+ status_filters,
+ status
+ ) }}
+
diff --git a/app/templates/views/activity/notifications.html b/app/templates/views/activity/notifications.html
new file mode 100644
index 000000000..bd306e11c
--- /dev/null
+++ b/app/templates/views/activity/notifications.html
@@ -0,0 +1,47 @@
+{% from "components/page-footer.html" import page_footer %}
+{% from "components/previous-next-navigation.html" import previous_next_navigation %}
+{% from "components/table.html" import list_table, field, text_field, link_field, right_aligned_field_heading, hidden_field_heading, row_heading, notification_status_field %}
+
+
+
+ {% if notifications %}
+
+ Download this report
+
+ Data available for 7 days
+
+
+ {% endif %}
+ {% call(item, row_number) list_table(
+ notifications,
+ caption="Recent activity",
+ caption_visible=False,
+ empty_message='No messages found',
+ field_headings=['Recipient', 'Status'],
+ field_headings_visible=False
+ ) %}
+
+ {% call row_heading() %}
+
+ {{ item.to }}
+
+
+ {% if item.job %}
+ From {{ item.job.original_file_name }}
+ {% else %}
+ {{ item.template.name }}
+ from an API call
+ {% endif %}
+
+ {% endcall %}
+
+ {{ notification_status_field(item) }}
+
+ {% endcall %}
+ {% if notifications %}
+
+ {% endif %}
+
+ {{ previous_next_navigation(prev_page, next_page) }}
+
+
diff --git a/app/templates/views/notifications.html b/app/templates/views/notifications.html
index 45c18d46d..8ee8c5da6 100644
--- a/app/templates/views/notifications.html
+++ b/app/templates/views/notifications.html
@@ -1,8 +1,5 @@
{% extends "withnav_template.html" %}
-{% from "components/table.html" import list_table, field, text_field, link_field, right_aligned_field_heading, hidden_field_heading, row_heading, notification_status_field %}
-{% from "components/previous-next-navigation.html" import previous_next_navigation %}
-{% from "components/page-footer.html" import page_footer %}
-{% from "components/pill.html" import pill %}
+{% from "components/ajax-block.html" import ajax_block %}
{% from "components/message-count-label.html" import message_count_label, recipient_count_label %}
{% block page_title %}
@@ -12,65 +9,19 @@
{% block maincolumn_content %}
-
-
- {%- if status != 'delivered,failed' -%}
- {%- for label, option, _, _ in status_filters -%}
- {%- if status == option -%}{{label}} {% endif -%}
- {%- endfor -%}
- {%- endif -%}
-
-
- {{- message_count_label(99, message_type, suffix='') | capitalize }}
-
+ {{ message_count_label(99, message_type, suffix='') | capitalize }}
-
- {{ pill(
- 'Status',
- status_filters,
- status
- ) }}
-
+ {{ ajax_block(
+ partials,
+ url_for('.get_notifications_as_json', service_id=current_service.id, message_type=message_type, status=status),
+ 'counts'
+ ) }}
- {% if notifications %}
-
- Download this report
-
- Data available for 7 days
-
-
- {% endif %}
- {% call(item, row_number) list_table(
- notifications,
- caption="Recent activity",
- caption_visible=False,
- empty_message='No messages found',
- field_headings=['Recipient', 'Status'],
- field_headings_visible=False
- ) %}
-
- {% call row_heading() %}
-
- {{ item.to }}
-
-
- {% if item.job %}
- From {{ item.job.original_file_name }}
- {% else %}
- {{ item.template.name }}
- from an API call
- {% endif %}
-
- {% endcall %}
-
- {{ notification_status_field(item) }}
-
- {% endcall %}
- {% if notifications %}
-
- {% endif %}
-
- {{ previous_next_navigation(prev_page, next_page) }}
+ {{ ajax_block(
+ partials,
+ url_for('.get_notifications_as_json', service_id=current_service.id, message_type=message_type, status=status),
+ 'notifications'
+ ) }}
{% endblock %}
diff --git a/tests/app/main/views/test_jobs.py b/tests/app/main/views/test_jobs.py
index c17c3f3fc..0693d02f5 100644
--- a/tests/app/main/views/test_jobs.py
+++ b/tests/app/main/views/test_jobs.py
@@ -338,6 +338,15 @@ def test_can_show_notifications(
assert csv_response.get_data(as_text=True) == csv_content
assert 'text/csv' in csv_response.headers['Content-Type']
+ json_response = client.get(url_for(
+ 'main.get_notifications_as_json',
+ service_id=service_one['id'],
+ message_type=message_type,
+ status=status_argument
+ ))
+ json_content = json.loads(json_response.get_data(as_text=True))
+ assert json_content.keys() == {'counts', 'notifications'}
+
def test_should_show_notifications_for_a_service_with_next_previous(
app_,