diff --git a/app/__init__.py b/app/__init__.py index 76f3664cd..2a22fb841 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -33,6 +33,7 @@ from app.asset_fingerprinter import asset_fingerprinter from app.config import configs from app.extensions import redis_client from app.formatters import ( + convert_time_unixtimestamp, convert_markdown_template, convert_to_boolean, format_auth_type, diff --git a/app/assets/javascripts/sortAlphanumeric.js b/app/assets/javascripts/sortAlphanumeric.js new file mode 100644 index 000000000..726f7b2cd --- /dev/null +++ b/app/assets/javascripts/sortAlphanumeric.js @@ -0,0 +1,14 @@ +(function (window) { + // document.addEventListener("DOMContentLoaded", function() { + // const rows = document.querySelectorAll('td.table-field.file-name'); + + // rows.forEach(row => { + // let sortValue = row.getAttribute('data-sort-value'); + // if (sortValue) { + // // Remove non-numeric characters to ensure numerical comparison + // sortValue = sortValue.replace(/\D/g, ''); + // row.setAttribute('data-sort-value', sortValue); + // } + // }); + // }); +})(window); diff --git a/app/formatters.py b/app/formatters.py index 5cb3feeaf..c427c2a9a 100644 --- a/app/formatters.py +++ b/app/formatters.py @@ -231,6 +231,11 @@ def naturaltime_without_indefinite_article(date): ) +def convert_time_unixtimestamp(date_string): + dt = datetime.fromisoformat(date_string) + return int(dt.timestamp()) + + def format_delta(date): # This method assumes that date is in UTC date = parse_naive_dt(date) diff --git a/app/main/views/activity.py b/app/main/views/activity.py index f8e0f8dba..a415dc4d5 100644 --- a/app/main/views/activity.py +++ b/app/main/views/activity.py @@ -3,7 +3,7 @@ from flask_login import current_user from werkzeug.utils import redirect from app import current_service, job_api_client -from app.formatters import get_time_left +from app.formatters import get_time_left, convert_time_unixtimestamp from app.main import main from app.utils.pagination import ( generate_next_dict, @@ -35,7 +35,8 @@ def all_jobs_activity(service_id): service_data_retention_days=service_data_retention_days, next_page=next_page, prev_page=prev_page, - pagination=pagination + pagination=pagination, + jobs=jobs ) @@ -56,10 +57,16 @@ def generate_job_dict(jobs): return [ { "job_id": job["id"], + "sort_value": hashlib.sha1(job["id"].encode("utf-8")).hexdigest(), + "job_sort_value": job["id"].replace("-", ""), "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"], "notification_count": job["notification_count"], "created_by": job["created_by"], "template_name": job["template_name"] diff --git a/app/templates/views/activity/all-activity.html b/app/templates/views/activity/all-activity.html index 8a48b6050..ad98dd9c6 100644 --- a/app/templates/views/activity/all-activity.html +++ b/app/templates/views/activity/all-activity.html @@ -65,45 +65,36 @@ {% block maincolumn_content %} -

All activity

{% if current_user.has_permissions('manage_templates') and not current_service.all_templates %} {% endif %} - {{ ajax_block(partials, updates_url, 'upcoming') }} +

All activity

Sent jobs

-
- +
+
+ - - - - @@ -111,17 +102,24 @@ {% if all_jobs_dict %} {% for job in all_jobs_dict %} {% if job.job_id %} - - + + + - - {% endif %} {% endfor %} {% else %} - - - + {% endif %}
+ Job ID# Template - Status + Time sent Sender - Reports - - # of Recipients - - Message parts used - - Delivery rate + Report
+
+ + {{ job.job_id if job.job_id else 'Manually entered number' }} + {{ job.template_name }} - {{ job.created_at | format_datetime_table }} + + {{ (job.processing_finished if job.processing_finished else job.processing_started + if job.processing_started else job.created_at)|format_datetime_table }} {{ job.created_by.name }} @@ -130,25 +128,19 @@ {% if job.time_left != "Data no longer available" %} File Download Icon {% elif job %} - {{ job.time_left }} n/a + N/A {% endif %} - {{ job.notification_count}} -
No batched job messages found  (messages are kept for {{ service_data_retention_days }} days).
-

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

+
+

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

{{show_pagination}}
diff --git a/gulpfile.js b/gulpfile.js index 7c87a2b79..7f7d117da 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -127,6 +127,8 @@ const javascripts = () => { paths.src + 'javascripts/loginAlert.js', paths.src + 'javascripts/main.js', paths.src + 'javascripts/sampleChartDashboard.js', + paths.src + 'javascripts/sortAlphanumeric.js', + ]) .pipe(plugins.prettyerror()) .pipe(plugins.babel({