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.
This commit is contained in:
Rebecca Law
2019-12-18 11:53:46 +00:00
parent e2d979f199
commit 729281532d
4 changed files with 37 additions and 6 deletions

View File

@@ -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/<uuid:service_id>/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/<uuid:service_id>/returned-letters-csv/<reported_at>", 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)
}

View File

@@ -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',

View File

@@ -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()

View File

@@ -22,7 +22,7 @@
field_headings_visible=False
) %}
{% call field() %}
<a href="{{url_for('.returned_letters_report', service_id=current_service.id, reported_date=item.reported_at)}}">
<a href="{{url_for('.returned_letters_report', service_id=current_service.id, reported_at=item.reported_at)}}">
Returned letters reported on {{ item.reported_at | format_datetime_short}} ({{ item.returned_letter_count}} letters)
</a>
{% endcall %}