feat(src/dashboard/views): annotate ticket metrics

Introduce aggregated ticket counts to eliminate redundant queries and boost performance.
This commit is contained in:
sankalp committed 2026-06-29 07:20:11 +05:45
1 parent e3551a822c
commit 9070bf3015
1 file changed
+15 -5
+15 -5
View File
@@ -1,6 +1,7 @@
from datetime import date
from django.contrib.auth import get_user_model
from django.db.models import Count, Q
from django.shortcuts import render
from django.views.decorators.http import require_http_methods
@@ -30,6 +31,17 @@ def project_timeline_widget(request):
qs = qs.order_by("start_date")
today = date.today()
qs = qs.annotate(
ticket_total=Count("tickets"),
ticket_completed=Count("tickets", filter=Q(tickets__status__is_completed=True)),
ticket_overdue=Count(
"tickets",
filter=Q(tickets__due_date__lt=today)
& ~Q(tickets__status__is_completed=True),
),
)
timeline_data = []
for p in qs.select_related():
@@ -73,11 +85,9 @@ def project_timeline_widget(request):
remaining_text = "Due today"
ticket_counts = {
"total": p.tickets.count(),
"completed": p.tickets.filter(status__is_completed=True).count(),
"overdue": p.tickets.filter(due_date__lt=today)
.exclude(status__is_completed=True)
.count(),
"total": p.ticket_total,
"completed": p.ticket_completed,
"overdue": p.ticket_overdue,
}
timeline_data.append(