From 1e0044cbd154729b29d52c7c56103a1d2cab1d48 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Thu, 5 Dec 2019 12:11:44 +0300 Subject: [PATCH 01/12] artisans tags for favs (cherry picked from commit 7081e52) --- apps/establishment/serializers/common.py | 2 ++ apps/favorites/views.py | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/establishment/serializers/common.py b/apps/establishment/serializers/common.py index 4a419fee..23fc24df 100644 --- a/apps/establishment/serializers/common.py +++ b/apps/establishment/serializers/common.py @@ -427,11 +427,13 @@ class EstablishmentSimilarSerializer(EstablishmentBaseSerializer): address = AddressDetailSerializer(read_only=True) schedule = ScheduleRUDSerializer(many=True, allow_null=True) establishment_type = EstablishmentTypeGeoSerializer() + artisan_category = TagBaseSerializer(many=True, allow_null=True) class Meta(EstablishmentBaseSerializer.Meta): fields = EstablishmentBaseSerializer.Meta.fields + [ 'schedule', 'establishment_type', + 'artisan_category', ] diff --git a/apps/favorites/views.py b/apps/favorites/views.py index 53a05469..bee25ced 100644 --- a/apps/favorites/views.py +++ b/apps/favorites/views.py @@ -29,7 +29,8 @@ class FavoritesEstablishmentListView(generics.ListAPIView): def get_queryset(self): """Override get_queryset method""" return Establishment.objects.filter(favorites__user=self.request.user) \ - .order_by('-favorites').with_base_related() + .order_by('-favorites').with_base_related() \ + .with_certain_tag_category_related('shop_category', 'artisan_category') class FavoritesProductListView(generics.ListAPIView): From ca80f7a7971b1f6b04233c29faa53f3854c8c153 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Thu, 5 Dec 2019 13:14:27 +0300 Subject: [PATCH 02/12] possible fix center calculation --- apps/search_indexes/filters.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/search_indexes/filters.py b/apps/search_indexes/filters.py index 644b47fd..cc2bb55a 100644 --- a/apps/search_indexes/filters.py +++ b/apps/search_indexes/filters.py @@ -13,24 +13,24 @@ class CustomGeoSpatialFilteringFilterBackend(GeoSpatialFilteringFilterBackend): @staticmethod def calculate_center(first, second): - if second[1] < 0 < first[1]: - reverse_first, reverse_second = 180 - abs(first[1]), 180 - abs(second[1]) + if second[0] < 0 < first[0]: + reverse_first, reverse_second = 180 - abs(first[0]), 180 - abs(second[0]) diff = (reverse_first + reverse_second) / 2 if reverse_first < reverse_second: - result_part = -180 + (180 + second[1] - diff) + result_part = -180 + (180 + second[0] - diff) else: - result_part = 180 - (180 - first[1] - diff) + result_part = 180 - (180 - first[0] - diff) - elif second[1] < 0 > first[1] or second[1] > 0 < first[1]: + elif second[0] < 0 > first[0] or second[0] > 0 < first[0]: reverse_first, reverse_second = 180 - abs(first[1]), 180 - abs(second[1]) result_part = ((reverse_first + reverse_second) / 2) * (-1 + (second[1] < 0) * 2) else: - result_part = (first[1] + second[1]) / 2 + result_part = (first[0] + second[0]) / 2 - return (first[0] + second[0]) / 2, result_part + return result_part, (first[1] + second[1]) / 2 def filter_queryset(self, request, queryset, view): ret = super().filter_queryset(request, queryset, view) From 66fc2fae995d3dc5a61d69a1414c732261dd2609 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Thu, 5 Dec 2019 13:15:51 +0300 Subject: [PATCH 03/12] Revert "possible fix center calculation" This reverts commit ca80f7a --- apps/search_indexes/filters.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/search_indexes/filters.py b/apps/search_indexes/filters.py index cc2bb55a..644b47fd 100644 --- a/apps/search_indexes/filters.py +++ b/apps/search_indexes/filters.py @@ -13,24 +13,24 @@ class CustomGeoSpatialFilteringFilterBackend(GeoSpatialFilteringFilterBackend): @staticmethod def calculate_center(first, second): - if second[0] < 0 < first[0]: - reverse_first, reverse_second = 180 - abs(first[0]), 180 - abs(second[0]) + if second[1] < 0 < first[1]: + reverse_first, reverse_second = 180 - abs(first[1]), 180 - abs(second[1]) diff = (reverse_first + reverse_second) / 2 if reverse_first < reverse_second: - result_part = -180 + (180 + second[0] - diff) + result_part = -180 + (180 + second[1] - diff) else: - result_part = 180 - (180 - first[0] - diff) + result_part = 180 - (180 - first[1] - diff) - elif second[0] < 0 > first[0] or second[0] > 0 < first[0]: + elif second[1] < 0 > first[1] or second[1] > 0 < first[1]: reverse_first, reverse_second = 180 - abs(first[1]), 180 - abs(second[1]) result_part = ((reverse_first + reverse_second) / 2) * (-1 + (second[1] < 0) * 2) else: - result_part = (first[0] + second[0]) / 2 + result_part = (first[1] + second[1]) / 2 - return result_part, (first[1] + second[1]) / 2 + return (first[0] + second[0]) / 2, result_part def filter_queryset(self, request, queryset, view): ret = super().filter_queryset(request, queryset, view) From 3e7922e0fcae0a978979637f3194725f07bb0a68 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Thu, 5 Dec 2019 13:30:43 +0300 Subject: [PATCH 04/12] temp fix --- apps/search_indexes/filters.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/search_indexes/filters.py b/apps/search_indexes/filters.py index 644b47fd..3d55bdb4 100644 --- a/apps/search_indexes/filters.py +++ b/apps/search_indexes/filters.py @@ -30,7 +30,8 @@ class CustomGeoSpatialFilteringFilterBackend(GeoSpatialFilteringFilterBackend): else: result_part = (first[1] + second[1]) / 2 - return (first[0] + second[0]) / 2, result_part + # return (first[0] + second[0]) / 2, result_part + return (first[0] + second[0]) / 2, (first[1] + second[1]) / 2 def filter_queryset(self, request, queryset, view): ret = super().filter_queryset(request, queryset, view) From 3afb51d4728b9d760f31bdbd40c49899d03546a5 Mon Sep 17 00:00:00 2001 From: Anatoly Date: Thu, 5 Dec 2019 14:11:46 +0300 Subject: [PATCH 05/12] fix establishment admin page --- apps/establishment/admin.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/apps/establishment/admin.py b/apps/establishment/admin.py index 2c94676f..81301ddc 100644 --- a/apps/establishment/admin.py +++ b/apps/establishment/admin.py @@ -35,6 +35,7 @@ class ContactPhoneInline(admin.TabularInline): class GalleryImageInline(admin.TabularInline): """Gallery image inline admin.""" model = models.EstablishmentGallery + raw_id_fields = ['image', ] extra = 0 @@ -61,17 +62,20 @@ class ProductInline(admin.TabularInline): class CompanyInline(admin.TabularInline): model = models.Company + raw_id_fields = ['establishment', 'address'] extra = 0 class EstablishmentNote(admin.TabularInline): model = models.EstablishmentNote extra = 0 + raw_id_fields = ['user', ] -class PurchasedProduct(admin.TabularInline): +class PurchasedProductInline(admin.TabularInline): model = PurchasedProduct extra = 0 + raw_id_fields = ['product', ] @admin.register(models.Establishment) @@ -80,13 +84,12 @@ class EstablishmentAdmin(BaseModelAdminMixin, admin.ModelAdmin): list_display = ['id', '__str__', 'image_tag', ] search_fields = ['id', 'name', 'index_name', 'slug'] list_filter = ['public_mark', 'toque_number'] - inlines = [GalleryImageInline, CompanyInline, EstablishmentNote, - PurchasedProduct] - + inlines = [CompanyInline, EstablishmentNote, GalleryImageInline, + PurchasedProductInline, ] # inlines = [ # AwardInline, ContactPhoneInline, ContactEmailInline, # ReviewInline, CommentInline, ProductInline] - raw_id_fields = ('address',) + raw_id_fields = ('address', 'collections', 'tags', 'schedule') @admin.register(models.Position) From fe101f3cb062945340175eabefff2ba41f2a4225 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Thu, 5 Dec 2019 14:16:44 +0300 Subject: [PATCH 06/12] try another calc strategy (cherry picked from commit 9ab17f7) --- apps/search_indexes/filters.py | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/apps/search_indexes/filters.py b/apps/search_indexes/filters.py index 3d55bdb4..857d44d2 100644 --- a/apps/search_indexes/filters.py +++ b/apps/search_indexes/filters.py @@ -13,25 +13,13 @@ class CustomGeoSpatialFilteringFilterBackend(GeoSpatialFilteringFilterBackend): @staticmethod def calculate_center(first, second): - if second[1] < 0 < first[1]: - reverse_first, reverse_second = 180 - abs(first[1]), 180 - abs(second[1]) - diff = (reverse_first + reverse_second) / 2 - - if reverse_first < reverse_second: - result_part = -180 + (180 + second[1] - diff) - - else: - result_part = 180 - (180 - first[1] - diff) - - elif second[1] < 0 > first[1] or second[1] > 0 < first[1]: - reverse_first, reverse_second = 180 - abs(first[1]), 180 - abs(second[1]) - result_part = ((reverse_first + reverse_second) / 2) * (-1 + (second[1] < 0) * 2) - + if second[1] < first[1]: + res_longtitude = first[1] + (first[1] - second[1]) / 2 else: - result_part = (first[1] + second[1]) / 2 + res_longtitude = first[1] + (second[1] - first[1]) / 2 # return (first[0] + second[0]) / 2, result_part - return (first[0] + second[0]) / 2, (first[1] + second[1]) / 2 + return (first[0] + second[0]) / 2, res_longtitude def filter_queryset(self, request, queryset, view): ret = super().filter_queryset(request, queryset, view) From aa8304acaf4a9ebf2d5d3a9b3d65b959c344ef9c Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Thu, 5 Dec 2019 14:19:56 +0300 Subject: [PATCH 07/12] Revert "try another calc strategy" This reverts commit fe101f3 --- apps/search_indexes/filters.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/apps/search_indexes/filters.py b/apps/search_indexes/filters.py index 857d44d2..3d55bdb4 100644 --- a/apps/search_indexes/filters.py +++ b/apps/search_indexes/filters.py @@ -13,13 +13,25 @@ class CustomGeoSpatialFilteringFilterBackend(GeoSpatialFilteringFilterBackend): @staticmethod def calculate_center(first, second): - if second[1] < first[1]: - res_longtitude = first[1] + (first[1] - second[1]) / 2 + if second[1] < 0 < first[1]: + reverse_first, reverse_second = 180 - abs(first[1]), 180 - abs(second[1]) + diff = (reverse_first + reverse_second) / 2 + + if reverse_first < reverse_second: + result_part = -180 + (180 + second[1] - diff) + + else: + result_part = 180 - (180 - first[1] - diff) + + elif second[1] < 0 > first[1] or second[1] > 0 < first[1]: + reverse_first, reverse_second = 180 - abs(first[1]), 180 - abs(second[1]) + result_part = ((reverse_first + reverse_second) / 2) * (-1 + (second[1] < 0) * 2) + else: - res_longtitude = first[1] + (second[1] - first[1]) / 2 + result_part = (first[1] + second[1]) / 2 # return (first[0] + second[0]) / 2, result_part - return (first[0] + second[0]) / 2, res_longtitude + return (first[0] + second[0]) / 2, (first[1] + second[1]) / 2 def filter_queryset(self, request, queryset, view): ret = super().filter_queryset(request, queryset, view) From f9479dd7a61e0761e3d8ab5322c5c932a76372c0 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Thu, 5 Dec 2019 14:30:41 +0300 Subject: [PATCH 08/12] calc center again --- apps/search_indexes/filters.py | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/apps/search_indexes/filters.py b/apps/search_indexes/filters.py index 3d55bdb4..63f1dbb8 100644 --- a/apps/search_indexes/filters.py +++ b/apps/search_indexes/filters.py @@ -13,25 +13,13 @@ class CustomGeoSpatialFilteringFilterBackend(GeoSpatialFilteringFilterBackend): @staticmethod def calculate_center(first, second): - if second[1] < 0 < first[1]: - reverse_first, reverse_second = 180 - abs(first[1]), 180 - abs(second[1]) - diff = (reverse_first + reverse_second) / 2 - - if reverse_first < reverse_second: - result_part = -180 + (180 + second[1] - diff) - - else: - result_part = 180 - (180 - first[1] - diff) - - elif second[1] < 0 > first[1] or second[1] > 0 < first[1]: - reverse_first, reverse_second = 180 - abs(first[1]), 180 - abs(second[1]) - result_part = ((reverse_first + reverse_second) / 2) * (-1 + (second[1] < 0) * 2) - + if second[1] < first[1]: + res_longtitude = first[1] + (360 + abs(first[1]) - abs(second[1])) / 2 else: - result_part = (first[1] + second[1]) / 2 + res_longtitude = first[1] + (second[1] - first[1]) / 2 # return (first[0] + second[0]) / 2, result_part - return (first[0] + second[0]) / 2, (first[1] + second[1]) / 2 + return (first[0] + second[0]) / 2, res_longtitude def filter_queryset(self, request, queryset, view): ret = super().filter_queryset(request, queryset, view) From f06596b5b64cc6539ab5729ec4164cc5f17c7d31 Mon Sep 17 00:00:00 2001 From: Dmitriy Kuzmenko Date: Thu, 5 Dec 2019 15:23:16 +0300 Subject: [PATCH 09/12] fix review --- apps/review/transfer_data.py | 4 ---- apps/transfer/serializers/reviews.py | 7 +++---- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/apps/review/transfer_data.py b/apps/review/transfer_data.py index af70873e..20c5712d 100644 --- a/apps/review/transfer_data.py +++ b/apps/review/transfer_data.py @@ -115,12 +115,8 @@ def transfer_product_reviews(): products = Product.objects.filter( old_id__isnull=False).values_list('old_id', flat=True) - users = User.objects.filter( - old_id__isnull=False).values_list('old_id', flat=True) - queryset = Reviews.objects.filter( product_id__in=list(products), - reviewer_id__in=list(users), ).values('id', 'reviewer_id', 'aasm_state', 'created_at', 'product_id', 'mark', 'vintage') serialized_data = ProductReviewSerializer(data=list(queryset.values()), many=True) diff --git a/apps/transfer/serializers/reviews.py b/apps/transfer/serializers/reviews.py index 6e0db860..6d3f50b4 100644 --- a/apps/transfer/serializers/reviews.py +++ b/apps/transfer/serializers/reviews.py @@ -55,7 +55,7 @@ class ProductReviewSerializer(ReviewSerializer): product_id = serializers.IntegerField() created_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S') aasm_state = serializers.CharField(allow_null=True) - reviewer_id = serializers.IntegerField() + reviewer_id = serializers.IntegerField(allow_null=True) id = serializers.IntegerField() def validate(self, data): @@ -82,9 +82,8 @@ class ProductReviewSerializer(ReviewSerializer): @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 + if user: + return user @staticmethod def get_product(data): From 202f5715f3058a79f5e6f1be5881e83bb2587fbd Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Thu, 5 Dec 2019 17:12:43 +0300 Subject: [PATCH 10/12] remove `tag` category from detail --- apps/establishment/models.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/establishment/models.py b/apps/establishment/models.py index 2d5ba007..3cdef691 100644 --- a/apps/establishment/models.py +++ b/apps/establishment/models.py @@ -457,9 +457,7 @@ class Establishment(GalleryModelMixin, ProjectBaseMixin, URLImageMixin, def visible_tags(self): return super().visible_tags \ .exclude(category__index_name__in=['guide', 'collection', 'purchased_item', - 'business_tag', 'business_tags_de']) \ - .exclude(value__in=['rss', 'rss_selection']) \ - \ + 'business_tag', 'business_tags_de', 'tag']) # todo: recalculate toque_number def recalculate_toque_number(self): From 73c66c7357fb9845852f564e720e497ef85e3b32 Mon Sep 17 00:00:00 2001 From: Dmitriy Kuzmenko Date: Thu, 5 Dec 2019 17:19:38 +0300 Subject: [PATCH 11/12] add_publick_mark --- .../management/commands/add_public_mark.py | 25 +++++++++++++++++++ make_data_migration.sh | 1 + 2 files changed, 26 insertions(+) create mode 100644 apps/product/management/commands/add_public_mark.py diff --git a/apps/product/management/commands/add_public_mark.py b/apps/product/management/commands/add_public_mark.py new file mode 100644 index 00000000..b6bcc296 --- /dev/null +++ b/apps/product/management/commands/add_public_mark.py @@ -0,0 +1,25 @@ +from django.core.management.base import BaseCommand +from tqdm import tqdm + +from product.models import Product + + +class Command(BaseCommand): + help = """Add public_mark to product from reviews.""" + + def handle(self, *args, **kwarg): + update_products = [] + products = Product.objects.filter( + public_mark__isnull=True, + reviews__isnull=False).distinct() + + for product in tqdm(products): + review = product.reviews.published().filter( + mark__isnull=False).order_by('-published_at').first() + if review: + product.public_mark = review.mark + update_products.append(product) + + Product.objects.bulk_update(update_products, ['public_mark', ]) + self.stdout.write( + self.style.WARNING(f'Updated products: {len(update_products)}')) \ No newline at end of file diff --git a/make_data_migration.sh b/make_data_migration.sh index bed1afb7..70e27ccb 100755 --- a/make_data_migration.sh +++ b/make_data_migration.sh @@ -2,6 +2,7 @@ ./manage.py transfer -a ./manage.py transfer -d ./manage.py transfer -e +./manage.py upd_transportation ./manage.py transfer --fill_city_gallery ./manage.py transfer -l ./manage.py transfer --product From 5d76e8a02bce6c9a5acef222ebde496ee83f63af Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 6 Dec 2019 08:20:23 +0300 Subject: [PATCH 12/12] fix address command --- .../management/commands/fix_address.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 apps/location/management/commands/fix_address.py diff --git a/apps/location/management/commands/fix_address.py b/apps/location/management/commands/fix_address.py new file mode 100644 index 00000000..5fcdf1b9 --- /dev/null +++ b/apps/location/management/commands/fix_address.py @@ -0,0 +1,29 @@ +from django.core.management.base import BaseCommand +from tqdm import tqdm + +from location.models import Address +from transfer.models import Locations + + +class Command(BaseCommand): + help = """Fix address, clear number field and fill street_name_1 like in old db""" + + def handle(self, *args, **kwarg): + addresses = Address.objects.filter( + old_id__isnull=False + ).values_list('old_id', flat=True) + + old_addresses = Locations.objects.filter( + id__in=list(addresses) + ).values_list('id', 'address') + + update_address = [] + for idx, address in tqdm(old_addresses): + new_address = Address.objects.filter(old_id=idx).first() + if new_address: + new_address.number = 0 + new_address.street_name_1 = address + update_address.append(new_address) + + Address.objects.bulk_update(update_address, ['number', 'street_name_1']) + self.stdout.write(self.style.WARNING(f'Updated addresses: {len(update_address)}'))