gault-millau/apps/transfer/serializers/plate.py
2019-10-29 08:25:03 +03:00

56 lines
2.0 KiB
Python

from rest_framework import serializers
from establishment.models import Menu, Plate, Establishment
from main.models import Currency
from utils.constants import CODE_LOCALES
class PlateSerializer(serializers.Serializer):
name = serializers.CharField()
price = serializers.DecimalField(decimal_places=2, max_digits=10)
currency = serializers.CharField()
dish_type = serializers.CharField()
country_code = serializers.CharField()
establishment_id = serializers.IntegerField()
signature = serializers.IntegerField(allow_null=True)
def create(self, validated_data):
establishment = Establishment.objects.filter(old_id=validated_data['establishment_id']).first()
if not establishment:
return
return Plate.objects.create(**self.get_plate_data(validated_data, establishment.id))
def get_plate_data(self, validated_data, est_id):
locale = CODE_LOCALES.get(validated_data['country_code'], 'en-GB')
payload = {
'name': {locale: validated_data['name']},
'price': validated_data['price'],
'currency_id': self.get_currency(validated_data),
'menu_id': self.get_menu(validated_data, est_id),
'is_signature_plate': bool(validated_data['signature']),
}
return payload
@staticmethod
def get_menu(validated_data, est_id):
payload = {
'establishment_id': est_id,
'category': {'en-GB': validated_data['dish_type']},
}
menu, _ = Menu.objects.get_or_create(**payload)
return menu.id
@staticmethod
def get_currency(validated_data):
try:
currency = Currency.objects.get(
slug=validated_data['currency'],
sign='$',
)
except Currency.DoesNotExist:
currency = Currency.objects.create(
slug=validated_data['currency'],
sign='$',
)
return currency.id