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