From cf53cdf6baaa4d2082c2b90317db63229c8eac76 Mon Sep 17 00:00:00 2001 From: Nikhil <118773738+pablohashescobar@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:27:48 +0530 Subject: [PATCH] fix: analytics tab for private bucket (#5814) --- apiserver/plane/app/views/analytic/base.py | 27 ++++++++++++++++++++-- apiserver/plane/app/views/cycle/issue.py | 7 ++---- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/apiserver/plane/app/views/analytic/base.py b/apiserver/plane/app/views/analytic/base.py index 2bf0d4e1a6..ddbde02692 100644 --- a/apiserver/plane/app/views/analytic/base.py +++ b/apiserver/plane/app/views/analytic/base.py @@ -1,5 +1,5 @@ # Django imports -from django.db.models import Count, F, Sum +from django.db.models import Count, F, Sum, Q from django.db.models.functions import ExtractMonth from django.utils import timezone from django.db.models.functions import Concat @@ -121,9 +121,32 @@ class AnalyticsEndpoint(BaseAPIView): if x_axis in ["assignees__id"] or segment in ["assignees__id"]: assignee_details = ( Issue.issue_objects.filter( + Q( + Q(assignees__avatar__isnull=False) + | Q(assignees__avatar_asset__isnull=False) + ), workspace__slug=slug, **filters, - assignees__avatar_url__isnull=False, + ) + .annotate( + assignees__avatar_url=Case( + # If `avatar_asset` exists, use it to generate the asset URL + When( + assignees__avatar_asset__isnull=False, + then=Concat( + Value("/api/assets/v2/static/"), + "assignees__avatar_asset", # Assuming avatar_asset has an id or relevant field + Value("/"), + ), + ), + # If `avatar_asset` is None, fall back to using `avatar` field directly + When( + assignees__avatar_asset__isnull=True, + then="assignees__avatar", + ), + default=Value(None), + output_field=models.CharField(), + ) ) .order_by("assignees__id") .distinct("assignees__id") diff --git a/apiserver/plane/app/views/cycle/issue.py b/apiserver/plane/app/views/cycle/issue.py index 9e1585b54b..cdd6b11ad6 100644 --- a/apiserver/plane/app/views/cycle/issue.py +++ b/apiserver/plane/app/views/cycle/issue.py @@ -111,7 +111,7 @@ class CycleIssueViewSet(BaseViewSet): ) .annotate( attachment_count=FileAsset.objects.filter( - entity_identifier=OuterRef("id"), + issue_id=OuterRef("id"), entity_type=FileAsset.EntityTypeContext.ISSUE_ATTACHMENT, ) .order_by() @@ -247,10 +247,7 @@ class CycleIssueViewSet(BaseViewSet): workspace__slug=slug, project_id=project_id, pk=cycle_id ) - if ( - cycle.end_date is not None - and cycle.end_date < timezone.now() - ): + if cycle.end_date is not None and cycle.end_date < timezone.now(): return Response( { "error": "The Cycle has already been completed so no new issues can be added"