use func.greatest rather than case statement

simplifies the query quite a bit
This commit is contained in:
Leo Hemsted
2019-08-28 17:28:14 +01:00
parent 608738ca67
commit 741d75c3a9

View File

@@ -34,7 +34,6 @@ from app.utils import get_london_midnight_in_utc
def fetch_sms_free_allowance_remainder(start_date):
# ASSUMPTION: AnnualBilling has been populated for year.
billing_year = get_financial_year_for_datetime(start_date)
print(billing_year)
start_of_year = convert_utc_to_bst(financial_year_start(billing_year))
query = db.session.query(
FactBilling.service_id.label("service_id"),
@@ -62,16 +61,11 @@ def fetch_sms_billing_for_all_services(start_date, end_date):
# ASSUMPTION: AnnualBilling has been populated for year.
billing_year = get_financial_year_for_datetime(start_date)
free_allowance_remainder = fetch_sms_free_allowance_remainder(start_date).subquery()
sms_billable_units = func.sum(FactBilling.billable_units * FactBilling.rate_multiplier)
sms_remainder = func.coalesce(free_allowance_remainder.c.sms_remainder, AnnualBilling.free_sms_fragment_limit)
chargeable_sms = case([(sms_remainder == 0, sms_billable_units),
(sms_billable_units - sms_remainder <= 0, 0),
(sms_billable_units - sms_remainder > 0,
sms_billable_units - sms_remainder)], else_=0)
sms_cost = case([(sms_remainder == 0, sms_billable_units * FactBilling.rate),
(sms_billable_units - sms_remainder <= 0, 0),
(sms_billable_units - sms_remainder > 0, (sms_billable_units - sms_remainder) * FactBilling.rate)
], else_=0)
chargeable_sms = func.greatest(sms_billable_units - sms_remainder, 0)
sms_cost = chargeable_sms * FactBilling.rate
query = db.session.query(
Organisation.name.label('organisation_name'),