mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-26 09:13:58 -04:00
Add a template to show letter usage if the service has the letter permission
This commit is contained in:
@@ -137,8 +137,12 @@ def usage(service_id):
|
|||||||
free_sms_allowance = billing_api_client.get_free_sms_fragment_limit_for_year(service_id, year)
|
free_sms_allowance = billing_api_client.get_free_sms_fragment_limit_for_year(service_id, year)
|
||||||
units = billing_api_client.get_billable_units(service_id, year)
|
units = billing_api_client.get_billable_units(service_id, year)
|
||||||
yearly_usage = billing_api_client.get_service_usage(service_id, year)
|
yearly_usage = billing_api_client.get_service_usage(service_id, year)
|
||||||
|
|
||||||
|
usage_template = 'views/usage.html'
|
||||||
|
if 'letter' in current_service['permissions']:
|
||||||
|
usage_template = 'views/usage-with-letters.html'
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/usage.html',
|
usage_template,
|
||||||
months=list(get_free_paid_breakdown_for_billable_units(
|
months=list(get_free_paid_breakdown_for_billable_units(
|
||||||
year,
|
year,
|
||||||
free_sms_allowance,
|
free_sms_allowance,
|
||||||
|
|||||||
141
app/templates/views/usage-with-letters.html
Normal file
141
app/templates/views/usage-with-letters.html
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
{% from "components/big-number.html" import big_number %}
|
||||||
|
{% from "components/table.html" import list_table, field, hidden_field_heading, row_heading, text_field %}
|
||||||
|
{% from "components/pill.html" import pill %}
|
||||||
|
|
||||||
|
{% extends "withnav_template.html" %}
|
||||||
|
|
||||||
|
{% block service_page_title %}
|
||||||
|
Usage
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block maincolumn_content %}
|
||||||
|
|
||||||
|
<h1 class='heading-large'>Usage</h1>
|
||||||
|
|
||||||
|
<div class="bottom-gutter">
|
||||||
|
{{ pill(years, selected_year, big_number_args={'smallest': True}) }}
|
||||||
|
</div>
|
||||||
|
<div id='pill-selected-item'>
|
||||||
|
<div class='grid-row'>
|
||||||
|
<div class='column-one-third'>
|
||||||
|
<h2 class='heading-small'>Emails</h2>
|
||||||
|
<div class="keyline-block">
|
||||||
|
{{ big_number(emails_sent, 'sent', smaller=True) }}
|
||||||
|
{{ big_number("Unlimited", 'free allowance', smaller=True) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class='column-one-third'>
|
||||||
|
<h2 class='heading-small'>Text messages</h2>
|
||||||
|
<div class="keyline-block">
|
||||||
|
{{ big_number(sms_sent, 'sent', smaller=True) }}
|
||||||
|
{{ big_number(sms_free_allowance, 'free allowance', smaller=True) }}
|
||||||
|
{{ big_number(sms_allowance_remaining, 'free allowance remaining', smaller=True) }}
|
||||||
|
{% if sms_chargeable %}
|
||||||
|
{{ big_number(
|
||||||
|
sms_chargeable,
|
||||||
|
'at {:.2f} pence per message'.format(sms_rate * 100),
|
||||||
|
smaller=True
|
||||||
|
) }}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class='column-one-third'>
|
||||||
|
<h2 class='heading-small'>Letters</h2>
|
||||||
|
<div class="keyline-block">
|
||||||
|
{{ big_number(letter_sent, 'sent', smaller=True) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class='grid-row'>
|
||||||
|
<div class='column-one-third'>
|
||||||
|
<div class="keyline-block">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class='column-one-third'>
|
||||||
|
<div class="keyline-block">
|
||||||
|
{{ big_number(
|
||||||
|
(sms_chargeable * sms_rate),
|
||||||
|
'spent',
|
||||||
|
currency="£",
|
||||||
|
smaller=True
|
||||||
|
) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class='column-one-third'>
|
||||||
|
<div class="keyline-block">
|
||||||
|
{{ big_number(
|
||||||
|
letter_cost,
|
||||||
|
'spent',
|
||||||
|
currency="£",
|
||||||
|
smaller=True
|
||||||
|
) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% if months %}
|
||||||
|
<div class="dashboard-table body-copy-table">
|
||||||
|
{% call(month, row_index) list_table(
|
||||||
|
months,
|
||||||
|
caption="Total spend",
|
||||||
|
caption_visible=False,
|
||||||
|
empty_message='',
|
||||||
|
field_headings=[
|
||||||
|
'By month',
|
||||||
|
hidden_field_heading('Cost'),
|
||||||
|
],
|
||||||
|
field_headings_visible=True
|
||||||
|
) %}
|
||||||
|
{% call row_heading() %}
|
||||||
|
{{ month.name }}
|
||||||
|
{% endcall %}
|
||||||
|
{% call field(align='left') %}
|
||||||
|
{{ big_number(
|
||||||
|
(sms_rate * month.paid) + month.letter_total,
|
||||||
|
currency="£",
|
||||||
|
smallest=True
|
||||||
|
) }}
|
||||||
|
<ul>
|
||||||
|
{% if month.free %}
|
||||||
|
<li class="tabular-numbers">{{ "{:,}".format(month.free) }} free text messages</li>
|
||||||
|
{% endif %}
|
||||||
|
{% if month.paid %}
|
||||||
|
<li class="tabular-numbers">{{ "{:,}".format(month.paid) }} text messages at
|
||||||
|
{{- ' {:.2f}p'.format(sms_rate * 100) }}</li>
|
||||||
|
{% endif %}
|
||||||
|
{% if not (month.free or month.paid) %}
|
||||||
|
<li aria-hidden="true">–</li>
|
||||||
|
{% endif %}
|
||||||
|
</ul>
|
||||||
|
<ul>
|
||||||
|
{% for letter in month.letters%}
|
||||||
|
{% if letter[0] %}
|
||||||
|
<li class="tabular-numbers">{{ "{:,}".format(letter[0])}} letters at {{ '{:.0f}p'.format(letter[1] * 100) }}
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% endcall %}
|
||||||
|
{% endcall %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="grid-row">
|
||||||
|
<div class="column-half">
|
||||||
|
<p class="align-with-heading-copy">
|
||||||
|
Financial year ends 31 March.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="column-half">
|
||||||
|
<p class="align-with-heading-copy">
|
||||||
|
What counts as 1 text message?<br />
|
||||||
|
See <a href="{{ url_for('.pricing') }}">pricing</a>.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
@@ -17,14 +17,14 @@
|
|||||||
</div>
|
</div>
|
||||||
<div id='pill-selected-item'>
|
<div id='pill-selected-item'>
|
||||||
<div class='grid-row'>
|
<div class='grid-row'>
|
||||||
<div class='column-one-third'>
|
<div class='column-half'>
|
||||||
<h2 class='heading-small'>Emails</h2>
|
<h2 class='heading-small'>Emails</h2>
|
||||||
<div class="keyline-block">
|
<div class="keyline-block">
|
||||||
{{ big_number(emails_sent, 'sent', smaller=True) }}
|
{{ big_number(emails_sent, 'sent', smaller=True) }}
|
||||||
{{ big_number("Unlimited", 'free allowance', smaller=True) }}
|
{{ big_number("Unlimited", 'free allowance', smaller=True) }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class='column-one-third'>
|
<div class='column-half'>
|
||||||
<h2 class='heading-small'>Text messages</h2>
|
<h2 class='heading-small'>Text messages</h2>
|
||||||
<div class="keyline-block">
|
<div class="keyline-block">
|
||||||
{{ big_number(sms_sent, 'sent', smaller=True) }}
|
{{ big_number(sms_sent, 'sent', smaller=True) }}
|
||||||
@@ -39,21 +39,15 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class='column-one-third'>
|
|
||||||
<h2 class='heading-small'>Letters</h2>
|
|
||||||
<div class="keyline-block">
|
|
||||||
{{ big_number(letter_sent, 'sent', smaller=True) }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class='grid-row'>
|
<div class='grid-row'>
|
||||||
<div class='column-one-third'>
|
<div class='column-half'>
|
||||||
<div class="keyline-block">
|
<div class="keyline-block">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class='column-one-third'>
|
<div class='column-half'>
|
||||||
<div class="keyline-block">
|
<div class="keyline-block">
|
||||||
{{ big_number(
|
{{ big_number(
|
||||||
(sms_chargeable * sms_rate),
|
(sms_chargeable * sms_rate),
|
||||||
@@ -63,17 +57,6 @@
|
|||||||
) }}
|
) }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class='column-one-third'>
|
|
||||||
<div class="keyline-block">
|
|
||||||
{{ big_number(
|
|
||||||
letter_cost,
|
|
||||||
'spent',
|
|
||||||
currency="£",
|
|
||||||
smaller=True
|
|
||||||
) }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% if months %}
|
{% if months %}
|
||||||
@@ -94,11 +77,11 @@
|
|||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% call field(align='left') %}
|
{% call field(align='left') %}
|
||||||
{{ big_number(
|
{{ big_number(
|
||||||
(sms_rate * month.paid) + month.letter_total,
|
sms_rate * month.paid,
|
||||||
currency="£",
|
currency="£",
|
||||||
smallest=True
|
smallest=True
|
||||||
) }}
|
) }}
|
||||||
<ul>
|
<ul>
|
||||||
{% if month.free %}
|
{% if month.free %}
|
||||||
<li class="tabular-numbers">{{ "{:,}".format(month.free) }} free text messages</li>
|
<li class="tabular-numbers">{{ "{:,}".format(month.free) }} free text messages</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -110,14 +93,6 @@
|
|||||||
<li aria-hidden="true">–</li>
|
<li aria-hidden="true">–</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
<ul>
|
|
||||||
{% for letter in month.letters%}
|
|
||||||
{% if letter[0] %}
|
|
||||||
<li class="tabular-numbers">{{ "{:,}".format(letter[0])}} letters at {{ '{:.0f}p'.format(letter[1] * 100) }}
|
|
||||||
</li>
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
</div>
|
</div>
|
||||||
@@ -138,4 +113,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -601,6 +601,49 @@ def test_usage_page(
|
|||||||
|
|
||||||
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||||||
|
|
||||||
|
cols = page.find_all('div', {'class': 'column-half'})
|
||||||
|
nav = page.find('ul', {'class': 'pill', 'role': 'tablist'})
|
||||||
|
nav_links = nav.find_all('a')
|
||||||
|
|
||||||
|
assert normalize_spaces(nav_links[0].text) == '2010 to 2011 financial year'
|
||||||
|
assert normalize_spaces(nav.find('li', {'aria-selected': 'true'}).text) == '2011 to 2012 financial year'
|
||||||
|
assert normalize_spaces(nav_links[1].text) == '2012 to 2013 financial year'
|
||||||
|
assert '252,190' in cols[1].text
|
||||||
|
assert 'Text messages' in cols[1].text
|
||||||
|
|
||||||
|
table = page.find('table').text.strip()
|
||||||
|
|
||||||
|
assert '249,860 free text messages' in table
|
||||||
|
assert '40 free text messages' in table
|
||||||
|
assert '960 text messages at 1.65p' in table
|
||||||
|
assert 'April' in table
|
||||||
|
assert 'February' in table
|
||||||
|
assert 'March' in table
|
||||||
|
assert '£15.84' in table
|
||||||
|
assert '140 free text messages' in table
|
||||||
|
assert '£20.30' in table
|
||||||
|
assert '1,230 text messages at 1.65p' in table
|
||||||
|
|
||||||
|
|
||||||
|
@freeze_time("2012-03-31 12:12:12")
|
||||||
|
def test_usage_page_with_letters(
|
||||||
|
logged_in_client,
|
||||||
|
service_one,
|
||||||
|
mock_get_usage,
|
||||||
|
mock_get_billable_units,
|
||||||
|
mock_get_free_sms_fragment_limit
|
||||||
|
):
|
||||||
|
service_one['permissions'].append('letter')
|
||||||
|
response = logged_in_client.get(url_for('main.usage', service_id=SERVICE_ONE_ID))
|
||||||
|
|
||||||
|
assert response.status_code == 200
|
||||||
|
|
||||||
|
mock_get_billable_units.assert_called_once_with(SERVICE_ONE_ID, 2011)
|
||||||
|
mock_get_usage.assert_called_once_with(SERVICE_ONE_ID, 2011)
|
||||||
|
mock_get_free_sms_fragment_limit.assert_called_with(SERVICE_ONE_ID, 2011)
|
||||||
|
|
||||||
|
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||||||
|
|
||||||
cols = page.find_all('div', {'class': 'column-one-third'})
|
cols = page.find_all('div', {'class': 'column-one-third'})
|
||||||
nav = page.find('ul', {'class': 'pill', 'role': 'tablist'})
|
nav = page.find('ul', {'class': 'pill', 'role': 'tablist'})
|
||||||
nav_links = nav.find_all('a')
|
nav_links = nav.find_all('a')
|
||||||
|
|||||||
Reference in New Issue
Block a user