Rename monthly usage attributes to match API

This should make the subsequent changes to use the new API fields
a bit clearer, and also matches the annual usage attributes [^1].

[^1]: 3a1ac189ff/app/main/views/dashboard.py (L343-L350)
This commit is contained in:
Ben Thorner
2022-04-29 16:42:22 +01:00
parent 215a688250
commit 246356649f
3 changed files with 85 additions and 85 deletions

View File

@@ -413,24 +413,24 @@ def get_monthly_usage_breakdown(year, free_sms_fragment_limit, monthly_usage):
previous_cumulative = cumulative
monthly_usage = get_sum_billing_units(sms, month)
cumulative += monthly_usage
breakdown = get_free_paid_breakdown_for_month(
sms_breakdown = get_free_paid_breakdown_for_month(
free_sms_fragment_limit, cumulative, previous_cumulative,
[billing_month for billing_month in sms if billing_month['month'] == month]
)
letter_units_for_month = [x for x in letters if x['month'] == month]
letter_billing = format_letter_details_for_month(letter_units_for_month)
letter_breakdown = format_letter_details_for_month(letter_units_for_month)
letter_total = 0
for x in letter_billing:
letter_total += x.cost
letter_cost = 0
for x in letter_breakdown:
letter_cost += x.cost
yield {
'name': month,
'letter_total': letter_total,
'letters': letter_billing,
'sms_paid_count': breakdown['paid'],
'sms_free_count': breakdown['free'],
'sms_rate': breakdown['sms_rate'],
'month': month,
'letter_cost': letter_cost,
'letter_breakdown': letter_breakdown,
'sms_charged': sms_breakdown['paid'],
'sms_free_allowance_used': sms_breakdown['free'],
'sms_rate': sms_breakdown['sms_rate'],
}
@@ -445,7 +445,7 @@ def format_letter_details_for_month(letter_units_for_month):
postage_order = {'first class': 0, 'second class': 1, 'international': 2}
letter_units_for_month.sort(key=lambda x: (postage_order[x['postage']], x['rate']))
LetterDetails = namedtuple('LetterDetails', ['billing_units', 'rate', 'cost', 'postage_description'])
LetterDetails = namedtuple('LetterDetails', ['sent', 'rate', 'cost', 'postage_description'])
# Aggregate the rows for international letters which have the same rate
result = []
@@ -453,7 +453,7 @@ def format_letter_details_for_month(letter_units_for_month):
rate_group = list(rate_group)
letter_details = LetterDetails(
billing_units=sum(x['billing_units'] for x in rate_group),
sent=sum(x['billing_units'] for x in rate_group),
rate=rate_group[0]['rate'],
cost=(sum(x['billing_units'] for x in rate_group) * rate_group[0]['rate']),
postage_description=rate_group[0]['postage']

View File

@@ -83,7 +83,7 @@
{% if months %}
<div class="dashboard-table usage-table body-copy-table">
{% call(month, row_index) list_table(
{% call(item, row_index) list_table(
months,
caption="Total spend",
caption_visible=False,
@@ -95,29 +95,29 @@
field_headings_visible=True
) %}
{% call row_heading() %}
{{ month.name }}
{{ item.month }}
{% endcall %}
{% call field(align='left') %}
{{ big_number(
(month.sms_rate * month.sms_paid_count) + month.letter_total,
(item.sms_rate * item.sms_charged) + item.letter_cost,
currency="£",
smallest=True
) }}
<ul>
{% if month.sms_free_count %}
<li class="tabular-numbers">{{ month.sms_free_count|format_thousands }} free {{ month.sms_free_count|message_count_label('sms', suffix='') }}</li>
{% 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 month.sms_paid_count %}
<li class="tabular-numbers">{{ month.sms_paid_count|message_count('sms') }} at
{{- ' {:.2f}p'.format(month.sms_rate * 100) }}</li>
{% 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 letter in month.letters%}
{% if letter.billing_units %}
<li class="tabular-numbers">{{ "{:,} {}".format(letter.billing_units, letter.postage_description) }} {{ letter.billing_units|message_count_label('letter', suffix='') }} at
{% 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 (month.sms_free_count or month.sms_paid_count or month.letters) %}
{% if not (item.sms_free_allowance_used or item.sms_charged or item.letter_breakdown) %}
<li aria-hidden="true"></li>
{% endif %}
</ul>

View File

@@ -1602,100 +1602,100 @@ def test_get_monthly_usage_breakdown(now, expected_number_of_months):
assert list(breakdown) == [
{
'sms_free_count': 100000,
'name': 'April',
'sms_paid_count': 0,
'sms_free_allowance_used': 100000,
'month': 'April',
'sms_charged': 0,
'sms_rate': 1.65,
'letter_total': 0,
'letters': []
'letter_cost': 0,
'letter_breakdown': []
},
{
'sms_free_count': 100000,
'name': 'May',
'sms_paid_count': 0,
'sms_free_allowance_used': 100000,
'month': 'May',
'sms_charged': 0,
'sms_rate': 1.65,
'letter_total': 0,
'letters': []
'letter_cost': 0,
'letter_breakdown': []
},
{
'sms_free_count': 50000,
'name': 'June',
'sms_paid_count': 50000,
'sms_free_allowance_used': 50000,
'month': 'June',
'sms_charged': 50000,
'sms_rate': 1.71,
'letter_total': 0,
'letters': []
'letter_cost': 0,
'letter_breakdown': []
},
{
'sms_free_count': 0,
'name': 'July',
'sms_paid_count': 0,
'sms_free_allowance_used': 0,
'month': 'July',
'sms_charged': 0,
'sms_rate': 0,
'letter_total': 0,
'letters': []
'letter_cost': 0,
'letter_breakdown': []
},
{
'sms_free_count': 0,
'name': 'August',
'sms_paid_count': 0,
'sms_free_allowance_used': 0,
'month': 'August',
'sms_charged': 0,
'sms_rate': 0,
'letter_total': 0,
'letters': []
'letter_cost': 0,
'letter_breakdown': []
},
{
'sms_free_count': 0,
'name': 'September',
'sms_paid_count': 0,
'sms_free_allowance_used': 0,
'month': 'September',
'sms_charged': 0,
'sms_rate': 0,
'letter_total': 0,
'letters': []
'letter_cost': 0,
'letter_breakdown': []
},
{
'sms_free_count': 0,
'name': 'October',
'sms_paid_count': 0,
'sms_free_allowance_used': 0,
'month': 'October',
'sms_charged': 0,
'sms_rate': 0,
'letter_total': 0,
'letters': []
'letter_cost': 0,
'letter_breakdown': []
},
{
'sms_free_count': 0,
'name': 'November',
'sms_paid_count': 0,
'sms_free_allowance_used': 0,
'month': 'November',
'sms_charged': 0,
'sms_rate': 0,
'letter_total': 0,
'letters': []
'letter_cost': 0,
'letter_breakdown': []
},
{
'sms_free_count': 0,
'name': 'December',
'sms_paid_count': 0,
'sms_free_allowance_used': 0,
'month': 'December',
'sms_charged': 0,
'sms_rate': 0,
'letter_total': 0,
'letters': []
'letter_cost': 0,
'letter_breakdown': []
},
{
'sms_free_count': 0,
'name': 'January',
'sms_paid_count': 0,
'sms_free_allowance_used': 0,
'month': 'January',
'sms_charged': 0,
'sms_rate': 0,
'letter_total': 0,
'letters': []
'letter_cost': 0,
'letter_breakdown': []
},
{
'sms_free_count': 0,
'name': 'February',
'sms_paid_count': 2000,
'sms_free_allowance_used': 0,
'month': 'February',
'sms_charged': 2000,
'sms_rate': 1.71,
'letter_total': 0,
'letters': []
'letter_cost': 0,
'letter_breakdown': []
},
{
'sms_free_count': 0,
'name': 'March',
'sms_paid_count': 0,
'sms_free_allowance_used': 0,
'month': 'March',
'sms_charged': 0,
'sms_rate': 0,
'letter_total': 0,
'letters': []
'letter_cost': 0,
'letter_breakdown': []
},
][:expected_number_of_months]