From 741d75c3a9c99eaae2c511118e48d55845f008a5 Mon Sep 17 00:00:00 2001 From: Leo Hemsted Date: Wed, 28 Aug 2019 17:28:14 +0100 Subject: [PATCH] use func.greatest rather than case statement simplifies the query quite a bit --- app/dao/fact_billing_dao.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/app/dao/fact_billing_dao.py b/app/dao/fact_billing_dao.py index 07f8f15ae..67a79261e 100644 --- a/app/dao/fact_billing_dao.py +++ b/app/dao/fact_billing_dao.py @@ -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'),