diff --git a/apiserver/plane/api/serializers/cycle.py b/apiserver/plane/api/serializers/cycle.py index ea3c4eb3d6f..c828195d2d1 100644 --- a/apiserver/plane/api/serializers/cycle.py +++ b/apiserver/plane/api/serializers/cycle.py @@ -1,4 +1,5 @@ # Third party imports +import pytz from rest_framework import serializers # Module imports @@ -18,6 +19,14 @@ class CycleSerializer(BaseSerializer): completed_estimates = serializers.FloatField(read_only=True) started_estimates = serializers.FloatField(read_only=True) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + project = self.context.get("project") + if project and project.timezone: + project_timezone = pytz.timezone(project.timezone) + self.fields["start_date"].timezone = project_timezone + self.fields["end_date"].timezone = project_timezone + def validate(self, data): if ( data.get("start_date", None) is not None diff --git a/apiserver/plane/api/views/cycle.py b/apiserver/plane/api/views/cycle.py index 3665e3b0f20..e0f44f9845c 100644 --- a/apiserver/plane/api/views/cycle.py +++ b/apiserver/plane/api/views/cycle.py @@ -137,10 +137,12 @@ def get_queryset(self): ) def get(self, request, slug, project_id, pk=None): + project = Project.objects.get(workspace__slug=slug, pk=project_id) if pk: queryset = self.get_queryset().filter(archived_at__isnull=True).get(pk=pk) data = CycleSerializer( - queryset, fields=self.fields, expand=self.expand + queryset, fields=self.fields, + expand=self.expand, context={"project": project} ).data return Response(data, status=status.HTTP_200_OK) queryset = self.get_queryset().filter(archived_at__isnull=True) @@ -152,7 +154,8 @@ def get(self, request, slug, project_id, pk=None): start_date__lte=timezone.now(), end_date__gte=timezone.now() ) data = CycleSerializer( - queryset, many=True, fields=self.fields, expand=self.expand + queryset, many=True, fields=self.fields, + expand=self.expand, context={"project": project} ).data return Response(data, status=status.HTTP_200_OK) @@ -163,7 +166,8 @@ def get(self, request, slug, project_id, pk=None): request=request, queryset=(queryset), on_results=lambda cycles: CycleSerializer( - cycles, many=True, fields=self.fields, expand=self.expand + cycles, many=True, fields=self.fields, + expand=self.expand, context={"project": project} ).data, ) @@ -174,7 +178,8 @@ def get(self, request, slug, project_id, pk=None): request=request, queryset=(queryset), on_results=lambda cycles: CycleSerializer( - cycles, many=True, fields=self.fields, expand=self.expand + cycles, many=True, fields=self.fields, + expand=self.expand, context={"project": project} ).data, ) @@ -185,7 +190,8 @@ def get(self, request, slug, project_id, pk=None): request=request, queryset=(queryset), on_results=lambda cycles: CycleSerializer( - cycles, many=True, fields=self.fields, expand=self.expand + cycles, many=True, fields=self.fields, + expand=self.expand, context={"project": project} ).data, ) @@ -198,14 +204,16 @@ def get(self, request, slug, project_id, pk=None): request=request, queryset=(queryset), on_results=lambda cycles: CycleSerializer( - cycles, many=True, fields=self.fields, expand=self.expand + cycles, many=True, fields=self.fields, + expand=self.expand, context={"project": project} ).data, ) return self.paginate( request=request, queryset=(queryset), on_results=lambda cycles: CycleSerializer( - cycles, many=True, fields=self.fields, expand=self.expand + cycles, many=True, fields=self.fields, + expand=self.expand, context={"project": project} ).data, ) diff --git a/apiserver/plane/app/views/cycle/base.py b/apiserver/plane/app/views/cycle/base.py index 84a161619b5..45b6f94d877 100644 --- a/apiserver/plane/app/views/cycle/base.py +++ b/apiserver/plane/app/views/cycle/base.py @@ -268,7 +268,7 @@ def list(self, request, slug, project_id): ) datetime_fields = ["start_date", "end_date"] data = user_timezone_converter( - data, datetime_fields, request.user.user_timezone + data, datetime_fields, project_timezone ) return Response(data, status=status.HTTP_200_OK) @@ -318,9 +318,13 @@ def create(self, request, slug, project_id): .first() ) + # Fetch the project timezone + project = Project.objects.get(id=self.kwargs.get("project_id")) + project_timezone = project.timezone + datetime_fields = ["start_date", "end_date"] cycle = user_timezone_converter( - cycle, datetime_fields, request.user.user_timezone + cycle, datetime_fields, project_timezone ) # Send the model activity @@ -407,9 +411,13 @@ def partial_update(self, request, slug, project_id, pk): "created_by", ).first() + # Fetch the project timezone + project = Project.objects.get(id=self.kwargs.get("project_id")) + project_timezone = project.timezone + datetime_fields = ["start_date", "end_date"] cycle = user_timezone_converter( - cycle, datetime_fields, request.user.user_timezone + cycle, datetime_fields, project_timezone ) # Send the model activity @@ -480,10 +488,11 @@ def retrieve(self, request, slug, project_id, pk): ) queryset = queryset.first() + # Fetch the project timezone + project = Project.objects.get(id=self.kwargs.get("project_id")) + project_timezone = project.timezone datetime_fields = ["start_date", "end_date"] - data = user_timezone_converter( - data, datetime_fields, request.user.user_timezone - ) + data = user_timezone_converter(data, datetime_fields, project_timezone) recent_visited_task.delay( slug=slug,