diff --git a/app/assets/sass/uswds/_uswds-theme-custom-styles.scss b/app/assets/sass/uswds/_uswds-theme-custom-styles.scss index e3ef2be5d..db63f436a 100644 --- a/app/assets/sass/uswds/_uswds-theme-custom-styles.scss +++ b/app/assets/sass/uswds/_uswds-theme-custom-styles.scss @@ -464,7 +464,7 @@ td.table-empty-message { width: 25%; } td.time-sent { - width: 30%; + width: 14%; } td.sender { width: 20%; @@ -474,12 +474,20 @@ td.table-empty-message { width: 5%; } td.report { - width: 5%; + width: 2%; + text-align: center; + } + td.delivered { + width: 2%; + text-align: center; + } + td.failed { + width: 2%; text-align: center; } td.report img { padding-top: 5px; - } + } th { padding: 0.5rem 1rem } diff --git a/app/main/views/activity.py b/app/main/views/activity.py index f9b32e9db..6e710d633 100644 --- a/app/main/views/activity.py +++ b/app/main/views/activity.py @@ -13,14 +13,14 @@ from app.utils.user import user_has_permissions @main.route("/activity/services/") -@user_has_permissions() +@user_has_permissions("view_activity") def all_jobs_activity(service_id): service_data_retention_days = 7 page = get_page_from_request() jobs = job_api_client.get_page_of_jobs(service_id, page=page) all_jobs_dict = generate_job_dict(jobs) prev_page, next_page, pagination = handle_pagination(jobs, service_id, page) - + message_type='sms', return render_template( "views/activity/all-activity.html", all_jobs_dict=all_jobs_dict, @@ -28,6 +28,27 @@ def all_jobs_activity(service_id): next_page=next_page, prev_page=prev_page, pagination=pagination, + download_link_one_day=url_for( + ".download_notifications_csv", + service_id=current_service.id, + message_type=message_type, + status=request.args.get("status"), + number_of_days="one_day", + ), + download_link_five_day=url_for( + ".download_notifications_csv", + service_id=current_service.id, + message_type=message_type, + status=request.args.get("status"), + number_of_days="five_day", + ), + download_link_seven_day=url_for( + ".download_notifications_csv", + service_id=current_service.id, + message_type=message_type, + status=request.args.get("status"), + number_of_days="seven_day", + ), ) @@ -75,6 +96,14 @@ def generate_job_dict(jobs): "processing_started": job["processing_started"], "created_by": job["created_by"], "template_name": job["template_name"], + "delivered_count": next( + (stat["count"] for stat in job["statistics"] if stat["status"] == "delivered"), + None + ), + "failed_count": next( + (stat["count"] for stat in job["statistics"] if stat["status"] == "failed"), + None + ), } for job in jobs["data"] ] diff --git a/app/templates/views/activity/all-activity.html b/app/templates/views/activity/all-activity.html index 7eb7cb3c5..3a98b3541 100644 --- a/app/templates/views/activity/all-activity.html +++ b/app/templates/views/activity/all-activity.html @@ -84,6 +84,12 @@ Report + + Delivered + + + Failed + @@ -108,6 +114,8 @@ N/A {% endif %} + {{ job.delivered_count if job.delivered_count is not none else '' }} + {{ job.failed_count if job.failed_count is not none else '' }} {% endfor %} {% else %} @@ -121,6 +129,17 @@

Note: Report data is only available for 7 days after your message has been sent

{{show_pagination}} + {% if current_user.has_permissions('view_activity') %} +

Download recent reports

+

+ Download all data last 24 hours (CSV) +

+

+ Download all data last 5 days (CSV) +

+

+ Download all data last 7 days (CSV) +

+ {% endif %} - {% endblock %}