convert time to sort

This commit is contained in:
Beverly Nguyen
2024-07-23 12:01:40 -07:00
parent febd037bed
commit 5d287d236e
6 changed files with 55 additions and 34 deletions

View File

@@ -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,

View File

@@ -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);

View File

@@ -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)

View File

@@ -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"]

View File

@@ -65,45 +65,36 @@
{% block maincolumn_content %}
<div class="dashboard margin-bottom-8">
<h1 class="usa-sr-only">All activity</h1>
{% if current_user.has_permissions('manage_templates') and not current_service.all_templates %}
<!-- {% include 'views/dashboard/write-first-messages.html' %} -->
{% endif %}
{{ ajax_block(partials, updates_url, 'upcoming') }}
<!-- {{ ajax_block(partials, updates_url, 'upcoming') }} -->
<h2 class="font-body-2xl line-height-sans-2 margin-0">All activity</h2>
<h2 class="margin-top-4 margin-bottom-1">Sent jobs</h2>
<div class="usa-table-container--scrollable" tabindex="0">
<table class="usa-table usa-table--borderless job-table">
<div class="table-wrapper" tabindex="0">
<table class="usa-table usa-table--borderless job-table" id="jobIdHeader">
<caption></caption>
<thead class="table-field-headings">
<tr>
<th data-sortable scope="col" role="columnheader" class="table-field-heading-first">
<th data-sortable aria-sort="none" scope="col" role="columnheader" class="table-field-heading-first" aria-sort="none" id="jobId">
<span>Job ID#</span>
</th>
<th data-sortable scope="col" role="columnheader" class="table-field-heading">
<span>Template</span>
</th>
<th data-sortable scope="col" role="columnheader" class="table-field-heading">
<span>Status</span>
<span>Time sent</span>
</th>
<th data-sortable scope="col" role="columnheader" class="table-field-heading">
<span>Sender</span>
</th>
<th data-sortable scope="col" role="columnheader" class="table-field-heading">
<span>Reports</span>
</th>
<th data-sortable scope="col" role="columnheader" class="table-field-heading">
<span># of Recipients</span>
</th>
<th data-sortable scope="col" role="columnheader" class="table-field-heading">
<span>Message parts used</span>
</th>
<th data-sortable scope="col" role="columnheader" class="table-field-heading">
<span>Delivery rate</span>
<span>Report</span>
</th>
</tr>
</thead>
@@ -111,17 +102,24 @@
{% if all_jobs_dict %}
{% for job in all_jobs_dict %}
{% if job.job_id %}
<tr class="table-row" id="{{ job.job_id }}">
<td class="table-field file-name" data-sort-value="{{ job.job_id[-12:].rjust(12, '0') }}">
<tr class="table-row" id="{{ job.job_id|replace('-', '') }}">
<!-- <th class="table-field file-name" scope="row" role="rowheader" data-sort-value="{{ job.job_id }}" id="jobId">
<a class="usa-link file-list-filename" href="{{ job.view_job_link }}">
{{ job.job_id[-12:] if job and job.job_id else 'Manually entered number' }}
</a>
{{ job.job_id if job.job_id else 'Manually entered number' }}
</a>
</th> -->
<td class="table-field file-name" scope="row" role="rowheader" data-sort-value="{{ job.job_id | replace('-', '') }}">
<a class="usa-link file-list-filename" href="{{ job.view_job_link }}">
{{ job.job_id if job.job_id else 'Manually entered number' }}
</a>
</td>
<td class="table-field template">
{{ job.template_name }}
</td>
<td class="table-field time-sent">
{{ job.created_at | format_datetime_table }}
<td data-sort-value="{{job.time_sent_data_value}}" class="table-field time-sent">
{{ (job.processing_finished if job.processing_finished else job.processing_started
if job.processing_started else job.created_at)|format_datetime_table }}
</td>
<td class="table-field sender">
{{ job.created_by.name }}
@@ -130,25 +128,19 @@
{% if job.time_left != "Data no longer available" %}
<a class="usa-link file-list-filename" href="{{ job.download_link }}"><img src="{{ url_for('static', filename='img/material-icons/file_download.svg') }}" alt="File Download Icon"></a>
{% elif job %}
<span>{{ job.time_left }} n/a</span>
<span>N/A</span>
{% endif %}
</td>
<td class="table-field count-of-recipients">
{{ job.notification_count}}
</td>
</tr>
{% endif %}
{% endfor %}
{% else %}
<tr class="table-row">
<td class="table-empty-message" colspan="10">No batched job messages found &thinsp;(messages are kept for {{ service_data_retention_days }} days).</td>
</tr>
{% endif %}
</tbody>
</table>
<p>
<b>Note:</b> Report data is only available for 7 days after your message has been sent
</p>
<div class="usa-sr-only usa-table__announcement-region" aria-live="polite"></div>
<p><b>Note:</b> Report data is only available for 7 days after your message has been sent</p>
</div>
{{show_pagination}}
</div>

View File

@@ -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({