Use big numbers for organisation usage

This is the pattern we use to display counts of things on the dashboard
and usage pages. It does some nice stuff like dealing with
comma-separating and formatting monetary amounts.

This commit also adds some logic to show the free allowance used if the
service hasn’t spent anything on text messages yet.
This commit is contained in:
Chris Hill-Scott
2020-02-27 15:20:48 +00:00
parent d4f6be701b
commit 4d89d36847
2 changed files with 34 additions and 5 deletions

View File

@@ -1,3 +1,4 @@
{% from "components/big-number.html" import big_number %}
{% extends "org_template.html" %}
{% block org_page_title %}
@@ -16,9 +17,37 @@
<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>
<div class="grid-row">
<div class="column-one-third">{{ service.emails_sent|format_thousands }} emails sent</div>
<div class="column-one-third">{{ "£{:,.2f}".format(service.sms_cost) }} spent on text messages</div>
<div class="column-one-third">{{ "£{:,.2f}".format(service.letter_cost) }} spent on letters</div>
<div class="column-one-third">
{{ big_number(
service.emails_sent,
label='emails sent',
smallest=True
) }}
</div>
<div class="column-one-third">
{% if service.sms_cost %}
{{ big_number(
service.sms_cost,
'spent on text messages',
currency="£",
smallest=True
) }}
{% else %}
{{ big_number(
service.free_sms_limit - service.sms_remainder,
'free text messages sent',
smallest=True
) }}
{% endif %}
</div>
<div class="column-one-third">
{{ big_number(
service.letter_cost,
'spent on letters',
currency="£",
smallest=True
) }}
</div>
</div>
{% endfor %}
</ul>

View File

@@ -403,7 +403,7 @@ def test_organisation_services_shows_live_services_and_usage(
'free_sms_limit': 250000, 'letter_cost': 30.50, 'sms_billable_units': 122, 'sms_cost': 1.93,
'sms_remainder': None},
{'service_id': SERVICE_TWO_ID, 'service_name': '5', 'chargeable_billable_sms': 0, 'emails_sent': 20000,
'free_sms_limit': 250000, 'letter_cost': 0, 'sms_billable_units': 2500, 'sms_cost': 0.0,
'free_sms_limit': 250000, 'letter_cost': 0, 'sms_billable_units': 2500, 'sms_cost': 42.0,
'sms_remainder': None}
]}
)
@@ -424,7 +424,7 @@ def test_organisation_services_shows_live_services_and_usage(
assert normalize_spaces(usage_rows[2].text) == "£30.50 spent on letters"
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[4].text) == "£0.00 spent on text messages"
assert normalize_spaces(usage_rows[4].text) == "£42.00 spent on text messages"
assert normalize_spaces(usage_rows[5].text) == "£0.00 spent on letters"