mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-07 06:08:24 -04:00
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:
@@ -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 import service_api_client
|
||||||
from app.main import main
|
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"])
|
@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):
|
def returned_letter_summary(service_id):
|
||||||
summary = service_api_client.get_returned_letter_summary(service_id)
|
summary = service_api_client.get_returned_letter_summary(service_id)
|
||||||
return render_template(
|
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"])
|
@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):
|
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)
|
||||||
|
}
|
||||||
|
|||||||
@@ -242,6 +242,8 @@ class HeaderNavigation(Navigation):
|
|||||||
'resend_email_link',
|
'resend_email_link',
|
||||||
'resend_email_verification',
|
'resend_email_verification',
|
||||||
'resume_service',
|
'resume_service',
|
||||||
|
'returned_letter_summary',
|
||||||
|
'returned_letters_report',
|
||||||
'revoke_api_key',
|
'revoke_api_key',
|
||||||
'robots',
|
'robots',
|
||||||
'send_messages',
|
'send_messages',
|
||||||
@@ -564,6 +566,8 @@ class MainNavigation(Navigation):
|
|||||||
'resend_email_link',
|
'resend_email_link',
|
||||||
'resend_email_verification',
|
'resend_email_verification',
|
||||||
'resume_service',
|
'resume_service',
|
||||||
|
'returned_letter_summary',
|
||||||
|
'returned_letters_report',
|
||||||
'roadmap',
|
'roadmap',
|
||||||
'robots',
|
'robots',
|
||||||
'security',
|
'security',
|
||||||
@@ -801,6 +805,8 @@ class CaseworkNavigation(Navigation):
|
|||||||
'resend_email_link',
|
'resend_email_link',
|
||||||
'resend_email_verification',
|
'resend_email_verification',
|
||||||
'resume_service',
|
'resume_service',
|
||||||
|
'returned_letter_summary',
|
||||||
|
'returned_letters_report',
|
||||||
'revoke_api_key',
|
'revoke_api_key',
|
||||||
'roadmap',
|
'roadmap',
|
||||||
'robots',
|
'robots',
|
||||||
@@ -1077,6 +1083,8 @@ class OrgNavigation(Navigation):
|
|||||||
'resend_email_link',
|
'resend_email_link',
|
||||||
'resend_email_verification',
|
'resend_email_verification',
|
||||||
'resume_service',
|
'resume_service',
|
||||||
|
'returned_letter_summary',
|
||||||
|
'returned_letters_report',
|
||||||
'revoke_api_key',
|
'revoke_api_key',
|
||||||
'roadmap',
|
'roadmap',
|
||||||
'robots',
|
'robots',
|
||||||
|
|||||||
@@ -575,4 +575,5 @@ class ServiceAPIClient(NotifyAdminAPIClient):
|
|||||||
def get_returned_letters(self, service_id, reported_at):
|
def get_returned_letters(self, service_id, reported_at):
|
||||||
return self.get("service/{}/returned-letters?reported_at={}".format(service_id, reported_at))
|
return self.get("service/{}/returned-letters?reported_at={}".format(service_id, reported_at))
|
||||||
|
|
||||||
|
|
||||||
service_api_client = ServiceAPIClient()
|
service_api_client = ServiceAPIClient()
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
field_headings_visible=False
|
field_headings_visible=False
|
||||||
) %}
|
) %}
|
||||||
{% call field() %}
|
{% 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)
|
Returned letters reported on {{ item.reported_at | format_datetime_short}} ({{ item.returned_letter_count}} letters)
|
||||||
</a>
|
</a>
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
|
|||||||
Reference in New Issue
Block a user