transfer dishes

This commit is contained in:
alex 2019-10-29 08:25:03 +03:00
parent 5bfbafa865
commit 4e868c2d8d
7 changed files with 127 additions and 7 deletions

View File

@ -1,9 +1,10 @@
from pprint import pprint
from django.db.models import Q
from django.db.models import Q, F
from transfer.models import Establishments
from transfer.models import Establishments, Dishes
from transfer.serializers.establishment import EstablishmentSerializer
from transfer.serializers.plate import PlateSerializer
def transfer_establishment():
@ -77,6 +78,26 @@ def transfer_establishment():
pprint(f"Establishment serializer errors: {serialized_data.errors}")
def transfer_menu():
dishes = Dishes.objects.exclude(
Q(establishment_id__isnull=True) |
Q(dish_type__isnull=True) |
Q(price__isnull=True) |
Q(currency__isnull=True) |
Q(name__isnull=True) |
Q(name__exact='')
).annotate(
country_code=F('establishment__location__country_code'),
)
serialized_data = PlateSerializer(data=list(dishes.values()), many=True)
if serialized_data.is_valid():
serialized_data.save()
else:
pprint(f"Menu serializer errors: {serialized_data.errors}")
data_types = {
"establishment": [transfer_establishment]
"establishment": [transfer_establishment],
"menu": [transfer_menu],
}

View File

@ -18,7 +18,8 @@ class Command(BaseCommand):
'establishment',
'gallery',
'commercial',
'tmp'
'tmp',
'menu',
]
def handle(self, *args, **options):

View File

@ -461,6 +461,23 @@ class Descriptions(MigrateMixin):
db_table = 'descriptions'
class Dishes(MigrateMixin):
using = 'legacy'
name = models.CharField(max_length=255, blank=True, null=True)
price = models.FloatField(blank=True, null=True)
currency = models.CharField(max_length=255, blank=True, null=True)
dish_type = models.CharField(max_length=255, blank=True, null=True)
signature = models.IntegerField(blank=True, null=True)
establishment = models.ForeignKey('Establishments', models.DO_NOTHING, blank=True, null=True)
created_at = models.DateTimeField()
updated_at = models.DateTimeField()
class Meta:
managed = False
db_table = 'dishes'
# class EstablishmentAssets(MigrateMixin):
# using = 'legacy'
#

View File

@ -0,0 +1,55 @@
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

26
apps/utils/constants.py Normal file
View File

@ -0,0 +1,26 @@
CODE_LOCALES = {
'AAA': 'en-GB',
'AUS': 'en-AU', # Австралия
'AUT': 'de-AT', # Австрия
'BEL': 'de-BE', # Бельгия
'BRA': 'pt-BR', # Бразилия
'CAN': 'fr-CA', # Канада
'DEU': 'da-DE', # Германия
'FRA': 'fr-FR', # Франция
'GEO': 'ka', # Грузия
'GRC': 'el-GR', # Греция
'HRV': 'hr-HR', # Хорватия
'HUN': 'hu-HU', # Венгрия
'ISR': 'en-IL', # Израиль
'ITA': 'it-IT', # Италия
'JPN': 'ja', # Япония
'LUX': 'fr-LU', # Люксембург
'MAR': 'ar-MA', # Марокко
'MDV': 'dv', # Мальдивы
'NLD': 'nl-NL', # Нидерланды
'POL': 'pl', # Польша
'ROU': 'ro', # Румыния
'RUS': 'ru-RU', # Россия
'SVN': 'hu-SI', # Словения
'USA': 'en-US', # США
}

View File

@ -329,7 +329,7 @@ REDOC_SETTINGS = {
# RabbitMQ
# BROKER_URL = 'amqp://rabbitmq:5672'
# Redis
BROKER_URL = 'redis://localhost:6379/1'
BROKER_URL = 'redis://redis:6379/1'
CELERY_RESULT_BACKEND = BROKER_URL
CELERY_BROKER_URL = BROKER_URL
CELERY_ACCEPT_CONTENT = ['application/json']

View File

@ -19,8 +19,8 @@ DOMAIN_URI = 'gm.id-east.ru'
# ELASTICSEARCH SETTINGS
ELASTICSEARCH_DSL = {
'default': {
'hosts': 'localhost:9200'
# 'hosts': 'elasticsearch:9200'
# 'hosts': 'localhost:9200'
'hosts': 'elasticsearch:9200'
}
}