diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index 8c861d03d..b21bf0fdf 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -137,8 +137,12 @@ def usage(service_id): 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) 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( - 'views/usage.html', + usage_template, months=list(get_free_paid_breakdown_for_billable_units( year, free_sms_allowance, diff --git a/app/templates/views/usage-with-letters.html b/app/templates/views/usage-with-letters.html new file mode 100644 index 000000000..7d26976d6 --- /dev/null +++ b/app/templates/views/usage-with-letters.html @@ -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 %} + +

Usage

+ +
+ {{ pill(years, selected_year, big_number_args={'smallest': True}) }} +
+
+
+
+

Emails

+
+ {{ big_number(emails_sent, 'sent', smaller=True) }} + {{ big_number("Unlimited", 'free allowance', smaller=True) }} +
+
+
+

Text messages

+
+ {{ 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 %} +
+
+
+

Letters

+
+ {{ big_number(letter_sent, 'sent', smaller=True) }} +
+
+
+ +
+
+
+   +
+
+
+
+ {{ big_number( + (sms_chargeable * sms_rate), + 'spent', + currency="£", + smaller=True + ) }} +
+
+
+
+ {{ big_number( + letter_cost, + 'spent', + currency="£", + smaller=True + ) }} +
+
+ +
+ + {% if months %} +
+ {% 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 + ) }} + + + {% endcall %} + {% endcall %} +
+ {% endif %} +
+ +
+
+

+ Financial year ends 31 March. +

+
+
+

+ What counts as 1 text message?
+ See pricing. +

+
+
+ +{% endblock %} diff --git a/app/templates/views/usage.html b/app/templates/views/usage.html index 7d26976d6..85fbf32c3 100644 --- a/app/templates/views/usage.html +++ b/app/templates/views/usage.html @@ -17,14 +17,14 @@
-
+

Emails

{{ big_number(emails_sent, 'sent', smaller=True) }} {{ big_number("Unlimited", 'free allowance', smaller=True) }}
-
+

Text messages

{{ big_number(sms_sent, 'sent', smaller=True) }} @@ -39,21 +39,15 @@ {% endif %}
-
-

Letters

-
- {{ big_number(letter_sent, 'sent', smaller=True) }} -
-
-
+
 
-
+
{{ big_number( (sms_chargeable * sms_rate), @@ -63,17 +57,6 @@ ) }}
-
-
- {{ big_number( - letter_cost, - 'spent', - currency="£", - smaller=True - ) }} -
-
-
{% if months %} @@ -94,11 +77,11 @@ {% endcall %} {% call field(align='left') %} {{ big_number( - (sms_rate * month.paid) + month.letter_total, + sms_rate * month.paid, currency="£", smallest=True ) }} -
    +
      {% if month.free %}
    • {{ "{:,}".format(month.free) }} free text messages
    • {% endif %} @@ -110,14 +93,6 @@ {% endif %}
    -
      - {% for letter in month.letters%} - {% if letter[0] %} -
    • {{ "{:,}".format(letter[0])}} letters at {{ '{:.0f}p'.format(letter[1] * 100) }} -
    • - {% endif %} - {% endfor %} -
    {% endcall %} {% endcall %}
@@ -138,4 +113,4 @@
-{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/tests/app/main/views/test_dashboard.py b/tests/app/main/views/test_dashboard.py index de86f138f..66163724b 100644 --- a/tests/app/main/views/test_dashboard.py +++ b/tests/app/main/views/test_dashboard.py @@ -601,6 +601,49 @@ def test_usage_page( 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'}) nav = page.find('ul', {'class': 'pill', 'role': 'tablist'}) nav_links = nav.find_all('a')