82 lines
2.6 KiB
Python
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)
|