53 lines
2.0 KiB
Python
53 lines
2.0 KiB
Python
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.')
|
||
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.')
|
||
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 |