Merge pull request #2492 from alphagov/fix-billable-units

Fix billable units
This commit is contained in:
Rebecca Law
2019-05-08 13:17:11 +01:00
committed by GitHub

View File

@@ -9,6 +9,7 @@ import flask
import itertools import itertools
from click_datetime import Datetime as click_dt from click_datetime import Datetime as click_dt
from flask import current_app, json from flask import current_app, json
from notifications_utils.template import SMSMessageTemplate
from psycopg2._psycopg import IntegrityError from psycopg2._psycopg import IntegrityError
from sqlalchemy.orm.exc import NoResultFound from sqlalchemy.orm.exc import NoResultFound
from notifications_utils.statsd_decorators import statsd from notifications_utils.statsd_decorators import statsd
@@ -36,8 +37,13 @@ from app.dao.services_dao import (
dao_fetch_service_by_id, dao_fetch_service_by_id,
dao_update_service dao_update_service
) )
from app.dao.templates_dao import dao_get_template_by_id
from app.dao.users_dao import delete_model_user, delete_user_verify_codes, get_user_by_email from app.dao.users_dao import delete_model_user, delete_user_verify_codes, get_user_by_email
from app.models import PROVIDERS, User, Notification, Organisation, Domain, Service from app.models import (
PROVIDERS, User, Notification, Organisation, Domain, Service, SMS_TYPE,
NOTIFICATION_CREATED,
KEY_TYPE_TEST
)
from app.performance_platform.processing_time import send_processing_time_for_start_and_end from app.performance_platform.processing_time import send_processing_time_for_start_and_end
from app.utils import get_london_midnight_in_utc, get_midnight_for_day_before from app.utils import get_london_midnight_in_utc, get_midnight_for_day_before
@@ -842,3 +848,33 @@ def populate_go_live(file_name):
service.go_live_user = go_live_user service.go_live_user = go_live_user
service.go_live_at = go_live_date service.go_live_at = go_live_date
dao_update_service(service) dao_update_service(service)
@notify_command(name='fix-billable-units')
def fix_billable_units():
query = Notification.query.filter(
Notification.notification_type == SMS_TYPE,
Notification.status != NOTIFICATION_CREATED,
Notification.sent_at == None, # noqa
Notification.billable_units == 0,
Notification.key_type != KEY_TYPE_TEST,
)
for notification in query.all():
template_model = dao_get_template_by_id(notification.template_id, notification.template_version)
template = SMSMessageTemplate(
template_model.__dict__,
values=notification.personalisation,
prefix=notification.service.name,
show_prefix=notification.service.prefix_sms,
)
print("Updating notification: {} with {} billable_units".format(notification.id, template.fragment_count))
Notification.query.filter(
Notification.id == notification.id
).update(
{"billable_units": template.fragment_count}
)
db.session.commit()
print("End fix_billable_units")