dish update-delete

This commit is contained in:
Kuroshini 2020-02-01 16:01:40 +03:00
parent 662a1427cd
commit 287c538294
3 changed files with 57 additions and 31 deletions

View File

@ -847,7 +847,10 @@ class CardAndWinesPlatesSerializer(serializers.ModelSerializer):
establishment = get_object_or_404(models.Establishment, pk=self.context['view'].kwargs['establishment_id'])
menu_type = validated_data.pop('menu')['type']
if menu_type not in models.Menu.VALID_CARD_AND_WINES_CHOICES:
raise serializers.ValidationError({'detail': f'incorrect type: {menu_type}'})
raise serializers.ValidationError({
'detail':
f'Incorrect type: {menu_type}. Valid types: [{", ".join(models.Menu.VALID_CARD_AND_WINES_CHOICES)}]'
})
menu_to_bind = establishment.menu_set.filter(type=menu_type).first()
if menu_to_bind is None:
menu_to_bind = models.Menu.objects.create(type=menu_type, category={'en-GB': menu_type},
@ -855,6 +858,22 @@ class CardAndWinesPlatesSerializer(serializers.ModelSerializer):
validated_data.update({'menu': menu_to_bind})
return super().create(validated_data)
def update(self, instance, validated_data):
menu_type = validated_data.pop('menu')['type']
if menu_type not in models.Menu.VALID_CARD_AND_WINES_CHOICES:
raise serializers.ValidationError({
'detail':
f'Incorrect type: {menu_type}. Valid types: [{", ".join(models.Menu.VALID_CARD_AND_WINES_CHOICES)}]'
})
if instance.menu.type != menu_type: # type changed
establishment = instance.menu.establishment
menu_to_bind = establishment.menu_set.filter(type=menu_type).first()
if menu_to_bind is None:
menu_to_bind = models.Menu.objects.create(type=menu_type, category={'en-GB': menu_type},
establishment=establishment)
validated_data.update({'menu': menu_to_bind})
return super().update(instance, validated_data)
class CardAndWinesSerializer(serializers.ModelSerializer):
"""View to show menus(not formulas) with dishes for certain establishment"""

View File

@ -41,6 +41,7 @@ urlpatterns = [
path('card_and_wines/<int:establishment_id>/', views.CardAndWinesListView.as_view(), name='card-and-wines-get'),
path('menus/<int:pk>/', views.MenuRUDView.as_view(), name='menu-rud'),
path('menus/dish/<int:establishment_id>/', views.DishCreateView.as_view(), name='create-dish'),
path('menus/dish/change/<int:dish_id>/', views.DishUpdateDeleteView.as_view(), name='update-delete-dish'),
path('menus/wine/<int:establishment_id>/', views.EstablishmentWineView.as_view(), name='menu-wine'),
path('menus/uploads/<int:pk>', views.MenuUploadsRUDView.as_view(), name='menu-uploads-rud'),
path('menus/uploads/', views.MenuUploadsCreateView.as_view(), name='menu-uploads-create'),

View File

@ -158,14 +158,12 @@ class EstablishmentScheduleCreateView(generics.CreateAPIView):
class CardAndWinesListView(generics.RetrieveAPIView):
# permission_classes = get_permission_classes(
# IsEstablishmentManager,
# IsEstablishmentAdministrator,
# )
permission_classes = get_permission_classes(
IsEstablishmentManager,
IsEstablishmentAdministrator,
)
serializer_class = serializers.CardAndWinesSerializer
queryset = models.Establishment.objects.with_base_related()
from rest_framework.permissions import AllowAny
permission_classes = (AllowAny, )
def get_object(self):
establishment = models.Establishment.objects.prefetch_plates()\
@ -184,12 +182,10 @@ class MenuListCreateView(generics.ListCreateAPIView):
"""Menu list create view. This view works only with menu formulas type"""
serializer_class = serializers.MenuBackOfficeSerializer
queryset = models.Menu.objects.with_base_related().by_type(menu_type=models.Menu.FORMULAS)
# permission_classes = get_permission_classes(
# IsEstablishmentManager,
# IsEstablishmentAdministrator,
# )
from rest_framework.permissions import AllowAny
permission_classes = (AllowAny, )
permission_classes = get_permission_classes(
IsEstablishmentManager,
IsEstablishmentAdministrator,
)
filter_backends = (DjangoFilterBackend,)
filterset_fields = (
@ -247,12 +243,10 @@ class EstablishmentWineView(generics.CreateAPIView):
serializer_class = serializers.EstablishmentBackOfficeWineSerializer
queryset = models.EstablishmentBackOfficeWine.objects.all()
# permission_classes = get_permission_classes(
# IsEstablishmentManager,
# IsEstablishmentAdministrator,
# )
from rest_framework.permissions import AllowAny
permission_classes = (AllowAny, )
permission_classes = get_permission_classes(
IsEstablishmentManager,
IsEstablishmentAdministrator,
)
def create(self, request, *args, **kwargs):
data = request.data.copy()
@ -274,24 +268,36 @@ class DishCreateView(generics.CreateAPIView):
"""View for creating and binding dish to establishment"""
serializer_class = serializers.CardAndWinesPlatesSerializer
queryset = models.Plate.objects.all()
# permission_classes = get_permission_classes(
# IsEstablishmentManager,
# IsEstablishmentAdministrator,
# )
from rest_framework.permissions import AllowAny
permission_classes = (AllowAny, )
permission_classes = get_permission_classes(
IsEstablishmentManager,
IsEstablishmentAdministrator,
)
class DishUpdateDeleteView(generics.UpdateAPIView, generics.DestroyAPIView):
serializer_class = serializers.CardAndWinesPlatesSerializer
queryset = models.Plate.objects.all()
permission_classes = get_permission_classes(
IsEstablishmentManager,
IsEstablishmentAdministrator,
)
def get_object(self):
return get_object_or_404(models.Plate, pk=self.kwargs['dish_id'])
def update(self, request, *args, **kwargs):
with transaction.atomic():
return super().update(request, *args, **kwargs)
class MenuUploadsCreateView(generics.CreateAPIView):
"""Menu uploads list view"""
serializer_class = serializers.MenuFilesSerializers
queryset = models.MenuFiles.objects.all()
# permission_classes = get_permission_classes(
# IsEstablishmentManager,
# IsEstablishmentAdministrator,
# )
from rest_framework.permissions import AllowAny
permission_classes = (AllowAny, )
permission_classes = get_permission_classes(
IsEstablishmentManager,
IsEstablishmentAdministrator,
)
class SocialChoiceListCreateView(generics.ListCreateAPIView):