mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-06 02:58:25 -04:00
total message ratio update
This commit is contained in:
@@ -6,17 +6,17 @@
|
|||||||
var chartTitle = document.getElementById('chartTitle').textContent;
|
var chartTitle = document.getElementById('chartTitle').textContent;
|
||||||
|
|
||||||
// Access data attributes from the HTML
|
// Access data attributes from the HTML
|
||||||
var sms_sent = parseInt(chartContainer.getAttribute('data-sms-sent'));
|
var messages_sent = parseInt(chartContainer.getAttribute('data-messages-sent'));
|
||||||
var sms_remaining_messages = parseInt(chartContainer.getAttribute('data-sms-allowance-remaining'));
|
var total_message_limit = parseInt(chartContainer.getAttribute('data-total-message-limit'));
|
||||||
var totalMessages = sms_sent + sms_remaining_messages;
|
var totalMessages = messages_sent + total_message_limit;
|
||||||
|
|
||||||
// Update the message below the chart
|
// Update the message below the chart
|
||||||
document.getElementById('message').innerText = `${sms_sent.toLocaleString()} sent / ${sms_remaining_messages.toLocaleString()} remaining`;
|
document.getElementById('message').innerText = `${messages_sent.toLocaleString()} sent / ${total_message_limit.toLocaleString()} remaining`;
|
||||||
|
|
||||||
// Calculate minimum width for "Messages Sent" as 1% of the total chart width
|
// Calculate minimum width for "Messages Sent" as 1% of the total chart width
|
||||||
var minSentPercentage = (sms_sent === 0) ? 0 : 0.02;
|
var minSentPercentage = (messages_sent === 0) ? 0 : 0.02;
|
||||||
var minSentValue = totalMessages * minSentPercentage;
|
var minSentValue = totalMessages * minSentPercentage;
|
||||||
var displaySent = Math.max(sms_sent, minSentValue);
|
var displaySent = Math.max(messages_sent, minSentValue);
|
||||||
var displayRemaining = totalMessages - displaySent;
|
var displayRemaining = totalMessages - displaySent;
|
||||||
|
|
||||||
var svg = d3.select("#totalMessageChart");
|
var svg = d3.select("#totalMessageChart");
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
.attr("width", 0) // Start with width 0 for animation
|
.attr("width", 0) // Start with width 0 for animation
|
||||||
.on('mouseover', function(event) {
|
.on('mouseover', function(event) {
|
||||||
tooltip.style('display', 'block')
|
tooltip.style('display', 'block')
|
||||||
.html(`Messages Sent: ${sms_sent.toLocaleString()}`);
|
.html(`Messages Sent: ${messages_sent.toLocaleString()}`);
|
||||||
})
|
})
|
||||||
.on('mousemove', function(event) {
|
.on('mousemove', function(event) {
|
||||||
tooltip.style('left', `${event.pageX + 10}px`)
|
tooltip.style('left', `${event.pageX + 10}px`)
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
.attr("width", 0) // Start with width 0 for animation
|
.attr("width", 0) // Start with width 0 for animation
|
||||||
.on('mouseover', function(event) {
|
.on('mouseover', function(event) {
|
||||||
tooltip.style('display', 'block')
|
tooltip.style('display', 'block')
|
||||||
.html(`Remaining: ${sms_remaining_messages.toLocaleString()}`);
|
.html(`Remaining: ${total_message_limit.toLocaleString()}`);
|
||||||
})
|
})
|
||||||
.on('mousemove', function(event) {
|
.on('mousemove', function(event) {
|
||||||
tooltip.style('left', `${event.pageX + 10}px`)
|
tooltip.style('left', `${event.pageX + 10}px`)
|
||||||
@@ -115,9 +115,9 @@
|
|||||||
var tbodyRow = document.createElement('tr');
|
var tbodyRow = document.createElement('tr');
|
||||||
|
|
||||||
var tdMessagesSent = document.createElement('td');
|
var tdMessagesSent = document.createElement('td');
|
||||||
tdMessagesSent.textContent = sms_sent.toLocaleString(); // Value for Messages Sent
|
tdMessagesSent.textContent = messages_sent.toLocaleString(); // Value for Messages Sent
|
||||||
var tdRemaining = document.createElement('td');
|
var tdRemaining = document.createElement('td');
|
||||||
tdRemaining.textContent = sms_remaining_messages.toLocaleString(); // Value for Remaining
|
tdRemaining.textContent = total_message_limit.toLocaleString(); // Value for Remaining
|
||||||
|
|
||||||
tbodyRow.appendChild(tdMessagesSent);
|
tbodyRow.appendChild(tdMessagesSent);
|
||||||
tbodyRow.appendChild(tdRemaining);
|
tbodyRow.appendChild(tdRemaining);
|
||||||
|
|||||||
@@ -48,31 +48,24 @@ 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))
|
||||||
|
|
||||||
yearly_usage = billing_api_client.get_annual_usage_for_service(
|
|
||||||
service_id,
|
|
||||||
get_current_financial_year(),
|
|
||||||
)
|
|
||||||
free_sms_allowance = billing_api_client.get_free_sms_fragment_limit_for_year(
|
|
||||||
current_service.id,
|
|
||||||
)
|
|
||||||
usage_data = get_annual_usage_breakdown(yearly_usage, free_sms_allowance)
|
|
||||||
sms_sent = usage_data["sms_sent"]
|
|
||||||
sms_allowance_remaining = usage_data["sms_allowance_remaining"]
|
|
||||||
|
|
||||||
job_response = job_api_client.get_jobs(service_id)["data"]
|
job_response = job_api_client.get_jobs(service_id)["data"]
|
||||||
service_data_retention_days = 7
|
service_data_retention_days = 7
|
||||||
|
|
||||||
filtered_jobs = [job for job in job_response if job["job_status"] != "cancelled"]
|
filtered_jobs = [job for job in job_response if job["job_status"] != "cancelled"]
|
||||||
sorted_jobs = sorted(filtered_jobs, key=lambda job: job["created_at"], reverse=True)
|
sorted_jobs = sorted(filtered_jobs, key=lambda job: job["created_at"], reverse=True)
|
||||||
|
|
||||||
|
total_messages = service_api_client.get_service_message_ratio(service_id)
|
||||||
|
total_message_limit = total_messages.get('total_message_limit', 0)
|
||||||
|
messages_sent = total_messages.get('messages_sent', 0)
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
"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),
|
||||||
jobs=sorted_jobs,
|
jobs=sorted_jobs,
|
||||||
service_data_retention_days=service_data_retention_days,
|
service_data_retention_days=service_data_retention_days,
|
||||||
sms_sent=sms_sent,
|
total_message_limit=total_message_limit,
|
||||||
sms_allowance_remaining=sms_allowance_remaining,
|
messages_sent=messages_sent
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -537,6 +537,10 @@ class ServiceAPIClient(NotifyAdminAPIClient):
|
|||||||
"""
|
"""
|
||||||
return self.get("/service/invite/redis/{0}".format(redis_key))
|
return self.get("/service/invite/redis/{0}".format(redis_key))
|
||||||
|
|
||||||
|
def get_service_message_ratio(self, service_id):
|
||||||
|
return self.get(
|
||||||
|
url="service/get-service-message-ratio?service_id={0}".format(service_id),
|
||||||
|
)
|
||||||
|
|
||||||
service_api_client = ServiceAPIClient()
|
service_api_client = ServiceAPIClient()
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
{{ ajax_block(partials, updates_url, 'inbox') }}
|
{{ ajax_block(partials, updates_url, 'inbox') }}
|
||||||
|
|
||||||
<div id="totalMessageChartContainer" data-sms-sent="{{ sms_sent }}" data-sms-allowance-remaining="{{ sms_allowance_remaining }}">
|
<div id="totalMessageChartContainer" data-messages-sent="{{ messages_sent }}" data-total-message-limit="{{ total_message_limit }}">
|
||||||
<h2 id="chartTitle">Total messages</h2>
|
<h2 id="chartTitle">Total messages</h2>
|
||||||
<svg id="totalMessageChart"></svg>
|
<svg id="totalMessageChart"></svg>
|
||||||
<div id="message"></div>
|
<div id="message"></div>
|
||||||
|
|||||||
Reference in New Issue
Block a user