From 46bfb541c8843f1d9506f2bf672dbdec21f82842 Mon Sep 17 00:00:00 2001 From: Alexey Bezhan Date: Tue, 15 Jan 2019 15:55:04 +0000 Subject: [PATCH] Group new template-statistics response by template New API template-statistics response returns notification counts for each template and status combination. This can be used for both service statistics counts and template statistics by grouping the counts either by status or by template. --- app/main/views/dashboard.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index f678babf6..ab67df524 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -1,6 +1,7 @@ import calendar from datetime import datetime from functools import partial +from itertools import groupby from flask import ( Response, @@ -265,16 +266,24 @@ def get_inbox_partials(service_id): )} -def aggregate_usage(template_statistics, sort_key='count'): - return sorted( - template_statistics, - key=lambda template_statistic: template_statistic[sort_key], - reverse=True - ) +def aggregate_template_usage(template_statistics, sort_key='count'): + templates = [] + for k, v in groupby(sorted(template_statistics, key=lambda x: x['template_id']), key=lambda x: x['template_id']): + template_stats = [s for s in v if s.get('status') != 'cancelled'] + + templates.append({ + "template_id": k, + "template_name": template_stats[0]['template_name'], + "template_type": template_stats[0]['template_type'], + "is_precompiled_letter": template_stats[0]['is_precompiled_letter'], + "count": sum(s['count'] for s in template_stats) + }) + + return sorted(templates, key=lambda x: x[sort_key], reverse=True) def get_dashboard_partials(service_id): - template_statistics = aggregate_usage( + template_statistics = aggregate_template_usage( template_statistics_client.get_template_statistics_for_service(service_id, limit_days=7) )