diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index a88203ae7..7356f586b 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -29,6 +29,7 @@ from app.utils.csv import Spreadsheet from app.utils.pagination import generate_next_dict, generate_previous_dict from app.utils.time import get_current_financial_year from app.utils.user import user_has_permissions +from collections import defaultdict @main.route("/services//dashboard") @@ -47,22 +48,31 @@ def service_dashboard(service_id): if not current_user.has_permissions("view_activity"): return redirect(url_for("main.choose_template", service_id=service_id)) - notifications = notification_api_client.get_notifications_for_service( + notifications_response = notification_api_client.get_notifications_for_service( service_id=service_id, )["notifications"] - job_response = job_api_client.get_jobs(service_id) - service_data_retention_days = 7 - jobs = [ + + aggregate_notifications_by_job = defaultdict(list) + for notification in notifications_response: + job_id = notification.get("job", {}).get("id") + if job_id: + aggregate_notifications_by_job[job_id].append(notification) + + job_and_notifications = [ { "job_id": job["id"], "time_left": get_time_left(job["created_at"]), "download_link": url_for( ".view_job_csv", service_id=current_service.id, job_id=job["id"] ), + "view_job_link": url_for( + ".view_job", service_id=current_service.id, job_id=job["id"] + ), "notification_count": job["notification_count"], "created_by": job["created_by"], + "notifications": aggregate_notifications_by_job.get(job["id"], []), } for job in job_response["data"] ] @@ -70,8 +80,7 @@ def service_dashboard(service_id): "views/dashboard/dashboard.html", updates_url=url_for(".service_dashboard_updates", service_id=service_id), partials=get_dashboard_partials(service_id), - notifications=notifications, - jobs=jobs, + job_and_notifications=job_and_notifications, service_data_retention_days=service_data_retention_days, ) diff --git a/app/templates/views/dashboard/dashboard.html b/app/templates/views/dashboard/dashboard.html index 9c51ea47c..de7f3b372 100644 --- a/app/templates/views/dashboard/dashboard.html +++ b/app/templates/views/dashboard/dashboard.html @@ -28,7 +28,6 @@ {{ ajax_block(partials, updates_url, 'totals') }} {{ ajax_block(partials, updates_url, 'template-statistics') }} -

Recent Batches

@@ -55,37 +54,37 @@ - {% for notification in notifications[:5] %} - {% if notification %} - - - - - - {% set job_available = jobs|selectattr('job_id', 'equalto', notification.job.id)|first %} - - - + {% for job in job_and_notifications[:5] %} + {% if job.job_id and job.notifications %} + {% for notification in job.notifications %} + + + + + + + + + {% endfor %} {% endif %} {% endfor %}
- {{ notification.job.original_file_name if notification.job.original_file_name else 'Manually entered number'}} -
- View Batch -
- {{ notification.template.name }} - - {{ notification.created_at | format_datetime_short_america }} - - {{ notification.created_by.name }} - - {{ job_available.notification_count if job_available else ''}} - - {% if job_available and job_available.time_left != "Data no longer available" %} - - {{ "Download" if job_available.job_id else '' }} - {{ job_available.time_left }} - {% elif job_available %} - {{ job_available.time_left }} - {% endif %} -
+ {{ notification.job.original_file_name if notification.job.original_file_name else 'Manually entered number'}} +
+ View Batch +
+ {{ notification.template.name }} + + {{ notification.created_at | format_datetime_short_america }} + + {{ notification.created_by.name }} + + {{ job.notification_count}} + + {% if notification and job.time_left != "Data no longer available" %} + Download + {{ job.time_left }} + {% elif job %} + {{ job.time_left }} + {% endif %} +