dish update-delete
This commit is contained in:
parent
662a1427cd
commit
287c538294
|
|
@ -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"""
|
||||
|
|
|
|||
|
|
@ -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'),
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user