mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-24 00:07:02 -04:00
fixed duplicates to notification by adding aggregate
This commit is contained in:
@@ -29,6 +29,7 @@ from app.utils.csv import Spreadsheet
|
|||||||
from app.utils.pagination import generate_next_dict, generate_previous_dict
|
from app.utils.pagination import generate_next_dict, generate_previous_dict
|
||||||
from app.utils.time import get_current_financial_year
|
from app.utils.time import get_current_financial_year
|
||||||
from app.utils.user import user_has_permissions
|
from app.utils.user import user_has_permissions
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
|
|
||||||
@main.route("/services/<uuid:service_id>/dashboard")
|
@main.route("/services/<uuid:service_id>/dashboard")
|
||||||
@@ -47,22 +48,31 @@ def service_dashboard(service_id):
|
|||||||
if not current_user.has_permissions("view_activity"):
|
if not current_user.has_permissions("view_activity"):
|
||||||
return redirect(url_for("main.choose_template", service_id=service_id))
|
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,
|
service_id=service_id,
|
||||||
)["notifications"]
|
)["notifications"]
|
||||||
|
|
||||||
job_response = job_api_client.get_jobs(service_id)
|
job_response = job_api_client.get_jobs(service_id)
|
||||||
|
|
||||||
service_data_retention_days = 7
|
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"],
|
"job_id": job["id"],
|
||||||
"time_left": get_time_left(job["created_at"]),
|
"time_left": get_time_left(job["created_at"]),
|
||||||
"download_link": url_for(
|
"download_link": url_for(
|
||||||
".view_job_csv", service_id=current_service.id, job_id=job["id"]
|
".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"],
|
"notification_count": job["notification_count"],
|
||||||
"created_by": job["created_by"],
|
"created_by": job["created_by"],
|
||||||
|
"notifications": aggregate_notifications_by_job.get(job["id"], []),
|
||||||
}
|
}
|
||||||
for job in job_response["data"]
|
for job in job_response["data"]
|
||||||
]
|
]
|
||||||
@@ -70,8 +80,7 @@ def service_dashboard(service_id):
|
|||||||
"views/dashboard/dashboard.html",
|
"views/dashboard/dashboard.html",
|
||||||
updates_url=url_for(".service_dashboard_updates", service_id=service_id),
|
updates_url=url_for(".service_dashboard_updates", service_id=service_id),
|
||||||
partials=get_dashboard_partials(service_id),
|
partials=get_dashboard_partials(service_id),
|
||||||
notifications=notifications,
|
job_and_notifications=job_and_notifications,
|
||||||
jobs=jobs,
|
|
||||||
service_data_retention_days=service_data_retention_days,
|
service_data_retention_days=service_data_retention_days,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,6 @@
|
|||||||
{{ ajax_block(partials, updates_url, 'totals') }}
|
{{ ajax_block(partials, updates_url, 'totals') }}
|
||||||
|
|
||||||
{{ ajax_block(partials, updates_url, 'template-statistics') }}
|
{{ ajax_block(partials, updates_url, 'template-statistics') }}
|
||||||
|
|
||||||
<h2 class="margin-top-4 margin-bottom-1">Recent Batches</h2>
|
<h2 class="margin-top-4 margin-bottom-1">Recent Batches</h2>
|
||||||
<div class='job-table'>
|
<div class='job-table'>
|
||||||
<table class="usa-table usa-table--borderless width-full">
|
<table class="usa-table usa-table--borderless width-full">
|
||||||
@@ -55,37 +54,37 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for notification in notifications[:5] %}
|
{% for job in job_and_notifications[:5] %}
|
||||||
{% if notification %}
|
{% if job.job_id and job.notifications %}
|
||||||
<tr class="table-row" id="{{ notification.job.id }}">
|
{% for notification in job.notifications %}
|
||||||
<th class="table-field">
|
<tr class="table-row" id="{{ job.job_id }}">
|
||||||
{{ notification.job.original_file_name if notification.job.original_file_name else 'Manually entered number'}}
|
<th class="table-field">
|
||||||
<br>
|
{{ notification.job.original_file_name if notification.job.original_file_name else 'Manually entered number'}}
|
||||||
<a class="usa-link file-list-filename" href="/services/{{ notification.service }}/jobs/{{ notification.job.id }}">View Batch</a>
|
<br>
|
||||||
</th>
|
<a class="usa-link file-list-filename" href="{{ job.view_job_link }}">View Batch</a>
|
||||||
<th class="table-field">
|
</th>
|
||||||
{{ notification.template.name }}
|
<th class="table-field">
|
||||||
</th>
|
{{ notification.template.name }}
|
||||||
<th class="table-field">
|
</th>
|
||||||
{{ notification.created_at | format_datetime_short_america }}
|
<th class="table-field">
|
||||||
</th>
|
{{ notification.created_at | format_datetime_short_america }}
|
||||||
<th class="table-field">
|
</th>
|
||||||
{{ notification.created_by.name }}
|
<th class="table-field">
|
||||||
</th>
|
{{ notification.created_by.name }}
|
||||||
{% set job_available = jobs|selectattr('job_id', 'equalto', notification.job.id)|first %}
|
</th>
|
||||||
<th class="table-field">
|
<th class="table-field">
|
||||||
{{ job_available.notification_count if job_available else ''}}
|
{{ job.notification_count}}
|
||||||
</th>
|
</th>
|
||||||
<th class="table-field">
|
<th class="table-field">
|
||||||
{% if job_available and job_available.time_left != "Data no longer available" %}
|
{% if notification and job.time_left != "Data no longer available" %}
|
||||||
<a class="usa-link file-list-filename" href="{{ job_available.download_link }}">
|
<a class="usa-link file-list-filename" href="{{ job.download_link }}">Download</a>
|
||||||
{{ "Download" if job_available.job_id else '' }}</a>
|
<span class="usa-hint">{{ job.time_left }}</span>
|
||||||
<span class="usa-hint">{{ job_available.time_left }}</span>
|
{% elif job %}
|
||||||
{% elif job_available %}
|
<span>{{ job.time_left }}</span>
|
||||||
<span>{{ job_available.time_left }}</span>
|
{% endif %}
|
||||||
{% endif %}
|
</th>
|
||||||
</th>
|
</tr>
|
||||||
</tr>
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|||||||
Reference in New Issue
Block a user