* chore: handled start and end date issue when user send the start and end date equal * chore: updated variable name and comment * chore: typo
105 lines
3.4 KiB
Python
105 lines
3.4 KiB
Python
# Third party imports
|
|
from rest_framework import serializers
|
|
|
|
# Module imports
|
|
from .base import BaseSerializer
|
|
from .issue import IssueStateSerializer
|
|
from plane.db.models import Cycle, CycleIssue, CycleUserProperties
|
|
from plane.utils.timezone_converter import convert_to_utc
|
|
|
|
|
|
class CycleWriteSerializer(BaseSerializer):
|
|
def validate(self, data):
|
|
if (
|
|
data.get("start_date", None) is not None
|
|
and data.get("end_date", None) is not None
|
|
and data.get("start_date", None) > data.get("end_date", None)
|
|
):
|
|
raise serializers.ValidationError("Start date cannot exceed end date")
|
|
if (
|
|
data.get("start_date", None) is not None
|
|
and data.get("end_date", None) is not None
|
|
):
|
|
project_id = self.initial_data.get("project_id") or self.instance.project_id
|
|
is_start_date_end_date_equal = (
|
|
True if data.get("start_date") == data.get("end_date") else False
|
|
)
|
|
data["start_date"] = convert_to_utc(
|
|
date=str(data.get("start_date").date()),
|
|
project_id=project_id,
|
|
is_start_date=True,
|
|
)
|
|
data["end_date"] = convert_to_utc(
|
|
date=str(data.get("end_date", None).date()),
|
|
project_id=project_id,
|
|
is_start_date_end_date_equal=is_start_date_end_date_equal,
|
|
)
|
|
return data
|
|
|
|
class Meta:
|
|
model = Cycle
|
|
fields = "__all__"
|
|
read_only_fields = ["workspace", "project", "owned_by", "archived_at"]
|
|
|
|
|
|
class CycleSerializer(BaseSerializer):
|
|
# favorite
|
|
is_favorite = serializers.BooleanField(read_only=True)
|
|
total_issues = serializers.IntegerField(read_only=True)
|
|
# state group wise distribution
|
|
cancelled_issues = serializers.IntegerField(read_only=True)
|
|
completed_issues = serializers.IntegerField(read_only=True)
|
|
started_issues = serializers.IntegerField(read_only=True)
|
|
unstarted_issues = serializers.IntegerField(read_only=True)
|
|
backlog_issues = serializers.IntegerField(read_only=True)
|
|
|
|
# active | draft | upcoming | completed
|
|
status = serializers.CharField(read_only=True)
|
|
|
|
class Meta:
|
|
model = Cycle
|
|
fields = [
|
|
# necessary fields
|
|
"id",
|
|
"workspace_id",
|
|
"project_id",
|
|
# model fields
|
|
"name",
|
|
"description",
|
|
"start_date",
|
|
"end_date",
|
|
"owned_by_id",
|
|
"view_props",
|
|
"sort_order",
|
|
"external_source",
|
|
"external_id",
|
|
"progress_snapshot",
|
|
"logo_props",
|
|
# meta fields
|
|
"is_favorite",
|
|
"total_issues",
|
|
"cancelled_issues",
|
|
"completed_issues",
|
|
"started_issues",
|
|
"unstarted_issues",
|
|
"backlog_issues",
|
|
"status",
|
|
]
|
|
read_only_fields = fields
|
|
|
|
|
|
class CycleIssueSerializer(BaseSerializer):
|
|
issue_detail = IssueStateSerializer(read_only=True, source="issue")
|
|
sub_issues_count = serializers.IntegerField(read_only=True)
|
|
|
|
class Meta:
|
|
model = CycleIssue
|
|
fields = "__all__"
|
|
read_only_fields = ["workspace", "project", "cycle"]
|
|
|
|
|
|
class CycleUserPropertiesSerializer(BaseSerializer):
|
|
class Meta:
|
|
model = CycleUserProperties
|
|
fields = "__all__"
|
|
read_only_fields = ["workspace", "project", "cycle" "user"]
|