Louis Mazin d424689e12 big maj
2026-09-24 19:35:37 +02:00

70 lines
2.3 KiB
Python

from django.contrib.auth import get_user_model
from rest_framework import serializers
from users.serializers import UserSerializer
from .models import TimeEntry
from .services import save_period, validate_period
class TimeEntrySerializer(serializers.ModelSerializer):
user = UserSerializer(read_only=True)
class Meta:
model = TimeEntry
fields = [
'id', 'user', 'group_id', 'start_date', 'start_time', 'end_date',
'end_time', 'created_at', 'updated_at', 'duration', 'day_of_week',
'is_complete', 'is_incomplete',
]
read_only_fields = fields
class TimeEntryCreateSerializer(serializers.Serializer):
user_id = serializers.PrimaryKeyRelatedField(
source='user', queryset=get_user_model().objects.all(), required=False,
write_only=True,
)
start_date = serializers.DateField()
start_time = serializers.TimeField()
end_date = serializers.DateField(required=False)
end_time = serializers.TimeField(required=False, allow_null=True)
def validate(self, attrs):
validate_period(attrs)
return attrs
def create(self, validated_data):
user = validated_data.pop('user', self.context['request'].user)
return save_period(user, validated_data)
class TimeEntryUpdateSerializer(serializers.Serializer):
start_date = serializers.DateField()
start_time = serializers.TimeField()
end_date = serializers.DateField()
end_time = serializers.TimeField(allow_null=True)
def validate(self, attrs):
entries = self.context.get('entries', [self.instance])
first, last = entries[0], entries[-1]
values = dict(
start_date=first.start_date, start_time=first.start_time,
end_date=last.end_date, end_time=last.end_time,
)
values.update(attrs)
validate_period(values)
return values
def update(self, instance, validated_data):
return save_period(
instance.user, validated_data,
self.context.get('entries', [instance]),
)
class WeeklySummarySerializer(serializers.Serializer):
user = serializers.CharField()
username = serializers.CharField()
total_hours = serializers.FloatField()
entries = serializers.ListField(child=serializers.DictField())