59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
"""Serializer for app timetable"""
|
|
from rest_framework import serializers
|
|
from timetable.models import Timetable
|
|
from establishment.models import Establishment
|
|
|
|
|
|
class ScheduleRUDSerializer(serializers.ModelSerializer):
|
|
"""Serializer for Establishment model."""
|
|
weekday_display = serializers.CharField(source='get_weekday_display',
|
|
read_only=True)
|
|
|
|
class Meta:
|
|
"""Meta class."""
|
|
model = Timetable
|
|
fields = [
|
|
'id',
|
|
'weekday_display',
|
|
'lunch_start',
|
|
'lunch_end',
|
|
'dinner_start',
|
|
'dinner_end',
|
|
]
|
|
|
|
|
|
class ScheduleCreateSerializer(ScheduleRUDSerializer):
|
|
"""Serializer for Establishment model."""
|
|
weekday = serializers.IntegerField(write_only=True)
|
|
|
|
class Meta:
|
|
"""Meta class."""
|
|
model = Timetable
|
|
fields = ScheduleRUDSerializer.Meta.fields + [
|
|
'weekday',
|
|
]
|
|
|
|
def validate(self, attrs):
|
|
"""Override validate method"""
|
|
return attrs
|
|
|
|
def create(self, validated_data):
|
|
"""Override create method"""
|
|
instance = super().create(validated_data)
|
|
weekday = validated_data.get('weekday')
|
|
establishment_pk = self.context.get('request')\
|
|
.parser_context.get('view')\
|
|
.kwargs.get('pk')
|
|
|
|
establishment_qs = Establishment.objects.filter(pk=establishment_pk)
|
|
if not establishment_qs.exists():
|
|
# todo: replace on appropriate exception
|
|
raise serializers.ValidationError()
|
|
|
|
establishment = establishment_qs.first()
|
|
schedule_qs = establishment.schedule.filter(weekday=weekday)
|
|
if schedule_qs.exists():
|
|
schedule_qs.delete()
|
|
establishment.schedule.add(instance)
|
|
return instance
|