Louis Mazin 13769b12fa test
2026-09-15 20:12:24 +02:00

57 lines
2.4 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.models import User
from .models import TimeEntry
class TimeEntrySerializer(serializers.ModelSerializer):
user = serializers.StringRelatedField(read_only=True)
username = serializers.CharField(source='user.username', read_only=True)
class Meta:
model = TimeEntry
fields = ['id', 'user', 'username', 'date', 'start_time', 'end_time', 'duration', 'created_at']
read_only_fields = ['user', 'duration', 'created_at']
class TimeEntryCreateSerializer(serializers.ModelSerializer):
class Meta:
model = TimeEntry
fields = ['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’heure d’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.StringRelatedField()
username = serializers.CharField()
total_hours = serializers.FloatField()
days = serializers.ListField()
def to_representation(self, instance):
data = super().to_representation(instance)
# Format the days data for frontend consumption
formatted_days = []
for day in data['days']:
formatted_days.append({
'date': day['date'],
'day': day['day'],
'start_time': day['start_time'],
'end_time': day['end_time'],
'duration': day['duration']
})
data['days'] = formatted_days
return data