diff --git a/app/__init__.py b/app/__init__.py index e47a263d8..7d03f0ece 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -35,6 +35,7 @@ from app.extensions import redis_client from app.formatters import ( convert_markdown_template, convert_to_boolean, + convert_time_unixtimestamp, format_auth_type, format_billions, format_date, @@ -672,6 +673,7 @@ def add_template_filters(application): format_thousands, id_safe, convert_to_boolean, + convert_time_unixtimestamp, format_list_items, iteration_count, recipient_count, diff --git a/app/main/views/activity.py b/app/main/views/activity.py index b1cafdb6a..effc65a04 100644 --- a/app/main/views/activity.py +++ b/app/main/views/activity.py @@ -78,47 +78,45 @@ def handle_pagination(jobs, service_id, page): return prev_page, next_page, pagination +JOB_STATUS_DELIVERED = "delivered" +JOB_STATUS_FAILED = "failed" + + +def get_job_statistics(job, status): + statistics = job.get("statistics", []) + for stat in statistics: + if stat.get("status") == status: + return stat.get("count") + return None + + +def create_job_dict_entry(job): + job_id = job.get("id") + can_download = get_time_left(job.get("created_at")) != "Data no longer available" + activity_time = job.get("processing_started") or job.get("created_at") + + return { + "job_id": job_id, + "can_download": can_download, + "download_link": url_for( + ".view_job_csv", + service_id=current_service.id, + job_id=job_id + ) if can_download else None, + "view_job_link": url_for( + ".view_job", + service_id=current_service.id, + job_id=job_id + ), + "activity_time": activity_time, + "created_by": job.get("created_by"), + "template_name": job.get("template_name"), + "delivered_count": get_job_statistics(job, JOB_STATUS_DELIVERED), + "failed_count": get_job_statistics(job, JOB_STATUS_FAILED), + } + + def generate_job_dict(jobs): - return [ - { - "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"] - ), - "created_at": job["created_at"], - "time_sent_data_value": convert_time_unixtimestamp( - job["processing_finished"] - if job["processing_finished"] - else ( - job["processing_started"] - if job["processing_started"] - else job["created_at"] - ) - ), - "processing_finished": job["processing_finished"], - "processing_started": job["processing_started"], - "created_by": job["created_by"], - "template_name": job["template_name"], - "delivered_count": next( - ( - stat["count"] - for stat in job.get("statistics", []) - if stat["status"] == "delivered" - ), - None, - ), - "failed_count": next( - ( - stat["count"] - for stat in job.get("statistics", []) - if stat["status"] == "failed" - ), - None, - ), - } - for job in jobs["data"] - ] + if not jobs or not jobs.get("data"): + return [] + return [create_job_dict_entry(job) for job in jobs["data"]] diff --git a/app/templates/views/activity/all-activity.html b/app/templates/views/activity/all-activity.html index f590ec2d5..f58889f3a 100644 --- a/app/templates/views/activity/all-activity.html +++ b/app/templates/views/activity/all-activity.html @@ -96,13 +96,12 @@ {{ job.template_name }} - - {{ (job.processing_finished if job.processing_finished else job.processing_started - if job.processing_started else job.created_at)|format_datetime_table }} + + {{ job.activity_time|format_datetime_table }} {{ job.created_by.name }} - {% if job.time_left != "Data no longer available" %} + {% if job.can_download %} Download report link