145 lines
3.8 KiB
Python
145 lines
3.8 KiB
Python
from rest_framework import serializers
|
|
from establishment import models
|
|
from establishment.serializers import (
|
|
EstablishmentBaseSerializer, PlateSerializer, ContactEmailsSerializer,
|
|
ContactPhonesSerializer, SocialNetworkRelatedSerializers,
|
|
EstablishmentTypeSerializer)
|
|
|
|
from utils.decorators import with_base_attributes
|
|
|
|
from main.models import Currency
|
|
|
|
|
|
class EstablishmentListCreateSerializer(EstablishmentBaseSerializer):
|
|
"""Establishment create serializer"""
|
|
|
|
type_id = serializers.PrimaryKeyRelatedField(
|
|
source='establishment_type',
|
|
queryset=models.EstablishmentType.objects.all(), write_only=True
|
|
)
|
|
phones = ContactPhonesSerializer(read_only=True, many=True, )
|
|
emails = ContactEmailsSerializer(read_only=True, many=True, )
|
|
socials = SocialNetworkRelatedSerializers(read_only=True, many=True, )
|
|
slug = serializers.SlugField(required=True, allow_blank=False, max_length=50)
|
|
type = EstablishmentTypeSerializer(source='establishment_type', read_only=True)
|
|
|
|
class Meta:
|
|
model = models.Establishment
|
|
fields = [
|
|
'id',
|
|
'name',
|
|
'website',
|
|
'phones',
|
|
'emails',
|
|
'price_level',
|
|
'toque_number',
|
|
'type_id',
|
|
'type',
|
|
'socials',
|
|
'image_url',
|
|
'slug',
|
|
# TODO: check in admin filters
|
|
'is_publish',
|
|
'guestonline_id',
|
|
'lastable_id',
|
|
]
|
|
|
|
|
|
class EstablishmentRUDSerializer(EstablishmentBaseSerializer):
|
|
"""Establishment create serializer"""
|
|
|
|
type_id = serializers.PrimaryKeyRelatedField(
|
|
source='establishment_type',
|
|
queryset=models.EstablishmentType.objects.all(), write_only=True
|
|
)
|
|
phones = ContactPhonesSerializer(read_only=False, many=True, )
|
|
emails = ContactEmailsSerializer(read_only=False, many=True, )
|
|
socials = SocialNetworkRelatedSerializers(read_only=False, many=True, )
|
|
type = EstablishmentTypeSerializer(source='establishment_type')
|
|
|
|
class Meta:
|
|
model = models.Establishment
|
|
fields = [
|
|
'id',
|
|
'name',
|
|
'website',
|
|
'phones',
|
|
'emails',
|
|
'price_level',
|
|
'toque_number',
|
|
'type_id',
|
|
'type',
|
|
'socials',
|
|
'image_url',
|
|
# TODO: check in admin filters
|
|
'is_publish'
|
|
]
|
|
|
|
|
|
class SocialNetworkSerializers(serializers.ModelSerializer):
|
|
"""Social network serializers."""
|
|
class Meta:
|
|
model = models.SocialNetwork
|
|
fields = [
|
|
'id',
|
|
'establishment',
|
|
'title',
|
|
'url',
|
|
]
|
|
|
|
|
|
class PlatesSerializers(PlateSerializer):
|
|
"""Social network serializers."""
|
|
|
|
currency_id = serializers.PrimaryKeyRelatedField(
|
|
source='currency',
|
|
queryset=Currency.objects.all(), write_only=True
|
|
)
|
|
|
|
class Meta:
|
|
"""Meta class."""
|
|
|
|
model = models.Plate
|
|
fields = PlateSerializer.Meta.fields + [
|
|
'name',
|
|
'currency_id',
|
|
'menu'
|
|
]
|
|
|
|
|
|
class ContactPhoneBackSerializers(PlateSerializer):
|
|
"""Social network serializers."""
|
|
class Meta:
|
|
model = models.ContactPhone
|
|
fields = [
|
|
'id',
|
|
'establishment',
|
|
'phone'
|
|
]
|
|
|
|
|
|
class ContactEmailBackSerializers(PlateSerializer):
|
|
"""Social network serializers."""
|
|
class Meta:
|
|
model = models.ContactEmail
|
|
fields = [
|
|
'id',
|
|
'establishment',
|
|
'email'
|
|
]
|
|
|
|
|
|
# TODO: test decorator
|
|
@with_base_attributes
|
|
class EmployeeBackSerializers(serializers.ModelSerializer):
|
|
|
|
"""Social network serializers."""
|
|
class Meta:
|
|
model = models.Employee
|
|
fields = [
|
|
'id',
|
|
'user',
|
|
'name'
|
|
]
|
|
|