Finish migration from billing_units to API fields

This is now only used for letters and represents the number sent
[^1].  We could use the chargeable_units field, but using "_sent"
is more consistent with the annual attributes [^2].

In fact, chargeable_units isn't actually used anywhere, but I've
kept it in the test data as it is part of the real API and helps
clarify the other values for SMS - free vs. charged.

Note: for SMS I've used an arbitrary "1234" for "chargeable_units"
to indicate it's not used and may be different to the number sent -
for SMS it's related to the number of fragments.

[^1]: https://github.com/alphagov/notifications-api/blob/bb62d22f2555db192ab9de66440409158524d790/app/dao/fact_billing_dao.py#L339
[^2]: https://github.com/alphagov/notifications-admin/blob/3a1ac189ff6800d4789b22e4763e5550719e8802/app/main/views/dashboard.py#L339
This commit is contained in:
Ben Thorner
2022-05-03 16:01:08 +01:00
parent c0ee24ff19
commit fb7c116046
3 changed files with 45 additions and 23 deletions
+1 -1
View File
@@ -442,7 +442,7 @@ def format_letter_details_for_month(letter_units_for_month):
rate_group = list(rate_group) rate_group = list(rate_group)
letter_details = LetterDetails( letter_details = LetterDetails(
sent=sum(x['billing_units'] for x in rate_group), sent=sum(x['notifications_sent'] for x in rate_group),
rate=rate_group[0]['rate'], rate=rate_group[0]['rate'],
cost=sum(x['letter_cost'] for x in rate_group), cost=sum(x['letter_cost'] for x in rate_group),
postage_description=rate_group[0]['postage'] postage_description=rate_group[0]['postage']
+30 -15
View File
@@ -1106,7 +1106,8 @@ def test_usage_page_displays_letters_ordered_by_postage(
'month': 'April', 'month': 'April',
'notification_type': 'letter', 'notification_type': 'letter',
'rate': 0.5, 'rate': 0.5,
'billing_units': 1, 'chargeable_units': 1,
'notifications_sent': 1,
'postage': 'second', 'postage': 'second',
'letter_cost': 0.5, 'letter_cost': 0.5,
}, },
@@ -1114,7 +1115,8 @@ def test_usage_page_displays_letters_ordered_by_postage(
'month': 'April', 'month': 'April',
'notification_type': 'letter', 'notification_type': 'letter',
'rate': 1, 'rate': 1,
'billing_units': 1, 'chargeable_units': 1,
'notifications_sent': 1,
'postage': 'europe', 'postage': 'europe',
'letter_cost': 1, 'letter_cost': 1,
}, },
@@ -1122,7 +1124,8 @@ def test_usage_page_displays_letters_ordered_by_postage(
'month': 'April', 'month': 'April',
'notification_type': 'letter', 'notification_type': 'letter',
'rate': 1, 'rate': 1,
'billing_units': 2, 'chargeable_units': 2,
'notifications_sent': 2,
'postage': 'rest-of-word', 'postage': 'rest-of-word',
'letter_cost': 2, 'letter_cost': 2,
}, },
@@ -1130,7 +1133,8 @@ def test_usage_page_displays_letters_ordered_by_postage(
'month': 'April', 'month': 'April',
'notification_type': 'letter', 'notification_type': 'letter',
'rate': 1.5, 'rate': 1.5,
'billing_units': 7, 'chargeable_units': 7,
'notifications_sent': 7,
'postage': 'europe', 'postage': 'europe',
'letter_cost': 11.5, 'letter_cost': 11.5,
}, },
@@ -1138,7 +1142,8 @@ def test_usage_page_displays_letters_ordered_by_postage(
'month': 'April', 'month': 'April',
'notification_type': 'letter', 'notification_type': 'letter',
'rate': 0.3, 'rate': 0.3,
'billing_units': 3, 'chargeable_units': 3,
'notifications_sent': 3,
'postage': 'second', 'postage': 'second',
'letter_cost': 0.9, 'letter_cost': 0.9,
}, },
@@ -1146,7 +1151,8 @@ def test_usage_page_displays_letters_ordered_by_postage(
'month': 'April', 'month': 'April',
'notification_type': 'letter', 'notification_type': 'letter',
'rate': 0.5, 'rate': 0.5,
'billing_units': 1, 'chargeable_units': 1,
'notifications_sent': 1,
'postage': 'first', 'postage': 'first',
'letter_cost': 0.5, 'letter_cost': 0.5,
}, },
@@ -1183,7 +1189,8 @@ def test_usage_page_displays_letters_split_by_month_and_postage(
'month': 'April', 'month': 'April',
'notification_type': 'letter', 'notification_type': 'letter',
'rate': 0.5, 'rate': 0.5,
'billing_units': 1, 'chargeable_units': 1,
'notifications_sent': 1,
'postage': 'second', 'postage': 'second',
'letter_cost': 0.5, 'letter_cost': 0.5,
}, },
@@ -1191,7 +1198,8 @@ def test_usage_page_displays_letters_split_by_month_and_postage(
'month': 'April', 'month': 'April',
'notification_type': 'letter', 'notification_type': 'letter',
'rate': 1, 'rate': 1,
'billing_units': 1, 'chargeable_units': 1,
'notifications_sent': 1,
'postage': 'europe', 'postage': 'europe',
'letter_cost': 1, 'letter_cost': 1,
}, },
@@ -1199,7 +1207,8 @@ def test_usage_page_displays_letters_split_by_month_and_postage(
'month': 'May', 'month': 'May',
'notification_type': 'letter', 'notification_type': 'letter',
'rate': 1, 'rate': 1,
'billing_units': 7, 'chargeable_units': 7,
'notifications_sent': 7,
'postage': 'europe', 'postage': 'europe',
'letter_cost': 7, 'letter_cost': 7,
}, },
@@ -1207,7 +1216,8 @@ def test_usage_page_displays_letters_split_by_month_and_postage(
'month': 'May', 'month': 'May',
'notification_type': 'letter', 'notification_type': 'letter',
'rate': 0.5, 'rate': 0.5,
'billing_units': 3, 'chargeable_units': 3,
'notifications_sent': 3,
'postage': 'second', 'postage': 'second',
'letter_cost': 1.5, 'letter_cost': 1.5,
}, },
@@ -1215,7 +1225,8 @@ def test_usage_page_displays_letters_split_by_month_and_postage(
'month': 'May', 'month': 'May',
'notification_type': 'letter', 'notification_type': 'letter',
'rate': 0.7, 'rate': 0.7,
'billing_units': 1, 'chargeable_units': 1,
'notifications_sent': 1,
'postage': 'first', 'postage': 'first',
'letter_cost': 0.7, 'letter_cost': 0.7,
}, },
@@ -1665,7 +1676,8 @@ def test_get_monthly_usage_breakdown(now, expected_number_of_months):
'rate_multiplier': 1, 'rate_multiplier': 1,
'notification_type': 'sms', 'notification_type': 'sms',
'rate': 1.65, 'rate': 1.65,
'billing_units': 100000, 'chargeable_units': 100000,
'notifications_sent': 1234,
'sms_charged': 0, 'sms_charged': 0,
'sms_free_allowance_used': 100000, 'sms_free_allowance_used': 100000,
'sms_cost': 0, 'sms_cost': 0,
@@ -1676,7 +1688,8 @@ def test_get_monthly_usage_breakdown(now, expected_number_of_months):
'rate_multiplier': 1, 'rate_multiplier': 1,
'notification_type': 'sms', 'notification_type': 'sms',
'rate': 1.65, 'rate': 1.65,
'billing_units': 100000, 'chargeable_units': 100000,
'notifications_sent': 1234,
'sms_charged': 0, 'sms_charged': 0,
'sms_free_allowance_used': 100000, 'sms_free_allowance_used': 100000,
'sms_cost': 0, 'sms_cost': 0,
@@ -1687,7 +1700,8 @@ def test_get_monthly_usage_breakdown(now, expected_number_of_months):
'rate_multiplier': 1, 'rate_multiplier': 1,
'notification_type': 'sms', 'notification_type': 'sms',
'rate': 1.71, 'rate': 1.71,
'billing_units': 100000, 'chargeable_units': 100000,
'notifications_sent': 1234,
'sms_charged': 50000, 'sms_charged': 50000,
'sms_free_allowance_used': 50000, 'sms_free_allowance_used': 50000,
'sms_cost': 85500, 'sms_cost': 85500,
@@ -1698,7 +1712,8 @@ def test_get_monthly_usage_breakdown(now, expected_number_of_months):
'rate_multiplier': 1, 'rate_multiplier': 1,
'notification_type': 'sms', 'notification_type': 'sms',
'rate': 1.71, 'rate': 1.71,
'billing_units': 2000, 'chargeable_units': 2000,
'notifications_sent': 1234,
'sms_charged': 2000, 'sms_charged': 2000,
'sms_free_allowance_used': 0, 'sms_free_allowance_used': 0,
'sms_cost': 3420, 'sms_cost': 3420,
+14 -7
View File
@@ -2362,7 +2362,8 @@ def mock_get_monthly_usage_for_service(mocker):
'month': 'March', 'month': 'March',
'notification_type': 'sms', 'notification_type': 'sms',
'rate': 0.017, 'rate': 0.017,
'billing_units': 1230, 'chargeable_units': 1230,
'notifications_sent': 1234,
'postage': 'none', 'postage': 'none',
'sms_charged': 1230, 'sms_charged': 1230,
'sms_free_allowance_used': 0, 'sms_free_allowance_used': 0,
@@ -2373,7 +2374,8 @@ def mock_get_monthly_usage_for_service(mocker):
'month': 'February', 'month': 'February',
'notification_type': 'sms', 'notification_type': 'sms',
'rate': 0.0165, 'rate': 0.0165,
'billing_units': 1100, 'chargeable_units': 1100,
'notifications_sent': 1234,
'postage': 'none', 'postage': 'none',
'sms_charged': 960, 'sms_charged': 960,
'sms_free_allowance_used': 140, 'sms_free_allowance_used': 140,
@@ -2384,7 +2386,8 @@ def mock_get_monthly_usage_for_service(mocker):
'month': 'February', 'month': 'February',
'notification_type': 'letter', 'notification_type': 'letter',
'rate': 0.31, 'rate': 0.31,
'billing_units': 10, 'chargeable_units': 10,
'notifications_sent': 10,
'postage': 'second', 'postage': 'second',
'sms_charged': 0, 'sms_charged': 0,
'sms_free_allowance_used': 0, 'sms_free_allowance_used': 0,
@@ -2395,7 +2398,8 @@ def mock_get_monthly_usage_for_service(mocker):
'month': 'February', 'month': 'February',
'notification_type': 'letter', 'notification_type': 'letter',
'rate': 0.33, 'rate': 0.33,
'billing_units': 5, 'chargeable_units': 5,
'notifications_sent': 5,
'postage': 'first', 'postage': 'first',
'sms_charged': 0, 'sms_charged': 0,
'sms_free_allowance_used': 0, 'sms_free_allowance_used': 0,
@@ -2406,7 +2410,8 @@ def mock_get_monthly_usage_for_service(mocker):
'month': 'February', 'month': 'February',
'notification_type': 'letter', 'notification_type': 'letter',
'rate': 0.84, 'rate': 0.84,
'billing_units': 3, 'chargeable_units': 3,
'notifications_sent': 3,
'postage': 'europe', 'postage': 'europe',
'sms_charged': 0, 'sms_charged': 0,
'sms_free_allowance_used': 0, 'sms_free_allowance_used': 0,
@@ -2417,7 +2422,8 @@ def mock_get_monthly_usage_for_service(mocker):
'month': 'February', 'month': 'February',
'notification_type': 'letter', 'notification_type': 'letter',
'rate': 0.84, 'rate': 0.84,
'billing_units': 7, 'chargeable_units': 7,
'notifications_sent': 7,
'postage': 'rest-of-world', 'postage': 'rest-of-world',
'sms_charged': 0, 'sms_charged': 0,
'sms_free_allowance_used': 0, 'sms_free_allowance_used': 0,
@@ -2428,7 +2434,8 @@ def mock_get_monthly_usage_for_service(mocker):
'month': 'April', 'month': 'April',
'notification_type': 'sms', 'notification_type': 'sms',
'rate': 0.017, 'rate': 0.017,
'billing_units': 249860, 'chargeable_units': 249860,
'notifications_sent': 1234,
'postage': 'none', 'postage': 'none',
'sms_charged': 0, 'sms_charged': 0,
'sms_free_allowance_used': 249860, 'sms_free_allowance_used': 249860,