diff --git a/apiserver/plane/app/views/analytic/base.py b/apiserver/plane/app/views/analytic/base.py index 2bf0d4e1a69..ddbde02692e 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 @@ def get(self, request, slug): 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 9e1585b54bc..cdd6b11ad6a 100644 --- a/apiserver/plane/app/views/cycle/issue.py +++ b/apiserver/plane/app/views/cycle/issue.py @@ -111,7 +111,7 @@ def list(self, request, slug, project_id, cycle_id): ) .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 @@ def create(self, request, slug, project_id, cycle_id): 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"