From 71b130772f173a741173b53133a4036223f79dd4 Mon Sep 17 00:00:00 2001 From: gurusainath Date: Thu, 10 Oct 2024 16:49:11 +0530 Subject: [PATCH 1/2] fix: module date validation while generating the chart distribution --- apiserver/plane/app/views/module/base.py | 16 ++++++++-------- apiserver/plane/utils/analytics_plot.py | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/apiserver/plane/app/views/module/base.py b/apiserver/plane/app/views/module/base.py index d09848fd94c..cc9f7fe1ab8 100644 --- a/apiserver/plane/app/views/module/base.py +++ b/apiserver/plane/app/views/module/base.py @@ -435,13 +435,7 @@ def list(self, request, slug, project_id): ) return Response(modules, status=status.HTTP_200_OK) - allow_permission( - [ - ROLE.ADMIN, - ROLE.MEMBER, - ] - ) - + @allow_permission([ROLE.ADMIN, ROLE.MEMBER]) def retrieve(self, request, slug, project_id, pk): queryset = ( self.get_queryset() @@ -672,7 +666,13 @@ def retrieve(self, request, slug, project_id, pk): "labels": label_distribution, "completion_chart": {}, } - if modules and modules.start_date and modules.target_date: + + if ( + modules + and modules.start_date + and modules.target_date + and modules.total_issues > 0 + ): data["distribution"]["completion_chart"] = burndown_plot( queryset=modules, slug=slug, diff --git a/apiserver/plane/utils/analytics_plot.py b/apiserver/plane/utils/analytics_plot.py index fd9f6405850..1770e95ae95 100644 --- a/apiserver/plane/utils/analytics_plot.py +++ b/apiserver/plane/utils/analytics_plot.py @@ -203,7 +203,7 @@ def burndown_plot( if module_id: # Get all dates between the two dates date_range = [ - (queryset.start_date + timedelta(days=x)).date() + (queryset.start_date + timedelta(days=x)) for x in range( (queryset.target_date - queryset.start_date).days + 1 ) From d9ceac544c21b8db8f968c4e29822823da54c19b Mon Sep 17 00:00:00 2001 From: NarayanBavisetti Date: Thu, 10 Oct 2024 17:42:43 +0530 Subject: [PATCH 2/2] chore: indentation fix --- apiserver/plane/app/views/module/base.py | 10 ++++++---- apiserver/plane/app/views/view/base.py | 18 ++++++------------ 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/apiserver/plane/app/views/module/base.py b/apiserver/plane/app/views/module/base.py index cc9f7fe1ab8..eafb63b0e41 100644 --- a/apiserver/plane/app/views/module/base.py +++ b/apiserver/plane/app/views/module/base.py @@ -30,6 +30,7 @@ # Module imports from plane.app.permissions import ( ProjectEntityPermission, + ProjectLitePermission, allow_permission, ROLE, ) @@ -317,13 +318,12 @@ def get_queryset(self): .order_by("-is_favorite", "-created_at") ) - allow_permission( + @allow_permission( [ ROLE.ADMIN, ROLE.MEMBER, ] ) - def create(self, request, slug, project_id): project = Project.objects.get(workspace__slug=slug, pk=project_id) serializer = ModuleWriteSerializer( @@ -386,8 +386,7 @@ def create(self, request, slug, project_id): return Response(module, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - allow_permission([ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST]) - + @allow_permission([ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST]) def list(self, request, slug, project_id): queryset = self.get_queryset().filter(archived_at__isnull=True) if self.fields: @@ -838,6 +837,9 @@ def get_queryset(self): class ModuleFavoriteViewSet(BaseViewSet): model = UserFavorite + permission_classes = [ + ProjectLitePermission, + ] def get_queryset(self): return self.filter_queryset( diff --git a/apiserver/plane/app/views/view/base.py b/apiserver/plane/app/views/view/base.py index 861aa4292ed..e48871e3b6e 100644 --- a/apiserver/plane/app/views/view/base.py +++ b/apiserver/plane/app/views/view/base.py @@ -431,8 +431,7 @@ def get_queryset(self): .distinct() ) - allow_permission(allowed_roles=[ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST]) - + @allow_permission(allowed_roles=[ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST]) def list(self, request, slug, project_id): queryset = self.get_queryset() project = Project.objects.get(id=project_id) @@ -457,8 +456,7 @@ def list(self, request, slug, project_id): ).data return Response(views, status=status.HTTP_200_OK) - allow_permission(allowed_roles=[ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST]) - + @allow_permission(allowed_roles=[ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST]) def retrieve(self, request, slug, project_id, pk): issue_view = ( self.get_queryset().filter(pk=pk, project_id=project_id).first() @@ -498,8 +496,7 @@ def retrieve(self, request, slug, project_id, pk): status=status.HTTP_200_OK, ) - allow_permission(allowed_roles=[], creator=True, model=IssueView) - + @allow_permission(allowed_roles=[], creator=True, model=IssueView) def partial_update(self, request, slug, project_id, pk): with transaction.atomic(): issue_view = IssueView.objects.select_for_update().get( @@ -532,8 +529,7 @@ def partial_update(self, request, slug, project_id, pk): serializer.errors, status=status.HTTP_400_BAD_REQUEST ) - allow_permission(allowed_roles=[ROLE.ADMIN], creator=True, model=IssueView) - + @allow_permission(allowed_roles=[ROLE.ADMIN], creator=True, model=IssueView) def destroy(self, request, slug, project_id, pk): project_view = IssueView.objects.get( pk=pk, @@ -578,8 +574,7 @@ def get_queryset(self): .select_related("view") ) - allow_permission([ROLE.ADMIN, ROLE.MEMBER]) - + @allow_permission([ROLE.ADMIN, ROLE.MEMBER]) def create(self, request, slug, project_id): _ = UserFavorite.objects.create( user=request.user, @@ -589,8 +584,7 @@ def create(self, request, slug, project_id): ) return Response(status=status.HTTP_204_NO_CONTENT) - allow_permission([ROLE.ADMIN, ROLE.MEMBER]) - + @allow_permission([ROLE.ADMIN, ROLE.MEMBER]) def destroy(self, request, slug, project_id, view_id): view_favorite = UserFavorite.objects.get( project=project_id,