diff --git a/apps/collection/serializers/common.py b/apps/collection/serializers/common.py index 9d3e81e9..00303d75 100644 --- a/apps/collection/serializers/common.py +++ b/apps/collection/serializers/common.py @@ -184,7 +184,7 @@ class GuideElementBaseSerializer(serializers.ModelSerializer): city_name = serializers.CharField(source='city.name', allow_null=True) product_detail = ProductGuideElementSerializer(read_only=True, source='product') - parent = RecursiveField(required=False) + children = RecursiveField(required=False, many=True, source='get_children') class Meta: """Meta class.""" @@ -200,6 +200,6 @@ class GuideElementBaseSerializer(serializers.ModelSerializer): 'city_name', 'section_name', 'wine_color_section_name', - 'parent', + 'children', 'label_photo', ] diff --git a/apps/collection/views/back.py b/apps/collection/views/back.py index 4410b088..04b36138 100644 --- a/apps/collection/views/back.py +++ b/apps/collection/views/back.py @@ -116,5 +116,8 @@ class GuideElementListView(GuideElementBaseView, def get_queryset(self): """Overridden get_queryset method.""" guide = get_object_or_404(models.Guide.objects.all(), pk=self.kwargs.get('pk')) - return models.GuideElement.objects.get_root_node(guide) \ - .get_descendants() + node = models.GuideElement.objects.get_root_node(guide) + if node: + return node.get_children() + else: + return models.GuideElement.objects.none() diff --git a/apps/establishment/models.py b/apps/establishment/models.py index 8ad1663c..d0c86244 100644 --- a/apps/establishment/models.py +++ b/apps/establishment/models.py @@ -534,6 +534,9 @@ class Establishment(GalleryMixin, ProjectBaseMixin, URLImageMixin, def delete(self, using=None, keep_parents=False): """Overridden delete method""" + # TODO: If this does not contradict the plan, + # it is better to change it. + # Just add CASCADE to Company and Note in establishment fk field. # Delete all related companies self.companies.all().delete() # Delete all related notes @@ -553,6 +556,14 @@ class Establishment(GalleryMixin, ProjectBaseMixin, URLImageMixin, """Removes some tags from detail Establishment representation""" return self.visible_tags.exclude(category__index_name__in=['tag']) + def recalculate_public_mark(self): + fresh_review = self.reviews.published().order_by('-modified').first() + if fresh_review: + self.public_mark = fresh_review.mark + else: + self.public_mark = None + self.save() + def recalculate_toque_number(self): toque_number = 0 if self.address and self.public_mark: diff --git a/apps/establishment/tasks.py b/apps/establishment/tasks.py index 67572612..4197b65d 100644 --- a/apps/establishment/tasks.py +++ b/apps/establishment/tasks.py @@ -43,3 +43,10 @@ def update_establishment_indices(): else: qs = doc().get_indexing_queryset() doc().update(qs) + + +@shared_task +def recalculation_public_mark(establishment_id): + establishment = models.Establishment.objects.get(id=establishment_id) + establishment.recalculate_public_mark() + establishment.recalculate_toque_number() diff --git a/apps/review/apps.py b/apps/review/apps.py index 6440958c..2faca628 100644 --- a/apps/review/apps.py +++ b/apps/review/apps.py @@ -5,3 +5,6 @@ from django.utils.translation import gettext_lazy as _ class ReviewConfig(AppConfig): name = 'review' verbose_name = _('reviews') + + def ready(self): + import review.signals diff --git a/apps/review/signals.py b/apps/review/signals.py new file mode 100644 index 00000000..c905a178 --- /dev/null +++ b/apps/review/signals.py @@ -0,0 +1,14 @@ +from django.db.models.signals import post_save +from django.dispatch import receiver + +from review import models +from establishment import tasks +from establishment.models import Establishment + + +@receiver(post_save, sender=models.Review) +def create_order(sender, instance=None, created=False, **kwargs): + """Recalculation public mark for establishment.""" + if isinstance(instance.content_object, Establishment): + tasks.recalculation_public_mark.delay( + establishment_id=instance.content_object.id) diff --git a/docker-compose.yml b/docker-compose.yml index 12217d4e..7c360dff 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,6 +14,7 @@ services: - "5436:5432" volumes: - gm-db:/var/lib/postgresql/data/ + - .:/code elasticsearch: image: elasticsearch:7.3.1 diff --git a/project/settings/local.py b/project/settings/local.py index b101d78e..d9c7cab8 100644 --- a/project/settings/local.py +++ b/project/settings/local.py @@ -86,11 +86,11 @@ LOGGING = { 'py.warnings': { 'handlers': ['console'], }, - 'django.db.backends': { - 'handlers': ['console', ], - 'level': 'DEBUG', - 'propagate': False, - }, + # 'django.db.backends': { + # 'handlers': ['console', ], + # 'level': 'DEBUG', + # 'propagate': False, + # }, } }