mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-20 23:41:17 -05:00
We already filter the usage-by-month query by financial year. When we show the total usage for a service, we should be able to filter this by financial year. Then, when the two lots of data are put side by side, it all adds up.
43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
from sqlalchemy import func
|
|
|
|
from app import db
|
|
from app.models import (
|
|
NotificationHistory,
|
|
SMS_TYPE,
|
|
EMAIL_TYPE,
|
|
NOTIFICATION_STATUS_TYPES_BILLABLE,
|
|
KEY_TYPE_TEST
|
|
)
|
|
from app.dao.notifications_dao import get_financial_year
|
|
|
|
|
|
def get_fragment_count(service_id, year=None):
|
|
shared_filters = [
|
|
NotificationHistory.service_id == service_id,
|
|
NotificationHistory.status.in_(NOTIFICATION_STATUS_TYPES_BILLABLE),
|
|
NotificationHistory.key_type != KEY_TYPE_TEST
|
|
]
|
|
|
|
if year:
|
|
shared_filters.append(NotificationHistory.created_at.between(
|
|
*get_financial_year(year)
|
|
))
|
|
|
|
sms_count = db.session.query(
|
|
func.sum(NotificationHistory.billable_units)
|
|
).filter(
|
|
NotificationHistory.notification_type == SMS_TYPE,
|
|
*shared_filters
|
|
)
|
|
|
|
email_count = db.session.query(
|
|
func.count(NotificationHistory.id)
|
|
).filter(
|
|
NotificationHistory.notification_type == EMAIL_TYPE,
|
|
*shared_filters
|
|
)
|
|
return {
|
|
'sms_count': int(sms_count.scalar() or 0),
|
|
'email_count': email_count.scalar() or 0
|
|
}
|