diff --git a/app/commands.py b/app/commands.py index ee92f4c2b..03061f877 100644 --- a/app/commands.py +++ b/app/commands.py @@ -205,6 +205,7 @@ def populate_monthly_billing(year): email_res = get_monthly_billing_by_notification_type( service_id, datetime(year, month, 1), EMAIL_TYPE ) + print("Finished populating data for {} for service id {}".format(month, str(service_id))) print('SMS: {}'.format(sms_res.monthly_totals)) print('Email: {}'.format(email_res.monthly_totals)) diff --git a/app/dao/monthly_billing_dao.py b/app/dao/monthly_billing_dao.py index 4528f414d..ad0014c85 100644 --- a/app/dao/monthly_billing_dao.py +++ b/app/dao/monthly_billing_dao.py @@ -9,7 +9,8 @@ from app.models import ( SMS_TYPE, EMAIL_TYPE, MonthlyBilling, - NotificationHistory + NotificationHistory, + LETTER_TYPE ) from app.statsd_decorators import statsd from app.utils import convert_utc_to_bst @@ -31,6 +32,7 @@ def create_or_update_monthly_billing(service_id, billing_month): start_date, end_date = get_month_start_and_end_date_in_utc(billing_month) _update_monthly_billing(service_id, start_date, end_date, SMS_TYPE) _update_monthly_billing(service_id, start_date, end_date, EMAIL_TYPE) + _update_monthly_billing(service_id, start_date, end_date, LETTER_TYPE) def _monthly_billing_data_to_json(billing_data): diff --git a/app/dao/notification_usage_dao.py b/app/dao/notification_usage_dao.py index 7a892689b..fe00b5145 100644 --- a/app/dao/notification_usage_dao.py +++ b/app/dao/notification_usage_dao.py @@ -49,6 +49,8 @@ def get_billing_data_for_month(service_id, start_date, end_date, notification_ty end_date, SMS_TYPE ) ) + elif notification_type == LETTER_TYPE: + results.extend(billing_letter_data_per_month_query(service_id, start_date, end_date)) return results @@ -165,10 +167,11 @@ def billing_letter_data_per_month_query(service_id, start_date, end_date): NotificationHistory.notification_type, month, NotificationHistory.rate_multiplier, - NotificationHistory.international + NotificationHistory.international, + LetterRate.rate ).order_by( month, rate_multiplier() ).all() - return results \ No newline at end of file + return results diff --git a/tests/app/celery/test_scheduled_tasks.py b/tests/app/celery/test_scheduled_tasks.py index bf1e242f3..635f6447c 100644 --- a/tests/app/celery/test_scheduled_tasks.py +++ b/tests/app/celery/test_scheduled_tasks.py @@ -645,13 +645,12 @@ def test_populate_monthly_billing_populates_correctly(sample_template): monthly_billing = MonthlyBilling.query.order_by(MonthlyBilling.notification_type).all() - assert len(monthly_billing) == 2 + assert len(monthly_billing) == 3 assert monthly_billing[0].service_id == sample_template.service_id assert monthly_billing[0].start_date == jul_month_start assert monthly_billing[0].end_date == jul_month_end assert monthly_billing[0].notification_type == 'email' - assert monthly_billing[0].notification_type == 'email' assert monthly_billing[0].monthly_totals == [] assert monthly_billing[1].service_id == sample_template.service_id @@ -668,6 +667,12 @@ def test_populate_monthly_billing_populates_correctly(sample_template): } ) + assert monthly_billing[2].service_id == sample_template.service_id + assert monthly_billing[2].start_date == jul_month_start + assert monthly_billing[2].end_date == jul_month_end + assert monthly_billing[2].notification_type == 'letter' + assert monthly_billing[2].monthly_totals == [] + @freeze_time("2016-04-01 23:00:00") def test_populate_monthly_billing_updates_correct_month_in_bst(sample_template): @@ -680,7 +685,7 @@ def test_populate_monthly_billing_updates_correct_month_in_bst(sample_template): monthly_billing = MonthlyBilling.query.order_by(MonthlyBilling.notification_type).all() - assert len(monthly_billing) == 2 + assert len(monthly_billing) == 3 assert monthly_billing[0].service_id == sample_template.service_id assert monthly_billing[0].start_date == apr_month_start @@ -695,6 +700,11 @@ def test_populate_monthly_billing_updates_correct_month_in_bst(sample_template): assert monthly_billing[1].monthly_totals[0]['billing_units'] == 1 assert monthly_billing[1].monthly_totals[0]['total_cost'] == 0.0123 + assert monthly_billing[2].service_id == sample_template.service_id + assert monthly_billing[2].start_date == apr_month_start + assert monthly_billing[2].end_date == apr_month_end + assert monthly_billing[2].notification_type == 'letter' + assert monthly_billing[2].monthly_totals == [] def test_run_letter_jobs(client, mocker, sample_letter_template): jobs = [create_job(template=sample_letter_template, job_status=JOB_STATUS_READY_TO_SEND), diff --git a/tests/app/dao/test_monthly_billing.py b/tests/app/dao/test_monthly_billing.py index e5813c9bf..9c5a3452a 100644 --- a/tests/app/dao/test_monthly_billing.py +++ b/tests/app/dao/test_monthly_billing.py @@ -164,7 +164,7 @@ def test_add_monthly_billing_for_single_month_populates_correctly( monthly_billing = MonthlyBilling.query.order_by(MonthlyBilling.notification_type).all() - assert len(monthly_billing) == 2 + assert len(monthly_billing) == 3 _assert_monthly_billing( monthly_billing[0], sample_template.service.id, 'email', JAN_2017_MONTH_START, JAN_2017_MONTH_END ) @@ -181,6 +181,11 @@ def test_add_monthly_billing_for_single_month_populates_correctly( "total_cost": 1 * 2 * 0.0158 }) + _assert_monthly_billing( + monthly_billing[2], sample_template.service.id, 'letter', JAN_2017_MONTH_START, JAN_2017_MONTH_END + ) + assert monthly_billing[2].monthly_totals == [] + def test_add_monthly_billing_for_multiple_months_populate_correctly( sample_template, sample_email_template @@ -203,7 +208,7 @@ def test_add_monthly_billing_for_multiple_months_populate_correctly( MonthlyBilling.start_date ).all() - assert len(monthly_billing) == 4 + assert len(monthly_billing) == 6 _assert_monthly_billing( monthly_billing[0], sample_template.service.id, 'email', FEB_2016_MONTH_START, FEB_2016_MONTH_END ) @@ -236,6 +241,16 @@ def test_add_monthly_billing_for_multiple_months_populate_correctly( "total_cost": 0.72 }) + _assert_monthly_billing( + monthly_billing[4], sample_template.service.id, 'letter', FEB_2016_MONTH_START, FEB_2016_MONTH_END + ) + assert monthly_billing[4].monthly_totals == [] + + _assert_monthly_billing( + monthly_billing[5], sample_template.service.id, 'letter', MAR_2016_MONTH_START, MAR_2016_MONTH_END + ) + assert monthly_billing[5].monthly_totals == [] + def test_add_monthly_billing_with_multiple_rates_populate_correctly( sample_template @@ -252,7 +267,7 @@ def test_add_monthly_billing_with_multiple_rates_populate_correctly( monthly_billing = MonthlyBilling.query.order_by(MonthlyBilling.notification_type).all() - assert len(monthly_billing) == 2 + assert len(monthly_billing) == 3 _assert_monthly_billing( monthly_billing[0], sample_template.service.id, 'email', JAN_2017_MONTH_START, JAN_2017_MONTH_END ) @@ -276,6 +291,11 @@ def test_add_monthly_billing_with_multiple_rates_populate_correctly( "total_cost": 0.246 }) + _assert_monthly_billing( + monthly_billing[2], sample_template.service.id, 'letter', JAN_2017_MONTH_START, JAN_2017_MONTH_END + ) + assert monthly_billing[0].monthly_totals == [] + def test_update_monthly_billing_overwrites_old_totals(sample_template): create_rate(APR_2016_MONTH_START, 0.123, SMS_TYPE) diff --git a/tests/app/dao/test_notification_usage_dao.py b/tests/app/dao/test_notification_usage_dao.py index 6b7f95582..c47dde311 100644 --- a/tests/app/dao/test_notification_usage_dao.py +++ b/tests/app/dao/test_notification_usage_dao.py @@ -1,5 +1,4 @@ import uuid -from _decimal import Decimal from datetime import datetime, timedelta from freezegun import freeze_time @@ -218,7 +217,7 @@ def test_get_monthly_billing_data_where_start_date_before_rate_returns_empty( def test_billing_letter_data_per_month_query( notify_db_session ): - rate = create_letter_rate() + create_letter_rate() service = create_service() template = create_template(service=service, template_type='letter') create_notification(template=template, billable_units=1, created_at=datetime(2017, 2, 1, 13, 21), @@ -233,4 +232,5 @@ def test_billing_letter_data_per_month_query( end_date=datetime(2017, 2, 28)) assert len(results) == 1 - assert results[0].rate == Decimal('0.31') + print(results[0].rate) + assert results[0].rate == 0.31 diff --git a/tests/app/db.py b/tests/app/db.py index 1b12ec991..08a33e47a 100644 --- a/tests/app/db.py +++ b/tests/app/db.py @@ -70,7 +70,7 @@ def create_service( email_from=None, prefix_sms=True, message_limit=1000, - crown=True + organisation_type='central' ): service = Service( name=service_name, @@ -79,7 +79,7 @@ def create_service( email_from=email_from if email_from else service_name.lower().replace(' ', '.'), created_by=user or create_user(email='{}@digital.cabinet-office.gov.uk'.format(uuid.uuid4())), prefix_sms=prefix_sms, - crown=crown + organisation_type=organisation_type ) dao_create_service(service, service.created_by, service_id, service_permissions=service_permissions) @@ -459,7 +459,7 @@ def create_annual_billing( def create_letter_rate( - start_date=datetime(2017, 1,1, 00,00,00), + start_date=datetime(2017, 1, 1, 00, 00, 00), end_date=None, sheet_count=1, rate=0.31,