Files
qlockify-backend-deployment/apps/time_entries/api/serializers.py

82 lines
2.6 KiB
Python

from rest_framework import serializers
from core.serializers.base import BaseModelSerializer
from apps.time_entries.models import TimeEntry
from apps.projects.models import Project
from apps.tags.models import Tag
class TimeEntrySerializer(BaseModelSerializer):
"""
Output serializer for TimeEntry.
"""
start_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S")
end_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", allow_null=True)
class Meta:
model = TimeEntry
fields = BaseModelSerializer.Meta.fields + (
"workspace",
"user",
"project",
"description",
"start_time",
"end_time",
"duration",
"tags",
"is_billable",
"hourly_rate",
"currency",
)
read_only_fields = fields
class TimeEntryCreateSerializer(serializers.Serializer):
"""
Validates input data for creating/starting a time entry.
"""
workspace_id = serializers.UUIDField()
project_id = serializers.PrimaryKeyRelatedField(
queryset=Project.objects.filter(is_deleted=False),
required=False,
allow_null=True,
source='project'
)
start_time = serializers.DateTimeField()
end_time = serializers.DateTimeField(required=False, allow_null=True)
description = serializers.CharField(required=False, allow_blank=True, default="")
tags = serializers.PrimaryKeyRelatedField(
queryset=Tag.objects.filter(is_deleted=False),
many=True,
required=False
)
is_billable = serializers.BooleanField(default=False)
class TimeEntryUpdateSerializer(serializers.Serializer):
"""
Validates input data for updating an existing time entry.
"""
project_id = serializers.PrimaryKeyRelatedField(
queryset=Project.objects.filter(is_deleted=False),
required=False,
allow_null=True,
source='project'
)
start_time = serializers.DateTimeField(required=False)
end_time = serializers.DateTimeField(required=False, allow_null=True)
description = serializers.CharField(required=False, allow_blank=True)
tags = serializers.PrimaryKeyRelatedField(
queryset=Tag.objects.filter(is_deleted=False),
many=True,
required=False
)
is_billable = serializers.BooleanField(required=False)
class TimeEntryStopSerializer(serializers.Serializer):
"""
Optional specific serializer for stopping a timer manually.
"""
end_time = serializers.DateTimeField(required=False, allow_null=True)