mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-11 09:28:27 -04:00
Support multiple SMS rates per month on usage page
This commit is contained in:
@@ -398,13 +398,9 @@ def get_monthly_usage_breakdown(year, monthly_usage):
|
||||
|
||||
for month in get_months_for_financial_year(year):
|
||||
monthly_sms = [row for row in sms if row['month'] == month]
|
||||
sms_charged = sum(row['sms_charged'] for row in monthly_sms)
|
||||
sms_free_allowance_used = sum(row['sms_free_allowance_used'] for row in monthly_sms)
|
||||
sms_cost = sum(row['sms_cost'] for row in monthly_sms)
|
||||
# makes the assumption that there is either no item in `monthly_sms` because they
|
||||
# have not sent any SMS or that they have sent SMS and that there is only a single
|
||||
# item in `monthly_sms` because they have only been sent at a single rate
|
||||
sms_rate = monthly_sms[0]['rate'] if len(monthly_sms) else 0
|
||||
sms_breakdown = [row for row in monthly_sms if row['sms_charged']]
|
||||
|
||||
monthly_letters = [row for row in letters if row['month'] == month]
|
||||
letter_cost = sum(row['letter_cost'] for row in monthly_letters)
|
||||
@@ -414,9 +410,8 @@ def get_monthly_usage_breakdown(year, monthly_usage):
|
||||
'month': month,
|
||||
'letter_cost': letter_cost,
|
||||
'letter_breakdown': list(letter_breakdown),
|
||||
'sms_charged': sms_charged,
|
||||
'sms_free_allowance_used': sms_free_allowance_used,
|
||||
'sms_rate': sms_rate,
|
||||
'sms_breakdown': sms_breakdown,
|
||||
'sms_cost': sms_cost,
|
||||
}
|
||||
|
||||
|
||||
@@ -107,17 +107,17 @@
|
||||
{% if item.sms_free_allowance_used %}
|
||||
<li class="tabular-numbers">{{ item.sms_free_allowance_used|format_thousands }} free {{ item.sms_free_count|message_count_label('sms', suffix='') }}</li>
|
||||
{% endif %}
|
||||
{% if item.sms_charged %}
|
||||
<li class="tabular-numbers">{{ item.sms_charged|message_count('sms') }} at
|
||||
{{- ' {:.2f}p'.format(item.sms_rate * 100) }}</li>
|
||||
{% endif %}
|
||||
{% for sms in item.sms_breakdown %}
|
||||
<li class="tabular-numbers">{{ sms.sms_charged|message_count('sms') }} at
|
||||
{{- ' {:.2f}p'.format(sms.rate * 100) }}</li>
|
||||
{% endfor %}
|
||||
{% for letter in item.letter_breakdown %}
|
||||
{% if letter.sent %}
|
||||
<li class="tabular-numbers">{{ "{:,} {}".format(letter.sent, letter.postage_description) }} {{ letter.sent|message_count_label('letter', suffix='') }} at
|
||||
{{ letter.rate | format_number_in_pounds_as_currency }}</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% if not (item.sms_free_allowance_used or item.sms_charged or item.letter_breakdown) %}
|
||||
{% if not (item.sms_free_allowance_used or item.sms_cost or item.letter_breakdown) %}
|
||||
<li aria-hidden="true">–</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
|
||||
@@ -1068,21 +1068,17 @@ def test_usage_page_monthly_breakdown(
|
||||
mock_get_monthly_usage_for_service,
|
||||
mock_get_free_sms_fragment_limit
|
||||
):
|
||||
service_one['permissions'].append('letter')
|
||||
page = client_request.get(
|
||||
'main.usage',
|
||||
service_id=SERVICE_ONE_ID,
|
||||
)
|
||||
|
||||
page = client_request.get('main.usage', service_id=SERVICE_ONE_ID)
|
||||
monthly_breakdown = normalize_spaces(page.find('table').text)
|
||||
|
||||
assert 'April' in monthly_breakdown
|
||||
assert '249,860 free text messages' in monthly_breakdown
|
||||
|
||||
assert 'February' in monthly_breakdown
|
||||
assert '£28.99' in monthly_breakdown
|
||||
assert '£29.55' in monthly_breakdown
|
||||
assert '140 free text messages' in monthly_breakdown
|
||||
assert '960 text messages at 1.65p' in monthly_breakdown
|
||||
assert '33 text messages at 1.70p' in monthly_breakdown
|
||||
assert '10 second class letters at 31p' in monthly_breakdown
|
||||
assert '5 first class letters at 33p' in monthly_breakdown
|
||||
assert '10 international letters at 84p' in monthly_breakdown
|
||||
@@ -1125,9 +1121,9 @@ def test_usage_page_letter_breakdown_ordering(
|
||||
row_for_feb = page.find('table').find_all('tr', class_='table-row')[10]
|
||||
postage_details = row_for_feb.find_all('li', class_='tabular-numbers')
|
||||
|
||||
assert normalize_spaces(postage_details[2].text) == '5 first class letters at 33p'
|
||||
assert normalize_spaces(postage_details[3].text) == '10 second class letters at 31p'
|
||||
assert normalize_spaces(postage_details[4].text) == '10 international letters at 84p'
|
||||
assert normalize_spaces(postage_details[3].text) == '5 first class letters at 33p'
|
||||
assert normalize_spaces(postage_details[4].text) == '10 second class letters at 31p'
|
||||
assert normalize_spaces(postage_details[5].text) == '10 international letters at 84p'
|
||||
|
||||
|
||||
def test_usage_page_with_0_free_allowance(
|
||||
|
||||
@@ -2370,6 +2370,18 @@ def mock_get_monthly_usage_for_service(mocker):
|
||||
'sms_cost': 20.91,
|
||||
'letter_cost': 0,
|
||||
},
|
||||
{
|
||||
'month': 'February',
|
||||
'notification_type': 'sms',
|
||||
'rate': 0.017,
|
||||
'chargeable_units': 33,
|
||||
'notifications_sent': 1234,
|
||||
'postage': 'none',
|
||||
'sms_charged': 33,
|
||||
'sms_free_allowance_used': 0,
|
||||
'sms_cost': 0.561,
|
||||
'letter_cost': 0,
|
||||
},
|
||||
{
|
||||
'month': 'February',
|
||||
'notification_type': 'sms',
|
||||
|
||||
Reference in New Issue
Block a user