mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-04-02 00:20:02 -04:00
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:
@@ -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
|
||||
|
||||
@@ -17,14 +17,14 @@
|
||||
</div>
|
||||
<div id='pill-selected-item'>
|
||||
<div class='grid-row'>
|
||||
<div class='column-half'>
|
||||
<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-half'>
|
||||
<div class='column-one-third'>
|
||||
<h2 class='heading-small'>Text messages</h2>
|
||||
<div class="keyline-block">
|
||||
{{ big_number(sms_sent, 'sent', smaller=True) }}
|
||||
@@ -39,15 +39,21 @@
|
||||
{% 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-half'>
|
||||
<div class='column-one-third'>
|
||||
<div class="keyline-block">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class='column-half'>
|
||||
<div class='column-one-third'>
|
||||
<div class="keyline-block">
|
||||
{{ big_number(
|
||||
(sms_chargeable * sms_rate),
|
||||
@@ -57,6 +63,17 @@
|
||||
) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class='column-one-third'>
|
||||
<div class="keyline-block">
|
||||
{{ big_number(
|
||||
letter_cost,
|
||||
'spent',
|
||||
currency="£",
|
||||
smaller=True
|
||||
) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{% 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 %}
|
||||
</ul>
|
||||
<ul>
|
||||
{{ month.letters }}
|
||||
{% for letter in month.letters%}
|
||||
{% 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>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
@@ -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]
|
||||
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user