Use statistics for returned letters on dashboard

This should be faster and more accurate than querying all the reports.
This commit is contained in:
Chris Hill-Scott
2020-03-03 17:40:50 +00:00
parent c3fa8ab2e1
commit 7fb8e1de92
10 changed files with 102 additions and 83 deletions

View File

@@ -1,8 +1,4 @@
from datetime import datetime, timedelta
from dateutil.parser import parse
from flask import abort, current_app
from notifications_utils.timezones import local_timezone
from werkzeug.utils import cached_property
from app.models import JSONModel
@@ -668,30 +664,25 @@ class Service(JSONModel):
if test:
yield BASE + '_incomplete' + tag
@cached_property
def returned_letter_statistics(self):
return service_api_client.get_returned_letter_statistics(self.id)
@cached_property
def returned_letter_summary(self):
return service_api_client.get_returned_letter_summary(self.id)
@property
def most_recent_returned_letter_report(self):
if not self.returned_letter_summary:
return None
return parse(
self.returned_letter_summary[0]['reported_at'] + " 00:00:00"
).replace(tzinfo=local_timezone)
def count_of_returned_letters_in_last_7_days(self):
return self.returned_letter_statistics['returned_letter_count']
@property
def count_of_returned_letters_in_last_7_days(self):
seven_days_ago = (
datetime.now() - timedelta(days=7)
).replace(
hour=0, minute=0, second=0
)
return sum(
report['returned_letter_count']
for report in self.returned_letter_summary
if parse(report['reported_at'] + " 00:00:00") >= seven_days_ago
)
def date_of_most_recent_returned_letter_report(self):
return self.returned_letter_statistics['most_recent_report']
@property
def has_returned_letters(self):
return bool(self.date_of_most_recent_returned_letter_report)
@property
def contact_lists(self):