gault-millau/apps/establishment/serializers/back.py
2019-10-15 17:17:03 +03:00

240 lines
7.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
from establishment import models
from establishment.serializers import (
EstablishmentBaseSerializer, PlateSerializer, ContactEmailsSerializer,
ContactPhonesSerializer, SocialNetworkRelatedSerializers,
EstablishmentTypeBaseSerializer, EstablishmentSubTypeBaseSerializer)
# EstablishmentTypeTagCategoryBaseSerializer)
from main.models import Currency
from tag.serializers import TagBaseSerializer
from utils.decorators import with_base_attributes
from utils.serializers import TranslatedField
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 = EstablishmentTypeBaseSerializer(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 = EstablishmentTypeBaseSerializer(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'
]
# class EstablishmentTagCreateSerializer(serializers.ModelSerializer):
# """Serializer for model EstablishmentTag."""
# class Meta:
# model = models.EstablishmentTag
# fields = [
# 'tag',
# 'establishment'
# ]
# extra_kwargs = {
# 'tag': {'write_only': True},
# 'establishment': {'write_only': True},
# }
#
# def validate(self, attrs):
# """Validate method."""
# establishment = attrs.get('establishment')
# tag = attrs.get('tag')
#
# # Check if tag is already added to establishment.
# if establishment.tags.filter(tag=tag).exists():
# raise serializers.ValidationError(detail={'detail': _('Tag is already added.')})
#
# # Сhecking tag availability for establishment type.
# if not establishment.establishment_type.use_subtypes:
# qs = establishment.establishment_type.tag_categories.filter(tag_category=tag.category)
# else:
# # Сhecking tag availability for establishment subtype.
# qs = establishment.establishment_type.tag_categories.filter(
# establishmentsubtype_set__tag_category=tag.category)
# if not qs.exists():
# raise serializers.ValidationError(
# detail={'detail': _('Tag is not available for this establishment type|subtype.')})
# return attrs
# class EstablishmentSubTypeTagCategoryBaseSerializer(serializers.ModelSerializer):
# """Serializer for intermediate model EstablishmentSubTypeTagCategories."""
# id = serializers.IntegerField(source='tag_category.id', read_only=True)
# label_translated = TranslatedField(source='tag_category.label_translated')
# tags = TagBaseSerializer(source='tag_category.tags', many=True, read_only=True)
#
# class Meta:
# """Meta class."""
# model = models.EstablishmentSubTypeTagCategory
# fields = [
# 'id',
# 'label_translated',
# 'tags',
# 'establishment_subtype',
# 'tag_category',
# ]
# extra_kwargs = {
# 'establishment_subtype': {'write_only': True},
# 'tag_category': {'write_only': True},
# }
#
# def validate(self, attrs):
# """Override validate method."""
# if models.EstablishmentTypeTagCategory.objects.filter(
# establishment_type=attrs.get('establishment_type'),
# tag_category=attrs.get('tag_category')).exists():
# raise serializers.ValidationError(detail={'detail': _('Objects is already attached.')})
# return attrs
#
#
# class EstablishmentSubTypeSerializer(EstablishmentSubTypeBaseSerializer):
# """Extended serializer for EstablishmentSubType model with tags."""
# tag_categories = EstablishmentSubTypeTagCategoryBaseSerializer(many=True, read_only=True)
#
# class Meta(EstablishmentSubTypeBaseSerializer.Meta):
# """Meta class"""
# fields = [
# 'id',
# 'name_translated',
# 'tag_categories'
# ]
#
#
# class EstablishmentTagsByType(EstablishmentTypeBaseSerializer):
# """Tags by establishment type"""
# tag_categories = EstablishmentTypeTagCategoryBaseSerializer(many=True)
# subtypes = EstablishmentSubTypeSerializer(many=True, source='establishmentsubtype_set')
#
# class Meta(EstablishmentTypeBaseSerializer.Meta):
# """Meta class."""
# fields = [
# 'id',
# 'name_translated',
# 'tag_categories',
# 'subtypes',
# ]