transfer dishes
This commit is contained in:
parent
5bfbafa865
commit
4e868c2d8d
|
|
@ -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],
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,8 @@ class Command(BaseCommand):
|
|||
'establishment',
|
||||
'gallery',
|
||||
'commercial',
|
||||
'tmp'
|
||||
'tmp',
|
||||
'menu',
|
||||
]
|
||||
|
||||
def handle(self, *args, **options):
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
#
|
||||
|
|
|
|||
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
|
||||
# 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']
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user