104 lines
2.9 KiB
Python
104 lines
2.9 KiB
Python
from rest_framework import serializers
|
||
from django.conf import settings
|
||
|
||
from .models import TimeEntry
|
||
|
||
|
||
class UserSerializer(serializers.ModelSerializer):
|
||
class Meta:
|
||
model = settings.AUTH_USER_MODEL
|
||
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=settings.AUTH_USER_MODEL.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()) |