Merge branch 'develop' of ssh://gl.id-east.ru:222/gm/gm-backend into develop
This commit is contained in:
commit
4a53cca6c0
|
|
@ -1,9 +1,12 @@
|
|||
from django.core.management.base import BaseCommand
|
||||
from django.db import connections
|
||||
from establishment.management.commands.add_position import namedtuplefetchall
|
||||
from establishment.models import Employee
|
||||
from establishment.models import Employee, EstablishmentEmployee
|
||||
from django.utils import timezone
|
||||
from django.db.models import Q
|
||||
from tqdm import tqdm
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Add employee from old db to new db.'
|
||||
|
||||
|
|
@ -30,4 +33,7 @@ class Command(BaseCommand):
|
|||
for e in tqdm(self.employees_sql()):
|
||||
empl = Employee.objects.filter(old_id=e.profile_id).update(name=e.name)
|
||||
|
||||
EstablishmentEmployee.objects.filter(from_date__isnull=True, old_id__isnull=False)\
|
||||
.update(from_date=timezone.now()-timezone.timedelta(days=1))
|
||||
|
||||
self.stdout.write(self.style.WARNING(f'Update employee name objects.'))
|
||||
|
|
|
|||
|
|
@ -131,7 +131,8 @@ class EstablishmentSubTypeBaseSerializer(serializers.ModelSerializer):
|
|||
'id',
|
||||
'name',
|
||||
'name_translated',
|
||||
'establishment_type'
|
||||
'establishment_type',
|
||||
'index_name',
|
||||
]
|
||||
extra_kwargs = {
|
||||
'name': {'write_only': True},
|
||||
|
|
@ -173,6 +174,7 @@ class EstablishmentShortSerializer(serializers.ModelSerializer):
|
|||
"""Short serializer for establishment."""
|
||||
city = CitySerializer(source='address.city', allow_null=True)
|
||||
establishment_type = EstablishmentTypeGeoSerializer()
|
||||
establishment_subtypes = EstablishmentSubTypeBaseSerializer(many=True)
|
||||
|
||||
class Meta:
|
||||
"""Meta class."""
|
||||
|
|
@ -183,7 +185,8 @@ class EstablishmentShortSerializer(serializers.ModelSerializer):
|
|||
'index_name',
|
||||
'slug',
|
||||
'city',
|
||||
'establishment_type'
|
||||
'establishment_type',
|
||||
'establishment_subtypes',
|
||||
]
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -4,11 +4,14 @@ import logging
|
|||
from celery import shared_task
|
||||
from celery.schedules import crontab
|
||||
from celery.task import periodic_task
|
||||
|
||||
from django.core import management
|
||||
from django_elasticsearch_dsl.management.commands import search_index
|
||||
|
||||
from django_elasticsearch_dsl.registries import registry
|
||||
from establishment import models
|
||||
from location.models import Country
|
||||
from search_indexes.documents.establishment import EstablishmentDocument
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
|
@ -25,7 +28,18 @@ def recalculate_price_levels_by_country(country_id):
|
|||
establishment.recalculate_price_level(low_price=country.low_price,
|
||||
high_price=country.high_price)
|
||||
|
||||
# @periodic_task(run_every=crontab(minute=59))
|
||||
# def rebuild_establishment_indices():
|
||||
# management.call_command(search_index.Command(), action='populate', models=[models.Establishment.__name__],
|
||||
# force=True)
|
||||
|
||||
|
||||
@periodic_task(run_every=crontab(minute=59))
|
||||
def rebuild_establishment_indices():
|
||||
management.call_command(search_index.Command(), action='rebuild', models=[models.Establishment.__name__],
|
||||
force=True)
|
||||
def update_establishment_indices():
|
||||
try:
|
||||
doc = registry.get_documents([models.Establishment]).pop()
|
||||
except KeyError:
|
||||
pass
|
||||
else:
|
||||
qs = doc().get_indexing_queryset()
|
||||
doc().update(qs)
|
||||
|
|
|
|||
|
|
@ -44,10 +44,10 @@ class NewsDetailView(NewsMixinView, generics.RetrieveAPIView):
|
|||
lookup_field = 'slug'
|
||||
serializer_class = serializers.NewsDetailWebSerializer
|
||||
|
||||
queryset = models.News.objects.all()
|
||||
|
||||
def get_queryset(self):
|
||||
return self.queryset
|
||||
"""Override get_queryset method."""
|
||||
qs = models.News.objects.all().annotate_in_favorites(self.request.user)
|
||||
return qs
|
||||
|
||||
|
||||
class NewsTypeListView(generics.ListAPIView):
|
||||
|
|
|
|||
18
apps/notification/migrations/0002_subscriber_old_id.py
Normal file
18
apps/notification/migrations/0002_subscriber_old_id.py
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 2.2.7 on 2019-11-15 07:08
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('notification', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='subscriber',
|
||||
name='old_id',
|
||||
field=models.PositiveIntegerField(blank=True, default=None, null=True, verbose_name='old id'),
|
||||
),
|
||||
]
|
||||
|
|
@ -74,21 +74,29 @@ class Subscriber(ProjectBaseMixin):
|
|||
(USABLE, _('Usable')),
|
||||
)
|
||||
|
||||
user = models.OneToOneField(User, blank=True, null=True, default=None,
|
||||
on_delete=models.SET_NULL, related_name='subscriber',
|
||||
verbose_name=_('User'))
|
||||
email = models.EmailField(blank=True, null=True, default=None, unique=True,
|
||||
verbose_name=_('Email'))
|
||||
ip_address = models.GenericIPAddressField(blank=True, null=True, default=None,
|
||||
verbose_name=_('IP address'))
|
||||
country_code = models.CharField(max_length=10, blank=True, null=True, default=None,
|
||||
verbose_name=_('Country code'))
|
||||
locale = models.CharField(blank=True, null=True, default=None,
|
||||
max_length=10, verbose_name=_('Locale identifier'))
|
||||
state = models.PositiveIntegerField(choices=STATE_CHOICES, default=USABLE,
|
||||
verbose_name=_('State'))
|
||||
update_code = models.CharField(max_length=254, blank=True, null=True, default=None,
|
||||
db_index=True, verbose_name=_('Token'))
|
||||
user = models.OneToOneField(
|
||||
User,
|
||||
blank=True,
|
||||
null=True,
|
||||
default=None,
|
||||
on_delete=models.SET_NULL,
|
||||
related_name='subscriber',
|
||||
verbose_name=_('User'),
|
||||
)
|
||||
email = models.EmailField(blank=True, null=True, default=None, unique=True, verbose_name=_('Email'))
|
||||
ip_address = models.GenericIPAddressField(blank=True, null=True, default=None, verbose_name=_('IP address'))
|
||||
country_code = models.CharField(max_length=10, blank=True, null=True, default=None, verbose_name=_('Country code'))
|
||||
locale = models.CharField(blank=True, null=True, default=None, max_length=10, verbose_name=_('Locale identifier'))
|
||||
state = models.PositiveIntegerField(choices=STATE_CHOICES, default=USABLE, verbose_name=_('State'))
|
||||
update_code = models.CharField(
|
||||
max_length=254,
|
||||
blank=True,
|
||||
null=True,
|
||||
default=None,
|
||||
db_index=True,
|
||||
verbose_name=_('Token'),
|
||||
)
|
||||
old_id = models.PositiveIntegerField(_('old id'), blank=True, null=True, default=None)
|
||||
|
||||
objects = SubscriberManager.from_queryset(SubscriberQuerySet)()
|
||||
|
||||
|
|
|
|||
|
|
@ -1,24 +1,39 @@
|
|||
from pprint import pprint
|
||||
|
||||
from transfer.models import EmailAddresses
|
||||
from transfer.serializers.notification import SubscriberSerializer
|
||||
from transfer.models import EmailAddresses, NewsletterSubscriber
|
||||
from transfer.serializers.notification import SubscriberSerializer, NewsletterSubscriberSerializer
|
||||
|
||||
|
||||
def transfer_subscriber():
|
||||
queryset = EmailAddresses.objects.filter(state="usable")
|
||||
queryset = EmailAddresses.objects.filter(state='usable')
|
||||
|
||||
serialized_data = SubscriberSerializer(data=list(queryset.values()), many=True)
|
||||
|
||||
if serialized_data.is_valid():
|
||||
serialized_data.save()
|
||||
else:
|
||||
pprint(f"News serializer errors: {serialized_data.errors}")
|
||||
pprint(f'News serializer errors: {serialized_data.errors}')
|
||||
|
||||
|
||||
def transfer_newsletter_subscriber():
|
||||
pass
|
||||
queryset = NewsletterSubscriber.objects.all().values(
|
||||
'id',
|
||||
'email_address__email',
|
||||
'email_address__account_id',
|
||||
'email_address__ip',
|
||||
'email_address__country_code',
|
||||
'email_address__locale',
|
||||
'created_at',
|
||||
)
|
||||
|
||||
serialized_data = NewsletterSubscriberSerializer(data=list(queryset.values()), many=True)
|
||||
if serialized_data.is_valid():
|
||||
serialized_data.save()
|
||||
else:
|
||||
pprint(f'NewsletterSubscriber serializer errors: {serialized_data.errors}')
|
||||
|
||||
|
||||
data_types = {
|
||||
"subscriber": [transfer_subscriber]
|
||||
'subscriber': [transfer_subscriber],
|
||||
'newsletter_subscriber': [transfer_newsletter_subscriber],
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,14 +10,15 @@ from comment.serializers import CommentRUDSerializer
|
|||
|
||||
class ProductBaseView(generics.GenericAPIView):
|
||||
"""Product base view"""
|
||||
permission_classes = (permissions.AllowAny, )
|
||||
permission_classes = (permissions.AllowAny,)
|
||||
|
||||
def get_queryset(self):
|
||||
"""Override get_queryset method."""
|
||||
return Product.objects.published() \
|
||||
.with_base_related() \
|
||||
.by_country_code(self.request.country_code) \
|
||||
.order_by('-created')
|
||||
.with_base_related() \
|
||||
.annotate_in_favorites(self.request.user) \
|
||||
.by_country_code(self.request.country_code) \
|
||||
.order_by('-created')
|
||||
|
||||
|
||||
class ProductListView(ProductBaseView, generics.ListAPIView):
|
||||
|
|
@ -67,9 +68,9 @@ class ProductCommentListView(generics.ListAPIView):
|
|||
"""Override get_queryset method"""
|
||||
product = get_object_or_404(Product, slug=self.kwargs['slug'])
|
||||
return Comment.objects.by_content_type(app_label='product',
|
||||
model='product')\
|
||||
.by_object_id(object_id=product.pk)\
|
||||
.order_by('-created')
|
||||
model='product') \
|
||||
.by_object_id(object_id=product.pk) \
|
||||
.order_by('-created')
|
||||
|
||||
|
||||
class ProductCommentRUDView(generics.RetrieveUpdateDestroyAPIView):
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ class Command(BaseCommand):
|
|||
'assemblage',
|
||||
'rating_count',
|
||||
'product_review',
|
||||
'newsletter_subscriber', # подписчики на рассылку - переносить после переноса пользователей №1
|
||||
]
|
||||
|
||||
def handle(self, *args, **options):
|
||||
|
|
|
|||
|
|
@ -1194,6 +1194,7 @@ class NewsletterSubscriber(MigrateMixin):
|
|||
site = models.ForeignKey(Sites, models.DO_NOTHING, blank=True, null=True)
|
||||
email_address = models.ForeignKey(EmailAddresses, models.DO_NOTHING, blank=True, null=True)
|
||||
state = models.CharField(max_length=255, blank=True, null=True)
|
||||
consent_purpose = models.CharField(max_length=255, blank=True, null=True)
|
||||
consent_at = models.DateTimeField()
|
||||
created_at = models.DateTimeField()
|
||||
updated_at = models.DateTimeField()
|
||||
|
|
|
|||
|
|
@ -33,3 +33,47 @@ class SubscriberSerializer(serializers.ModelSerializer):
|
|||
|
||||
def get_country_code(self, obj):
|
||||
return obj["country_code"]
|
||||
|
||||
|
||||
class NewsletterSubscriberSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField()
|
||||
email_address__email = serializers.CharField()
|
||||
email_address__account_id = serializers.IntegerField(allow_null=True)
|
||||
email_address__ip = serializers.CharField(allow_null=True)
|
||||
email_address__country_code = serializers.CharField(allow_null=True)
|
||||
email_address__locale = serializers.CharField(allow_null=True)
|
||||
created_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S')
|
||||
|
||||
# def validate(self, data):
|
||||
# data.update({
|
||||
# 'reviewer': self.get_reviewer(data),
|
||||
# 'status': Review.READY if data['aasm_state'] == 'published' else Review.TO_INVESTIGATE,
|
||||
# 'published_at': data.pop('created_at'),
|
||||
# 'old_id': data.pop('id'),
|
||||
# 'content_object': self.get_establishment(data),
|
||||
# })
|
||||
# data.pop('reviewer_id')
|
||||
# data.pop('establishment_id')
|
||||
# data.pop('aasm_state')
|
||||
# return data
|
||||
#
|
||||
# def create(self, validated_data):
|
||||
# obj, _ = Review.objects.update_or_create(
|
||||
# old_id=validated_data['old_id'],
|
||||
# defaults=validated_data,
|
||||
# )
|
||||
# return obj
|
||||
#
|
||||
# @staticmethod
|
||||
# def get_reviewer(data):
|
||||
# user = User.objects.filter(old_id=data['reviewer_id']).first()
|
||||
# if not user:
|
||||
# raise ValueError(f"User account not found with old_id {data['reviewer_id']}")
|
||||
# return user
|
||||
#
|
||||
# @staticmethod
|
||||
# def get_establishment(data):
|
||||
# establishment = Establishment.objects.filter(old_id=data['establishment_id']).first()
|
||||
# if not establishment:
|
||||
# raise ValueError(f"Establishment not found with old_id {data['establishment_id']}: ")
|
||||
# return establishment
|
||||
|
|
|
|||
|
|
@ -50,7 +50,5 @@ PyYAML==5.1.2
|
|||
|
||||
# temp solution
|
||||
redis==3.2.0
|
||||
amqp>=2.4.0
|
||||
|
||||
kombu==4.5.0
|
||||
celery==4.3.0rc2
|
||||
kombu==4.6.6
|
||||
celery==4.3.0
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user