From 729281532df9cd57c1d7d77b89a42241bfff07a6 Mon Sep 17 00:00:00 2001 From: Rebecca Law Date: Wed, 18 Dec 2019 11:53:46 +0000 Subject: [PATCH] Added returned-letter-summary page. This page displays a list of available reports, a report is a set of returned lettters that have been reported on the same day. Each line of the page is a link that can download the report. I'm not sure the format of the csv is right. The data might be confusing especially if the service has a mix of precompiled templates and jobs. Units tests are still to come. --- app/main/views/returned_letters.py | 32 ++++++++++++++++--- app/navigation.py | 8 +++++ app/notify_client/service_api_client.py | 1 + .../views/returned-letter-summary.html | 2 +- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/app/main/views/returned_letters.py b/app/main/views/returned_letters.py index c0befbcd0..26fe838f2 100644 --- a/app/main/views/returned_letters.py +++ b/app/main/views/returned_letters.py @@ -1,12 +1,14 @@ -from flask import render_template, request +from collections import OrderedDict + +from flask import render_template from app import service_api_client from app.main import main -from app.utils import user_has_permissions +from app.utils import Spreadsheet, user_has_permissions @main.route("/services//returned-letter-summary", methods=["GET", "POST"]) -@user_has_permissions('manage_service') +@user_has_permissions('view_activity') def returned_letter_summary(service_id): summary = service_api_client.get_returned_letter_summary(service_id) return render_template( @@ -16,7 +18,27 @@ def returned_letter_summary(service_id): @main.route("/services//returned-letters-csv/", methods=["GET", "POST"]) -@user_has_permissions('manage_service') +@user_has_permissions('view_activity') def returned_letters_report(service_id, reported_at): + returned_letters = service_api_client.get_returned_letters(service_id, reported_at) + column_names = OrderedDict([ + ('client_reference', 'Reference'), + ('created_at', 'Date sent'), + ('notification_id', 'Notification ID'), + ('template_name', 'Template name'), + ('template_id', 'Template ID'), + ('template_version', 'Template version'), + ('original_file_name', 'Job file name'), + ('job_row_number', 'Job row number'), + ]) - return str(service_api_client.get_returned_letters(service_id, reported_at)) + # initialise with header row + data = [[x for x in column_names.values()]] + + for row in returned_letters: + data.append([row[key] for key in column_names.keys()]) + + return Spreadsheet.from_rows(data).as_csv_data, 200, { + 'Content-Type': 'text/csv; charset=utf-8', + 'Content-Disposition': 'inline; filename="{} returned letters.csv"'.format(reported_at) + } diff --git a/app/navigation.py b/app/navigation.py index 4e9cdef8c..fe2f2092b 100644 --- a/app/navigation.py +++ b/app/navigation.py @@ -242,6 +242,8 @@ class HeaderNavigation(Navigation): 'resend_email_link', 'resend_email_verification', 'resume_service', + 'returned_letter_summary', + 'returned_letters_report', 'revoke_api_key', 'robots', 'send_messages', @@ -564,6 +566,8 @@ class MainNavigation(Navigation): 'resend_email_link', 'resend_email_verification', 'resume_service', + 'returned_letter_summary', + 'returned_letters_report', 'roadmap', 'robots', 'security', @@ -801,6 +805,8 @@ class CaseworkNavigation(Navigation): 'resend_email_link', 'resend_email_verification', 'resume_service', + 'returned_letter_summary', + 'returned_letters_report', 'revoke_api_key', 'roadmap', 'robots', @@ -1077,6 +1083,8 @@ class OrgNavigation(Navigation): 'resend_email_link', 'resend_email_verification', 'resume_service', + 'returned_letter_summary', + 'returned_letters_report', 'revoke_api_key', 'roadmap', 'robots', diff --git a/app/notify_client/service_api_client.py b/app/notify_client/service_api_client.py index 259e70c06..eaaf5b59e 100644 --- a/app/notify_client/service_api_client.py +++ b/app/notify_client/service_api_client.py @@ -575,4 +575,5 @@ class ServiceAPIClient(NotifyAdminAPIClient): def get_returned_letters(self, service_id, reported_at): return self.get("service/{}/returned-letters?reported_at={}".format(service_id, reported_at)) + service_api_client = ServiceAPIClient() diff --git a/app/templates/views/returned-letter-summary.html b/app/templates/views/returned-letter-summary.html index a7ee74efa..436cfd0f4 100644 --- a/app/templates/views/returned-letter-summary.html +++ b/app/templates/views/returned-letter-summary.html @@ -22,7 +22,7 @@ field_headings_visible=False ) %} {% call field() %} - + Returned letters reported on {{ item.reported_at | format_datetime_short}} ({{ item.returned_letter_count}} letters) {% endcall %}