mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-24 16:24:08 -04:00
Sum up usage for an whole organisation
We invoice on a per organisation basis, so it’s useful to know the per organisation figures without needing to do any spreadsheet-fu.
This commit is contained in:
@@ -125,10 +125,14 @@ def add_organisation_from_nhs_local_service(service_id):
|
|||||||
@main.route("/organisations/<uuid:org_id>", methods=['GET'])
|
@main.route("/organisations/<uuid:org_id>", methods=['GET'])
|
||||||
@user_has_permissions()
|
@user_has_permissions()
|
||||||
def organisation_dashboard(org_id):
|
def organisation_dashboard(org_id):
|
||||||
services = current_organisation.services_and_usage()
|
services = current_organisation.services_and_usage()['services']
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/organisations/organisation/index.html',
|
'views/organisations/organisation/index.html',
|
||||||
services=services
|
services=services,
|
||||||
|
**{
|
||||||
|
f'total_{key}': sum(service[key] for service in services)
|
||||||
|
for key in ('emails_sent', 'sms_cost', 'letter_cost')
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,34 @@
|
|||||||
Usage
|
Usage
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
|
<div class="grid-row">
|
||||||
|
<div class="column-one-third">
|
||||||
|
{{ big_number(
|
||||||
|
total_emails_sent,
|
||||||
|
label='emails sent',
|
||||||
|
smaller=True
|
||||||
|
) }}
|
||||||
|
</div>
|
||||||
|
<div class="column-one-third">
|
||||||
|
{{ big_number(
|
||||||
|
total_sms_cost,
|
||||||
|
'spent on text messages',
|
||||||
|
currency="£",
|
||||||
|
smaller=True
|
||||||
|
) }}
|
||||||
|
</div>
|
||||||
|
<div class="column-one-third">
|
||||||
|
{{ big_number(
|
||||||
|
total_letter_cost,
|
||||||
|
'spent on letters',
|
||||||
|
currency="£",
|
||||||
|
smaller=True
|
||||||
|
) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
{% for service in services['services'] %}
|
{% for service in services %}
|
||||||
<li class="browse-list-item">
|
<li class="browse-list-item">
|
||||||
<a href="{{ url_for('main.usage', service_id=service.service_id) }}" class="govuk-link govuk-link--no-visited-state browse-list-link">{{ service.service_name }}</a>
|
<a href="{{ url_for('main.usage', service_id=service.service_id) }}" class="govuk-link govuk-link--no-visited-state browse-list-link">{{ service.service_name }}</a>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ def test_view_organisation_shows_the_correct_organisation(
|
|||||||
'app.organisations_client.get_organisation', return_value=org
|
'app.organisations_client.get_organisation', return_value=org
|
||||||
)
|
)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
'app.organisations_client.get_services_and_usage', return_value=[]
|
'app.organisations_client.get_services_and_usage', return_value={'services': {}}
|
||||||
)
|
)
|
||||||
|
|
||||||
page = client_request.get(
|
page = client_request.get(
|
||||||
@@ -413,19 +413,25 @@ def test_organisation_services_shows_live_services_and_usage(
|
|||||||
mock.assert_called_once_with(ORGANISATION_ID, 2019)
|
mock.assert_called_once_with(ORGANISATION_ID, 2019)
|
||||||
|
|
||||||
services = page.select('.browse-list-item')
|
services = page.select('.browse-list-item')
|
||||||
|
usage_rows = page.find_all("div", class_="column-one-third")
|
||||||
assert len(services) == 2
|
assert len(services) == 2
|
||||||
|
|
||||||
|
# Totals
|
||||||
|
assert normalize_spaces(usage_rows[0].text) == "33,000 emails sent"
|
||||||
|
assert normalize_spaces(usage_rows[1].text) == "£43.93 spent on text messages"
|
||||||
|
assert normalize_spaces(usage_rows[2].text) == "£30.50 spent on letters"
|
||||||
|
|
||||||
assert normalize_spaces(services[0].text) == '1'
|
assert normalize_spaces(services[0].text) == '1'
|
||||||
assert normalize_spaces(services[1].text) == '5'
|
assert normalize_spaces(services[1].text) == '5'
|
||||||
assert services[0].find('a')['href'] == url_for('main.usage', service_id=SERVICE_ONE_ID)
|
assert services[0].find('a')['href'] == url_for('main.usage', service_id=SERVICE_ONE_ID)
|
||||||
usage_rows = page.find_all("div", class_="column-one-third")
|
|
||||||
assert normalize_spaces(usage_rows[0].text) == "13,000 emails sent"
|
assert normalize_spaces(usage_rows[3].text) == "13,000 emails sent"
|
||||||
assert normalize_spaces(usage_rows[1].text) == "£1.93 spent on text messages"
|
assert normalize_spaces(usage_rows[4].text) == "£1.93 spent on text messages"
|
||||||
assert normalize_spaces(usage_rows[2].text) == "£30.50 spent on letters"
|
assert normalize_spaces(usage_rows[5].text) == "£30.50 spent on letters"
|
||||||
assert services[1].find('a')['href'] == url_for('main.usage', service_id=SERVICE_TWO_ID)
|
assert services[1].find('a')['href'] == url_for('main.usage', service_id=SERVICE_TWO_ID)
|
||||||
assert normalize_spaces(usage_rows[3].text) == "20,000 emails sent"
|
assert normalize_spaces(usage_rows[6].text) == "20,000 emails sent"
|
||||||
assert normalize_spaces(usage_rows[4].text) == "£42.00 spent on text messages"
|
assert normalize_spaces(usage_rows[7].text) == "£42.00 spent on text messages"
|
||||||
assert normalize_spaces(usage_rows[5].text) == "£0.00 spent on letters"
|
assert normalize_spaces(usage_rows[8].text) == "£0.00 spent on letters"
|
||||||
|
|
||||||
|
|
||||||
def test_organisation_trial_mode_services_shows_all_non_live_services(
|
def test_organisation_trial_mode_services_shows_all_non_live_services(
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ def test_a_page_should_nave_selected_org_navigation_item(
|
|||||||
mocker
|
mocker
|
||||||
):
|
):
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
'app.organisations_client.get_services_and_usage', return_value=[]
|
'app.organisations_client.get_services_and_usage', return_value={'services': {}}
|
||||||
)
|
)
|
||||||
page = client_request.get(endpoint, org_id=ORGANISATION_ID)
|
page = client_request.get(endpoint, org_id=ORGANISATION_ID)
|
||||||
selected_nav_items = page.select('.navigation a.selected')
|
selected_nav_items = page.select('.navigation a.selected')
|
||||||
|
|||||||
Reference in New Issue
Block a user