transfer dishes
This commit is contained in:
parent
5bfbafa865
commit
4e868c2d8d
|
|
@ -1,9 +1,10 @@
|
||||||
from pprint import pprint
|
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.establishment import EstablishmentSerializer
|
||||||
|
from transfer.serializers.plate import PlateSerializer
|
||||||
|
|
||||||
|
|
||||||
def transfer_establishment():
|
def transfer_establishment():
|
||||||
|
|
@ -77,6 +78,26 @@ def transfer_establishment():
|
||||||
pprint(f"Establishment serializer errors: {serialized_data.errors}")
|
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 = {
|
data_types = {
|
||||||
"establishment": [transfer_establishment]
|
"establishment": [transfer_establishment],
|
||||||
|
"menu": [transfer_menu],
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,8 @@ class Command(BaseCommand):
|
||||||
'establishment',
|
'establishment',
|
||||||
'gallery',
|
'gallery',
|
||||||
'commercial',
|
'commercial',
|
||||||
'tmp'
|
'tmp',
|
||||||
|
'menu',
|
||||||
]
|
]
|
||||||
|
|
||||||
def handle(self, *args, **options):
|
def handle(self, *args, **options):
|
||||||
|
|
|
||||||
|
|
@ -461,6 +461,23 @@ class Descriptions(MigrateMixin):
|
||||||
db_table = 'descriptions'
|
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):
|
# class EstablishmentAssets(MigrateMixin):
|
||||||
# using = 'legacy'
|
# using = 'legacy'
|
||||||
#
|
#
|
||||||
|
|
|
||||||
55
apps/transfer/serializers/plate.py
Normal file
55
apps/transfer/serializers/plate.py
Normal 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
26
apps/utils/constants.py
Normal 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', # США
|
||||||
|
}
|
||||||
|
|
@ -329,7 +329,7 @@ REDOC_SETTINGS = {
|
||||||
# RabbitMQ
|
# RabbitMQ
|
||||||
# BROKER_URL = 'amqp://rabbitmq:5672'
|
# BROKER_URL = 'amqp://rabbitmq:5672'
|
||||||
# Redis
|
# Redis
|
||||||
BROKER_URL = 'redis://localhost:6379/1'
|
BROKER_URL = 'redis://redis:6379/1'
|
||||||
CELERY_RESULT_BACKEND = BROKER_URL
|
CELERY_RESULT_BACKEND = BROKER_URL
|
||||||
CELERY_BROKER_URL = BROKER_URL
|
CELERY_BROKER_URL = BROKER_URL
|
||||||
CELERY_ACCEPT_CONTENT = ['application/json']
|
CELERY_ACCEPT_CONTENT = ['application/json']
|
||||||
|
|
|
||||||
|
|
@ -19,8 +19,8 @@ DOMAIN_URI = 'gm.id-east.ru'
|
||||||
# ELASTICSEARCH SETTINGS
|
# ELASTICSEARCH SETTINGS
|
||||||
ELASTICSEARCH_DSL = {
|
ELASTICSEARCH_DSL = {
|
||||||
'default': {
|
'default': {
|
||||||
'hosts': 'localhost:9200'
|
# 'hosts': 'localhost:9200'
|
||||||
# 'hosts': 'elasticsearch:9200'
|
'hosts': 'elasticsearch:9200'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user