Add letters to usage page.

Before this goes live need to only show letters on usage if the service has the permission.
This commit is contained in:
Rebecca Law
2017-12-19 14:35:10 +00:00
parent 084be530a6
commit b7db7debc5
4 changed files with 61 additions and 25 deletions

View File

@@ -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 = [breakdown["billing_units"] for breakdown in usage if breakdown['notification_type'] == 'email']
emails_sent = 0 if len(emails) == 0 else emails[0] 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 { return {
'emails_sent': emails_sent, 'emails_sent': emails_sent,
'sms_free_allowance': sms_free_allowance, '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_allowance_remaining': max(0, (sms_free_allowance - sms_sent)),
'sms_chargeable': max(0, sms_sent - sms_free_allowance), 'sms_chargeable': max(0, sms_sent - sms_free_allowance),
'sms_rate': sms_rate, '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, free_sms_fragment_limit, cumulative, previous_cumulative,
[billing_month for billing_month in sms_units if billing_month['month'] == month] [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 { yield {
'name': month, 'name': month,
# 'total': sms + letter 'letter_total': letter_total,
'letter_cumulative': letter_cumulative,
'paid': breakdown['paid'], 'paid': breakdown['paid'],
'free': breakdown['free'], 'free': breakdown['free'],
'letters': letter_billing 'letters': letter_billing

View File

@@ -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-half'> <div class='column-one-third'>
<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-half'> <div class='column-one-third'>
<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,15 +39,21 @@
{% 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-half'> <div class='column-one-third'>
<div class="keyline-block"> <div class="keyline-block">
&nbsp; &nbsp;
</div> </div>
</div> </div>
<div class='column-half'> <div class='column-one-third'>
<div class="keyline-block"> <div class="keyline-block">
{{ big_number( {{ big_number(
(sms_chargeable * sms_rate), (sms_chargeable * sms_rate),
@@ -57,6 +63,17 @@
) }} ) }}
</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 %}
@@ -77,7 +94,7 @@
{% endcall %} {% endcall %}
{% call field(align='left') %} {% call field(align='left') %}
{{ big_number( {{ big_number(
sms_rate * month.paid, (sms_rate * month.paid) + month.letter_total,
currency="£", currency="£",
smallest=True smallest=True
) }} ) }}
@@ -94,10 +111,9 @@
{% endif %} {% endif %}
</ul> </ul>
<ul> <ul>
{{ month.letters }}
{% for letter in month.letters%} {% for letter in month.letters%}
{% if letter[0] %} {% if letter[0] %}
<li class="tabular-numbers">{{ letter[0]}} letters at {{ ' {:.0f}p'.format(letter[1] * 100) }} <li class="tabular-numbers">{{ "{:,}".format(letter[0])}} letters at {{ '{:.0f}p'.format(letter[1] * 100) }}
</li> </li>
{% endif %} {% endif %}
{% endfor %} {% endfor %}

View File

@@ -601,7 +601,7 @@ 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'}) 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')
@@ -616,14 +616,14 @@ def test_usage_page(
assert '249,860 free text messages' in table assert '249,860 free text messages' in table
assert '40 free text messages' in table assert '40 free text messages' in table
assert '960 text messages at 1.65p' in table assert '960 text messages at 1.65p' in table
assert 'April' in table assert 'April' in table
assert 'February' in table assert 'February' in table
assert 'March' in table assert 'March' in table
assert '£15.84' in table assert '£18.94' in table
assert '140 free text messages' in table assert '140 free text messages' in table
assert '£20.30' in table assert '£20.30' in table
assert '1,230 text messages at 1.65p' 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( 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) == [ assert list(billing_units) == [
{'free': 100000, 'name': 'April', 'paid': 0}, {'free': 100000, 'name': 'April', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0},
{'free': 100000, 'name': 'May', 'paid': 0}, {'free': 100000, 'name': 'May', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0},
{'free': 50000, 'name': 'June', 'paid': 50000}, {'free': 50000, 'name': 'June', 'paid': 50000, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0},
{'free': 0, 'name': 'July', 'paid': 0}, {'free': 0, 'name': 'July', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0},
{'free': 0, 'name': 'August', 'paid': 0}, {'free': 0, 'name': 'August', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0},
{'free': 0, 'name': 'September', 'paid': 0}, {'free': 0, 'name': 'September', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0},
{'free': 0, 'name': 'October', 'paid': 0}, {'free': 0, 'name': 'October', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0},
{'free': 0, 'name': 'November', 'paid': 0}, {'free': 0, 'name': 'November', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0},
{'free': 0, 'name': 'December', 'paid': 0}, {'free': 0, 'name': 'December', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0},
{'free': 0, 'name': 'January', 'paid': 0}, {'free': 0, 'name': 'January', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0},
{'free': 0, 'name': 'February', 'paid': 2000}, {'free': 0, 'name': 'February', 'paid': 2000, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0},
{'free': 0, 'name': 'March', 'paid': 0} {'free': 0, 'name': 'March', 'paid': 0, 'letter_total': 0, 'letters': [], 'letter_cumulative': 0}
][:expected_number_of_months] ][:expected_number_of_months]

View File

@@ -2155,7 +2155,14 @@ def mock_get_billable_units(mocker):
'rate': 0.0165, 'rate': 0.0165,
'billing_units': 100 'billing_units': 100
}, },
{
'month': 'February',
'international': False,
'rate_multiplier': 1,
'notification_type': 'letter',
'rate': 0.31,
'billing_units': 10
}
] ]
return mocker.patch( return mocker.patch(