Louis Mazin fa6e979e83 test
2026-09-20 01:03:47 +02:00

107 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from rest_framework import serializers
from django.contrib.auth import get_user_model
from .models import TimeEntry
User = get_user_model()
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['id', 'username', 'first_name', 'last_name']
class TimeEntrySerializer(serializers.ModelSerializer):
user = UserSerializer(read_only=True)
class Meta:
model = TimeEntry
fields = [
'id',
'user',
'date',
'start_time',
'end_time',
'created_at',
'updated_at',
'duration',
'day_of_week',
]
read_only_fields = [
'id',
'user',
'created_at',
'updated_at',
'duration',
'day_of_week',
]
def create(self, validated_data):
validated_data['user'] = self.context['request'].user
return super().create(validated_data)
def update(self, instance, validated_data):
validated_data.pop('user', None)
return super().update(instance, validated_data)
class TimeEntryCreateSerializer(serializers.ModelSerializer):
user_id = serializers.PrimaryKeyRelatedField(
source='user',
queryset=User.objects.all(),
write_only=True,
required=False,
)
class Meta:
model = TimeEntry
fields = ['user_id', 'date', 'start_time', 'end_time']
def validate(self, attrs):
if not attrs.get('start_time') and not attrs.get('end_time'):
raise serializers.ValidationError(
'Une heure d’entrée ou de sortie est requise.'
)
if (
attrs.get('start_time')
and attrs.get('end_time')
and attrs['end_time'] <= attrs['start_time']
):
raise serializers.ValidationError(
'L’heure de sortie doit être après l’entrée.'
)
return attrs
class TimeEntryUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = TimeEntry
fields = ['start_time', 'end_time']
def validate(self, attrs):
if not attrs.get('start_time') and not attrs.get('end_time'):
raise serializers.ValidationError(
'Une heure d’entrée ou de sortie est requise.'
)
if (
attrs.get('start_time')
and attrs.get('end_time')
and attrs['end_time'] <= attrs['start_time']
):
raise serializers.ValidationError(
'L’heure de sortie doit être après l’heure d’entrée.'
)
return attrs
class WeeklySummarySerializer(serializers.Serializer):
user = serializers.CharField()
username = serializers.CharField()
total_hours = serializers.FloatField()
entries = serializers.ListField(child=serializers.DictField())