From b7db7debc5142f2d64d6dd92f9430004d7c2ece1 Mon Sep 17 00:00:00 2001 From: Rebecca Law Date: Tue, 19 Dec 2017 14:35:10 +0000 Subject: [PATCH] Add letters to usage page. Before this goes live need to only show letters on usage if the service has the permission. --- app/main/views/dashboard.py | 17 +++++++++++++-- app/templates/views/usage.html | 30 ++++++++++++++++++++------ tests/app/main/views/test_dashboard.py | 30 +++++++++++++------------- tests/conftest.py | 9 +++++++- 4 files changed, 61 insertions(+), 25 deletions(-) diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index ab910a7f1..8c861d03d 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -337,6 +337,11 @@ def calculate_usage(usage, free_sms_fragment_limit): emails = [breakdown["billing_units"] for breakdown in usage if breakdown['notification_type'] == 'email'] emails_sent = 0 if len(emails) == 0 else emails[0] + letters = [(breakdown["billing_units"], breakdown['letter_total']) for breakdown in usage if + breakdown['notification_type'] == 'letter'] + letter_sent = 0 if len(letters) == 0 else letters[0][0] + letter_cost = 0 if len(letters) == 0 else letters[0][1] + return { 'emails_sent': emails_sent, 'sms_free_allowance': sms_free_allowance, @@ -344,6 +349,8 @@ def calculate_usage(usage, free_sms_fragment_limit): 'sms_allowance_remaining': max(0, (sms_free_allowance - sms_sent)), 'sms_chargeable': max(0, sms_sent - sms_free_allowance), 'sms_rate': sms_rate, + 'letter_sent': letter_sent, + 'letter_cost': letter_cost } @@ -409,10 +416,16 @@ def get_free_paid_breakdown_for_billable_units(year, free_sms_fragment_limit, bi free_sms_fragment_limit, cumulative, previous_cumulative, [billing_month for billing_month in sms_units if billing_month['month'] == month] ) - letter_billing = [(x['billing_units'], x['rate']) for x in letter_units if x['month'] == month] + letter_billing = [(x['billing_units'], x['rate'], (x['billing_units'] * x['rate'])) + for x in letter_units if x['month'] == month] + letter_total = 0 + for x in letter_billing: + letter_total += x[2] + letter_cumulative += letter_total yield { 'name': month, - # 'total': sms + letter + 'letter_total': letter_total, + 'letter_cumulative': letter_cumulative, 'paid': breakdown['paid'], 'free': breakdown['free'], 'letters': letter_billing diff --git a/app/templates/views/usage.html b/app/templates/views/usage.html index b21054e89..7d26976d6 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,15 +39,21 @@ {% endif %}
+
+

Letters

+
+ {{ big_number(letter_sent, 'sent', smaller=True) }} +
+
-
+
 
-
+
{{ big_number( (sms_chargeable * sms_rate), @@ -57,6 +63,17 @@ ) }}
+
+
+ {{ big_number( + letter_cost, + 'spent', + currency="£", + smaller=True + ) }} +
+
+
{% if months %} @@ -77,7 +94,7 @@ {% endcall %} {% call field(align='left') %} {{ big_number( - sms_rate * month.paid, + (sms_rate * month.paid) + month.letter_total, currency="£", smallest=True ) }} @@ -94,10 +111,9 @@ {% endif %}
    - {{ month.letters }} {% for letter in month.letters%} {% if letter[0] %} -
  • {{ letter[0]}} letters at {{ ' {:.0f}p'.format(letter[1] * 100) }} +
  • {{ "{:,}".format(letter[0])}} letters at {{ '{:.0f}p'.format(letter[1] * 100) }}
  • {% endif %} {% endfor %} diff --git a/tests/app/main/views/test_dashboard.py b/tests/app/main/views/test_dashboard.py index a98a4b72a..de86f138f 100644 --- a/tests/app/main/views/test_dashboard.py +++ b/tests/app/main/views/test_dashboard.py @@ -601,7 +601,7 @@ def test_usage_page( page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') - cols = page.find_all('div', {'class': 'column-half'}) + cols = page.find_all('div', {'class': 'column-one-third'}) nav = page.find('ul', {'class': 'pill', 'role': 'tablist'}) nav_links = nav.find_all('a') @@ -616,14 +616,14 @@ def test_usage_page( 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 '£18.94' in table assert '140 free text messages' in table assert '£20.30' in table assert '1,230 text messages at 1.65p' in table + assert '10 letters at 31p' in table def test_usage_page_with_year_argument( @@ -986,18 +986,18 @@ def test_get_free_paid_breakdown_for_billable_units(now, expected_number_of_mont ] ) assert list(billing_units) == [ - {'free': 100000, 'name': 'April', 'paid': 0}, - {'free': 100000, 'name': 'May', 'paid': 0}, - {'free': 50000, 'name': 'June', 'paid': 50000}, - {'free': 0, 'name': 'July', 'paid': 0}, - {'free': 0, 'name': 'August', 'paid': 0}, - {'free': 0, 'name': 'September', 'paid': 0}, - {'free': 0, 'name': 'October', 'paid': 0}, - {'free': 0, 'name': 'November', 'paid': 0}, - {'free': 0, 'name': 'December', 'paid': 0}, - {'free': 0, 'name': 'January', 'paid': 0}, - {'free': 0, 'name': 'February', 'paid': 2000}, - {'free': 0, 'name': 'March', 'paid': 0} + {'free': 100000, 'name': 'April', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0}, + {'free': 100000, 'name': 'May', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0}, + {'free': 50000, 'name': 'June', 'paid': 50000, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0}, + {'free': 0, 'name': 'July', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0}, + {'free': 0, 'name': 'August', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0}, + {'free': 0, 'name': 'September', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0}, + {'free': 0, 'name': 'October', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0}, + {'free': 0, 'name': 'November', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0}, + {'free': 0, 'name': 'December', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0}, + {'free': 0, 'name': 'January', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0}, + {'free': 0, 'name': 'February', 'paid': 2000, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0}, + {'free': 0, 'name': 'March', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0} ][:expected_number_of_months] diff --git a/tests/conftest.py b/tests/conftest.py index 88ed70fb8..3e9c5c466 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -2155,7 +2155,14 @@ def mock_get_billable_units(mocker): 'rate': 0.0165, 'billing_units': 100 }, - + { + 'month': 'February', + 'international': False, + 'rate_multiplier': 1, + 'notification_type': 'letter', + 'rate': 0.31, + 'billing_units': 10 + } ] return mocker.patch(