Added rud finding

This commit is contained in:
dormantman 2020-01-29 18:19:28 +03:00
parent a6db15ed50
commit 19cf1b07d6
5 changed files with 67 additions and 13 deletions

View File

@ -733,7 +733,7 @@ class Establishment(GalleryMixin, ProjectBaseMixin, URLImageMixin,
now_at_est_tz = datetime.now(tz=self.tz)
current_week = now_at_est_tz.weekday()
schedule_for_today = self.schedule.filter(weekday=current_week).first()
if schedule_for_today is None or schedule_for_today.opening_time is None or schedule_for_today.ending_time is\
if schedule_for_today is None or schedule_for_today.opening_time is None or schedule_for_today.ending_time is \
None:
return False
time_at_est_tz = now_at_est_tz.time()
@ -747,9 +747,9 @@ class Establishment(GalleryMixin, ProjectBaseMixin, URLImageMixin,
@property
def tags_indexing(self):
return [{
'id': tag.metadata.id,
'label': tag.metadata.label
} for tag in self.tags.all()]
'id': tag.metadata.id,
'label': tag.metadata.label
} for tag in self.tags.all()]
@property
def last_published_review(self):
@ -1286,6 +1286,9 @@ class MenuQuerySet(models.QuerySet):
"""Search by category."""
return self.filter(category__icontains=value)
def with_dishes(self):
return self.filter(~Q(dishes=None))
class Menu(TranslatedFieldsMixin, BaseAttributes):
"""Menu model."""

View File

@ -7,7 +7,7 @@ from rest_framework import serializers
from account.serializers.common import UserShortSerializer
from establishment import models, serializers as model_serializers
from establishment.models import ContactPhone, EstablishmentEmployee, ContactEmail
from establishment.models import ContactEmail, ContactPhone, EstablishmentEmployee
from establishment.serializers import MenuDishSerializer
from gallery.models import Image
from location.models import Address
@ -599,6 +599,30 @@ class MenuDishesSerializer(ProjectModelSerializer):
]
class MenuDishesCreateSerializer(ProjectModelSerializer):
"""Menu dishes create serializer"""
menu_id = serializers.IntegerField(write_only=True)
class Meta:
model = models.MenuDish
fields = [
'id',
'name',
'category',
'price',
'signature',
'menu_id'
]
def create(self, validated_data):
menu_id = validated_data.pop('menu_id')
menu = get_object_or_404(models.Menu, pk=menu_id)
instance = models.MenuDish.objects.create(**validated_data)
menu.dishes.add(instance)
return instance
class MenuDishesRUDSerializers(ProjectModelSerializer):
"""for dessert, main_course and starter category"""
@ -614,4 +638,3 @@ class MenuDishesRUDSerializers(ProjectModelSerializer):
'establishment_slug',
'dishes',
]

View File

@ -79,7 +79,6 @@ class MenuDishSerializer(ProjectModelSerializer):
'id',
'name',
'category',
'category_translated',
'price',
'signature'
]

View File

@ -31,7 +31,9 @@ urlpatterns = [
path('slug/<slug:slug>/admin/', views.EstablishmentAdminView.as_view(),
name='establishment-admin-list'),
path('menus/dishes/', views.MenuDishesListView.as_view(), name='menu-dishes-list'),
path('menus/dishes/create/', views.MenuDishesCreateView.as_view(), name='menu-dishes-create'),
path('menus/dishes/<int:pk>/', views.MenuDishesRUDView.as_view(), name='menu-dishes-rud'),
path('menus/dishes/slug/<slug:slug>/', views.MenuDishesRUDView.as_view(), name='menu-dishes-rud'),
path('menus/', views.MenuListCreateView.as_view(), name='menu-list'),
path('menus/<int:pk>/', views.MenuRUDView.as_view(), name='menu-rud'),
path('menus/slug/<slug:slug>/', views.MenuRUDView.as_view(), name='menu-rud'),

View File

@ -1,5 +1,6 @@
"""Establishment app views."""
from django.db.models.query_utils import Q
from django.http import Http404
from django.shortcuts import get_object_or_404
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import generics, permissions
@ -14,6 +15,20 @@ from utils.permissions import IsCountryAdmin, IsEstablishmentManager, IsWineryRe
from utils.views import CreateDestroyGalleryViewMixin
class MenuRUDMixinViews:
"""Menu mixin"""
def get_object(self):
instance = self.get_queryset().filter(
Q(establishment__slug=self.kwargs.get('slug')) | Q(establishment__id=self.kwargs.get('pk'))
).first()
if instance is None:
raise Http404
return instance
class EstablishmentMixinViews:
"""Establishment mixin."""
@ -121,7 +136,7 @@ class MenuListCreateView(generics.ListCreateAPIView):
permission_classes = [IsWineryReviewer | IsEstablishmentManager]
filter_backends = (DjangoFilterBackend,)
filterset_fields = (
'establishment',
'establishment__id',
'establishment__slug',
)
@ -129,8 +144,10 @@ class MenuListCreateView(generics.ListCreateAPIView):
return super().get_queryset().prefetch_related('establishment')
class MenuRUDView(generics.RetrieveUpdateDestroyAPIView):
class MenuRUDView(MenuRUDMixinViews, generics.RetrieveUpdateDestroyAPIView):
"""Menu RUD view."""
lookup_field = None
serializer_class = serializers.MenuRUDSerializers
queryset = models.Menu.objects.all()
permission_classes = [IsWineryReviewer | IsEstablishmentManager]
@ -469,13 +486,23 @@ class EstablishmentAdminView(generics.ListAPIView):
class MenuDishesListView(generics.ListAPIView):
"""Menu (dessert, main_course, starter) list create view."""
serializer_class = serializers.MenuDishesSerializer
queryset = models.Menu.objects.all()
queryset = models.Menu.objects.with_dishes()
permission_classes = [IsWineryReviewer | IsEstablishmentManager]
filter_class = filters.MenuDishesBackFilter
class MenuDishesRUDView(generics.RetrieveUpdateDestroyAPIView):
class MenuDishesRUDView(MenuRUDMixinViews, generics.RetrieveUpdateDestroyAPIView):
"""Menu (dessert, main_course, starter) RUD view."""
lookup_field = None
serializer_class = serializers.MenuDishesRUDSerializers
queryset = models.Menu.objects.all()
queryset = models.Menu.objects.with_dishes()
permission_classes = [IsWineryReviewer | IsEstablishmentManager]
class MenuDishesCreateView(generics.CreateAPIView):
"""Menu (dessert, main_course, starter) list create view."""
serializer_class = serializers.MenuDishesCreateSerializer
queryset = models.MenuDish.objects.all()
permission_classes = [IsWineryReviewer | IsEstablishmentManager]
filter_class = filters.MenuDishesBackFilter