1
1
from django .http .response import HttpResponseRedirect
2
2
from django .views .generic import UpdateView , TemplateView , CreateView , ListView
3
3
from authorities .models import Authority
4
+ from etsd .msgs .filters import MessageFilter
4
5
from .forms import AuthorityUsersModelForm
5
6
from django .contrib import messages
6
7
from django .utils .translation import gettext as _
@@ -324,11 +325,23 @@ def send_test_mail(request):
324
325
"field" : "cc" ,
325
326
},
326
327
{
327
- "label" : "Per avg read time" ,
328
+ "label" : "Avg read time" ,
328
329
"kind" : "query_aggregate_single" ,
329
330
"method" : "avg" ,
330
331
"field" : "read_time" ,
331
332
},
333
+ {
334
+ "label" : "Max read time" ,
335
+ "kind" : "query_aggregate_single" ,
336
+ "method" : "max" ,
337
+ "field" : "read_time" ,
338
+ },
339
+ {
340
+ "label" : "Min read time" ,
341
+ "kind" : "query_aggregate_single" ,
342
+ "method" : "min" ,
343
+ "field" : "read_time" ,
344
+ },
332
345
]
333
346
334
347
AUTH_STATS_CFG = [
@@ -365,6 +378,28 @@ def send_test_mail(request):
365
378
]
366
379
367
380
381
+ class StatsMessageFilter (django_filters .FilterSet ):
382
+ sender = django_filters .CharFilter (
383
+ label = "Sender" , field_name = "sender" , lookup_expr = "icontains"
384
+ )
385
+ recipient = django_filters .CharFilter (
386
+ label = "Recipient" , field_name = "recipient" , lookup_expr = "icontains"
387
+ )
388
+ cc = django_filters .CharFilter (label = "CC" , field_name = "cc" , lookup_expr = "icontains" )
389
+
390
+ class Meta :
391
+ model = models .Message
392
+ fields = {
393
+ "kind" : ["exact" ],
394
+ "status" : ["exact" ],
395
+ "protocol_year" : ["exact" ],
396
+ "sent_on" : ["exact" , "month" , "year" ],
397
+ }
398
+
399
+ def __init__ (self , * args , ** kwargs ):
400
+ super ().__init__ (* args , ** kwargs )
401
+
402
+
368
403
class StatsView (TemplateView ):
369
404
template_name = "core/stats.html"
370
405
@@ -395,7 +430,9 @@ def get_context_data(self, **kwargs):
395
430
read_time = F ("data_access_date" ) - F ("sent_on" ),
396
431
)
397
432
398
- stats = get_stats (qs , STATS_CFG )
433
+ filter = StatsMessageFilter (self .request .GET , qs )
434
+
435
+ stats = get_stats (filter .qs , STATS_CFG )
399
436
400
437
auth_qs = auth_models .Authority .objects .all ().annotate (
401
438
has_users = Exists (User .objects .filter (authorities__id = OuterRef ("pk" ))),
@@ -406,6 +443,12 @@ def get_context_data(self, **kwargs):
406
443
),
407
444
)
408
445
auth_stats = get_stats (auth_qs , AUTH_STATS_CFG )
409
- ctx .update ({"stats" : stats , "auth_stats" : auth_stats })
446
+ ctx .update (
447
+ {
448
+ "stats" : stats ,
449
+ "auth_stats" : auth_stats ,
450
+ "filter" : filter ,
451
+ }
452
+ )
410
453
411
454
return ctx
0 commit comments