Prepare to replace "billing_units" in usage APIs

There is no such thing as a "billing unit". The data this field
contained was also a confusing mixture of two types:

- For emails and letters, it was just "notifications_sent".

- For SMS, it was the "chargeable_units" (billable * multiplier).

This replaces the single, ambiguous "billing_units" field with
"chargeable_units" and "notifications_sent" in both usage APIs.
Once Admin is using them we can remove the old field.
This commit is contained in:
Ben Thorner
2022-04-20 16:55:38 +01:00
parent 80efdd2ec6
commit fc378fed96
4 changed files with 48 additions and 0 deletions

View File

@@ -17,7 +17,10 @@ def serialize_ft_billing_remove_emails(rows):
{
"month": (datetime.strftime(row.month, "%B")),
"notification_type": row.notification_type,
# TEMPORARY: while we migrate away from "billing_units"
"billing_units": row.billable_units,
"chargeable_units": row.chargeable_units,
"notifications_sent": row.notifications_sent,
"rate": float(row.rate),
"postage": row.postage,
}
@@ -30,7 +33,10 @@ def serialize_ft_billing_yearly_totals(rows):
return [
{
"notification_type": row.notification_type,
# TEMPORARY: while we migrate away from "billing_units"
"billing_units": row.billable_units,
"chargeable_units": row.chargeable_units,
"notifications_sent": row.notifications_sent,
"rate": float(row.rate),
"letter_total": float(row.billable_units * row.rate) if row.notification_type == 'letter' else 0,
}

View File

@@ -220,7 +220,9 @@ def fetch_billing_totals_for_year(service_id, year):
query.c.rate.label("rate"),
func.sum(query.c.notifications_sent).label("notifications_sent"),
# TEMPORARY: while we migrate away from "billing_units"
func.sum(query.c.billable_units).label("billable_units"),
func.sum(query.c.chargeable_units).label("chargeable_units"),
).group_by(
query.c.rate,
query.c.notification_type
@@ -275,7 +277,9 @@ def fetch_monthly_billing_for_year(service_id, year):
func.date_trunc('month', query.c.bst_date).cast(Date).label("month"),
func.sum(query.c.notifications_sent).label("notifications_sent"),
# TEMPORARY: while we migrate away from "billing_units"
func.sum(query.c.billable_units).label("billable_units"),
func.sum(query.c.chargeable_units).label("chargeable_units"),
).group_by(
query.c.rate,
query.c.notification_type,
@@ -302,7 +306,9 @@ def query_service_email_usage_for_year(service_id, year):
FactBilling.bst_date,
FactBilling.postage, # should always be "none"
FactBilling.notifications_sent,
# TEMPORARY: while we migrate away from "billing_units"
FactBilling.notifications_sent.label("billable_units"),
FactBilling.billable_units.label("chargeable_units"),
FactBilling.rate,
FactBilling.notification_type,
).filter(
@@ -320,7 +326,12 @@ def query_service_letter_usage_for_year(service_id, year):
FactBilling.bst_date,
FactBilling.postage,
FactBilling.notifications_sent,
# TEMPORARY: while we migrate away from "billing_units"
FactBilling.notifications_sent.label("billable_units"),
# We can't use billable_units here as it represents the
# sheet count for letters, which is already accounted for
# in the rate. We actually charge per letter, not sheet.
FactBilling.notifications_sent.label("chargeable_units"),
FactBilling.rate,
FactBilling.notification_type,
).filter(
@@ -339,7 +350,9 @@ def query_service_sms_usage_for_year(service_id, year):
FactBilling.bst_date,
FactBilling.postage, # should always be "none"
FactBilling.notifications_sent,
# TEMPORARY: while we migrate away from "billing_units"
chargeable_units.label("billable_units"),
chargeable_units.label("chargeable_units"),
FactBilling.rate,
FactBilling.notification_type,
).filter(