Add organization message usage and service counts to dashboard

- Fetch organization message allowance from API endpoint
- Display messages sent, remaining, and total limit on dashboard
- Add service count statistics (total, live, trial, suspended)
- Pass message usage data to template for chart visualization
This commit is contained in:
Beverly Nguyen
2025-10-16 14:39:01 -07:00
parent 8877087c28
commit fb528f03a8
3 changed files with 32 additions and 3 deletions

View File

@@ -5,7 +5,12 @@ from functools import partial
from flask import current_app, flash, redirect, render_template, request, url_for
from flask_login import current_user
from app import current_organization, org_invite_api_client, organizations_client
from app import (
current_organization,
org_invite_api_client,
organizations_client,
service_api_client,
)
from app.main import main
from app.main.forms import (
AdminBillingDetailsForm,
@@ -92,10 +97,29 @@ def organization_dashboard(org_id):
year = requested_and_current_financial_year(request)[0]
# TODO: total message allowance
try:
message_usage = service_api_client.get_organization_message_usage(org_id)
except Exception as e:
current_app.logger.error(f"Error fetching organization message usage: {e}")
message_usage = {}
messages_sent = message_usage.get("messages_sent", 0)
messages_remaining = message_usage.get("messages_remaining", 0)
total_message_limit = message_usage.get("total_message_limit", 0)
services = current_organization.services
service_counts = get_service_counts_by_status(services)
return render_template(
"views/organizations/organization/index.html",
selected_year=year,
messages_sent=messages_sent,
messages_remaining=messages_remaining,
total_message_limit=total_message_limit,
total_services=service_counts["total"],
live_services=service_counts["live"],
trial_services=service_counts["trial"],
suspended_services=service_counts["suspended"],
)

View File

@@ -561,6 +561,11 @@ class ServiceAPIClient(NotifyAdminAPIClient):
url="service/get-service-message-ratio?service_id={0}".format(service_id),
)
def get_organization_message_usage(self, org_id):
return self.get(
url="/organizations/{0}/message-allowance".format(org_id),
)
service_api_client = ServiceAPIClient()

View File

@@ -9,7 +9,7 @@
{{ page_header('Organization Dashboard', size='large') }}
<div id="totalMessageChartContainer" data-messages-sent="{{ messages_sent|default(0) }}" data-messages-remaining="{{ messages_remaining|default(0) }}">
<div id="totalMessageChartContainer" data-messages-sent="{{ messages_sent|default(0) }}" data-messages-remaining="{{ messages_remaining|default(0) }}" data-total-message-limit="{{ total_message_limit|default(0) }}">
<div class="grid-row flex-align-center">
<h2 id="chartTitle" class="margin-right-1 margin-y-0">Overall {{ selected_year }} Total Message Allowance</h2>
<button