"""Establishment serializers.""" from rest_framework import serializers from establishment import models from location.serializers import AddressSerializer from main.serializers import MetaDataContentSerializer, AwardSerializer, CurrencySerializer from review import models as review_models from timetable.models import Timetable class ContactPhonesSerializer(serializers.ModelSerializer): """Contact phone serializer""" class Meta: model = models.ContactPhone fields = [ 'phone' ] class ContactEmailsSerializer(serializers.ModelSerializer): """Contact email serializer""" class Meta: model = models.ContactEmail fields = [ 'email' ] class PlateSerializer(serializers.ModelSerializer): currency = CurrencySerializer(read_only=True) class Meta: model = models.Plate fields = [ 'name_translated', 'currency', 'price', 'is_signature_plate', ] class MenuSerializers(serializers.ModelSerializer): plates = PlateSerializer(read_only=True, many=True, source='plate_set') category_translated = serializers.CharField(read_only=True) class Meta: model = models.Menu fields = [ 'id', 'category_translated', 'plates' ] class EstablishmentTypeSerializer(serializers.ModelSerializer): """Serializer for EstablishmentType model.""" name_translated = serializers.CharField(allow_null=True) class Meta: """Meta class.""" model = models.EstablishmentType fields = ('id', 'name_translated') class EstablishmentSubTypeSerializer(serializers.ModelSerializer): """Serializer for EstablishmentSubType models.""" name_translated = serializers.CharField(allow_null=True) class Meta: """Meta class.""" model = models.EstablishmentSubType fields = ('id', 'name_translated') class EstablishmentScheduleSerializer(serializers.ModelSerializer): """Serializer for Establishment model.""" weekday = serializers.CharField(source='get_weekday_display') class Meta: """Meta class.""" model = Timetable fields = ( 'weekday', 'lunch_start', 'lunch_end', 'dinner_start', 'dinner_end', ) class ReviewSerializer(serializers.ModelSerializer): """Serializer for model Review.""" text_translated = serializers.CharField(read_only=True) class Meta: """Meta class.""" model = review_models.Review fields = ( 'text_translated', ) class CommentSerializer(serializers.ModelSerializer): """Comment serializer""" nickname = serializers.CharField(source='author.username') profile_pic = serializers.ImageField(source='author.image') class Meta: """Serializer for model Comment""" model = models.Comment fields = ( 'created', 'text', 'mark', 'nickname', 'profile_pic' ) class EstablishmentEmployeeSerializer(serializers.ModelSerializer): """Serializer for actual employees.""" id = serializers.IntegerField(source='employee.id') name = serializers.CharField(source='employee.name') position_translated = serializers.CharField(source='position.name_translated') awards = AwardSerializer(source='employee.awards', many=True) class Meta: """Meta class.""" model = models.Employee fields = ('id', 'name', 'position_translated', 'awards') class EstablishmentSerializer(serializers.ModelSerializer): """Serializer for Establishment model.""" name_translated = serializers.CharField(allow_null=True) description_translated = serializers.CharField(allow_null=True) type = EstablishmentTypeSerializer(source='establishment_type') subtypes = EstablishmentSubTypeSerializer(many=True) address = AddressSerializer() tags = MetaDataContentSerializer(many=True) awards = AwardSerializer(many=True) schedule = EstablishmentScheduleSerializer(source='schedule.schedule', many=True, allow_null=True) phones = ContactPhonesSerializer(read_only=True, many=True, ) emails = ContactEmailsSerializer(read_only=True, many=True, ) reviews = ReviewSerializer(source='reviews.last', allow_null=True) comments = CommentSerializer(many=True, allow_null=True) employees = EstablishmentEmployeeSerializer(source='actual_establishment_employees', many=True) menu = MenuSerializers(source='menu_set', many=True, read_only=True) best_price_menu = serializers.DecimalField(max_digits=14, decimal_places=2, read_only=True) best_price_carte = serializers.DecimalField(max_digits=14, decimal_places=2, read_only=True) class Meta: """Meta class.""" model = models.Establishment fields = ( 'id', 'name_translated', 'description_translated', 'public_mark', 'price_level', 'toque_number', 'price_level', 'type', 'subtypes', 'image', 'address', 'tags', 'awards', 'schedule', 'phones', 'emails', 'reviews', 'comments', 'employees', 'menu', 'best_price_menu', 'best_price_carte' )