diff --git a/taiga/stats/services.py b/taiga/stats/services.py index 61e30c51..a0d65c45 100644 --- a/taiga/stats/services.py +++ b/taiga/stats/services.py @@ -15,7 +15,9 @@ from django.apps import apps from django.db.models import Count +from django.db.models import Q from django.utils import timezone + from datetime import timedelta from collections import OrderedDict @@ -25,17 +27,23 @@ def get_users_stats(): queryset = model.objects.filter(is_active=True, is_system=False) stats = OrderedDict() - # Total - stats["total"] = queryset.count() - - # Average last 7 days today = timezone.now() - seven_days_ago = today-timedelta(days=7) - stats["average_last_seven_days"] = (queryset.filter(date_joined__range=(seven_days_ago, today)) + yesterday = today - timedelta(days=1) + seven_days_ago = yesterday - timedelta(days=7) + a_year_ago = today - timedelta(days=365) + + stats["total"] = queryset.count() + stats["today"] = queryset.filter(date_joined__year=today.year, + date_joined__month=today.month, + date_joined__day=today.day).count() + stats["average_last_seven_days"] = (queryset.filter(date_joined__range=(seven_days_ago, yesterday)) .count()) / 7 + stats["average_last_five_working_days"] = (queryset.filter(date_joined__range=(seven_days_ago, yesterday)) + .exclude(Q(date_joined__week_day=1) | + Q(date_joined__week_day=7)) + .count()) / 5 # Graph: users last year - a_year_ago = timezone.now() - timedelta(days=365) # increments -> # SELECT date_trunc('week', "filtered_users"."date_joined") AS "week", # count(*) @@ -68,12 +76,20 @@ def get_projects_stats(): queryset = model.objects.all() stats = OrderedDict() - stats["total"] = queryset.count() - today = timezone.now() - seven_days_ago = today-timedelta(days=7) - stats["average_last_seven_days"] = (queryset.filter(created_date__range=(seven_days_ago, today)) + yesterday = today - timedelta(days=1) + seven_days_ago = yesterday - timedelta(days=7) + + stats["total"] = queryset.count() + stats["today"] = queryset.filter(created_date__year=today.year, + created_date__month=today.month, + created_date__day=today.day).count() + stats["average_last_seven_days"] = (queryset.filter(created_date__range=(seven_days_ago, yesterday)) .count()) / 7 + stats["average_last_five_working_days"] = (queryset.filter(created_date__range=(seven_days_ago, yesterday)) + .exclude(Q(created_date__week_day=1) | + Q(created_date__week_day=7)) + .count()) / 5 stats["total_with_backlog"] = (queryset.filter(is_backlog_activated=True, is_kanban_activated=False) @@ -98,10 +114,19 @@ def get_user_stories_stats(): queryset = model.objects.all() stats = OrderedDict() - stats["total"] = queryset.count() - today = timezone.now() - seven_days_ago = today-timedelta(days=7) - stats["average_last_seven_days"] = (queryset.filter(created_date__range=(seven_days_ago, today)) + yesterday = today - timedelta(days=1) + seven_days_ago = yesterday - timedelta(days=7) + + stats["total"] = queryset.count() + stats["today"] = queryset.filter(created_date__year=today.year, + created_date__month=today.month, + created_date__day=today.day).count() + stats["average_last_seven_days"] = (queryset.filter(created_date__range=(seven_days_ago, yesterday)) .count()) / 7 + stats["average_last_five_working_days"] = (queryset.filter(created_date__range=(seven_days_ago, yesterday)) + .exclude(Q(created_date__week_day=1) | + Q(created_date__week_day=7)) + .count()) / 5 + return stats