class TableViewSet(viewsets.ReadOnlyModelViewSet): queryset = Table.objects.all() serializer_class = TableSerializer @method_decorator(permission_scope(['Admin'])) def list(self, request, *args, **kwargs): page = self.paginate_queryset(self.queryset) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) @method_decorator(permission_scope(['Admin'])) def retrieve(self, request, pk=None, **kwargs): table = get_object_or_404(self.queryset, pk=pk) serializer = TableSerializer(table) return Response(serializer.data)
class ImageViewSet(viewsets.ModelViewSet): queryset = Image.objects.all() serializer_class = ImageSerializer parser_classes = (MultiPartParser, FormParser) @method_decorator(permission_scope(['Admin'])) def list(self, request, **kwargs): page = self.paginate_queryset(self.queryset) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) @method_decorator(permission_scope(['Admin'])) def create(self, request, **kwargs): serializer = ImageSerializer(data=request.data) image = request.data['image'] if validate_size_of_image(image): return Response(status=status.HTTP_400_BAD_REQUEST) if validate_format_of_image(image): return Response(status=status.HTTP_400_BAD_REQUEST) serializer.is_valid(raise_exception=True) serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) @method_decorator(permission_scope(['Admin'])) def retrieve(self, request, pk=None, **kwargs): image = get_object_or_404(self.queryset, pk=pk) serializer = ImageSerializer(image) return Response(serializer.data) @method_decorator(permission_scope(['Admin'])) def update(self, request, pk=None, **kwargs): image = get_object_or_404(self.queryset, pk=pk) serializer = ImageSerializer(instance=image, data=request.data, partial=False) serializer.is_valid(raise_exception=True) serializer.save() return Response(status=status.HTTP_200_OK) @method_decorator(permission_scope(['Admin'])) def partial_update(self, request, pk=None, **kwargs): image = get_object_or_404(self.queryset, pk=pk) serializer = ImageSerializer(instance=image, data=request.data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() return Response(status=status.HTTP_200_OK) @method_decorator(permission_scope(['Admin'])) def destroy(self, request, pk=None, **kwargs): product = get_object_or_404(self.queryset, pk=pk) product.delete() return Response(status=status.HTTP_204_NO_CONTENT)
class ProductViewSet(viewsets.ModelViewSet): queryset = Product.objects.all() serializer_class = ProductSerializer filter_backends = (filters.OrderingFilter, filters.SearchFilter) ordering_fields = ('name', 'category__name') search_fields = ('name', 'category__id') @method_decorator(permission_scope(['Admin'])) def list(self, request, **kwargs): queryset = self.filter_queryset(self.get_queryset()) page = self.paginate_queryset(queryset) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) @method_decorator(permission_scope(['Admin'])) def create(self, request, **kwargs): data = request.data serializer = ProductSerializer(data=data) serializer.is_valid(raise_exception=True) serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) @method_decorator(permission_scope(['Admin'])) def retrieve(self, request, pk=None, **kwargs): product = get_object_or_404(self.queryset, pk=pk) serializer = ProductSerializer(product) return Response(serializer.data) @method_decorator(permission_scope(['Admin'])) def update(self, request, pk=None, **kwargs): product = get_object_or_404(self.queryset, pk=pk) serializer = ProductSerializer(instance=product, data=request.data, partial=False) serializer.is_valid(raise_exception=True) serializer.save() return Response(status=status.HTTP_200_OK) @method_decorator(permission_scope(['Admin'])) def partial_update(self, request, pk=None, **kwargs): product = get_object_or_404(self.queryset, pk=pk) serializer = ProductSerializer(instance=product, data=request.data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() return Response(status=status.HTTP_200_OK) @method_decorator(permission_scope(['Admin'])) def destroy(self, request, pk=None, **kwargs): product = get_object_or_404(self.queryset, pk=pk) product.delete() return Response(status=status.HTTP_204_NO_CONTENT)
class OrdersProductsViewSet(viewsets.ModelViewSet): queryset = OrdersProducts.objects.filter(order__is_deleted=0) serializer_class = OrdersProductsSerializer @method_decorator(permission_scope(['Admin', 'Bartender', 'Waiter'])) def list(self, request, **kwargs): print(request.data) page = self.paginate_queryset(self.queryset) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) @method_decorator(permission_scope(['Admin', 'Bartender', 'Waiter'])) def retrieve(self, request, pk=None, **kwargs): order_product = get_object_or_404(self.queryset, pk=pk) serializer = OrdersProductsSerializer(order_product) return Response(serializer.data, status=status.HTTP_200_OK) @method_decorator(permission_scope(['Admin', 'Waiter'])) def create(self, request, **kwargs): data = request.data serializer = OrdersProductsSerializer(data=data) serializer.is_valid(raise_exception=True) serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) @method_decorator(permission_scope(['Admin', 'Waiter'])) def update(self, request, pk=None, **kwargs): order_product = get_object_or_404(self.queryset, pk=pk) serializer = OrdersProductsSerializer(instance=order_product, data=request.data, partial=False) serializer.is_valid(raise_exception=True) serializer.save() return Response(status=status.HTTP_200_OK) @method_decorator(permission_scope(['Admin', 'Waiter'])) def partial_update(self, request, pk=None, **kwargs): order_product = get_object_or_404(self.queryset, pk=pk) serializer = OrdersProductsSerializer(instance=order_product, data=request.data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() return Response(status=status.HTTP_200_OK) @method_decorator(permission_scope(['Admin', 'Waiter'])) def destroy(self, request, pk=None, **kwargs): order_product = get_object_or_404(self.queryset, pk=pk) token = get_decoded_token(request) request_user_id = get_user_id(decoded_token=token) if request_user_id != order_product.order.user.username and get_user_role( token) == 'Waiter': return Response(status=status.HTTP_400_BAD_REQUEST) order_product.delete() return Response(status=status.HTTP_204_NO_CONTENT)
class OrderViewSet(viewsets.ModelViewSet): queryset = Order.objects.filter(is_deleted=0) serializer_class = OrderSerializer filter_backends = ( filters.OrderingFilter, filters.SearchFilter, ) ordering_fields = ('status', 'table__id', 'user__id') search_fields = ('status', 'table__id', 'user__id') @method_decorator(permission_scope(['Admin', 'Bartender', 'Waiter'])) def list(self, request, **kwargs): queryset = self.filter_queryset(self.get_queryset()) page = self.paginate_queryset(queryset) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) @method_decorator(permission_scope(['Admin', 'Bartender', 'Waiter'])) def retrieve(self, request, pk=None, **kwargs): order = get_object_or_404(self.queryset, pk=pk) serializer = OrderSerializer(order) return Response(serializer.data) @method_decorator(permission_scope(['Admin', 'Bartender', 'Waiter'])) def create(self, request, **kwargs): data = request.data table_key = data.get('table') queryset = Order.objects.filter(table=table_key, status='In progress').first() if queryset is not None: return Response(status=status.HTTP_400_BAD_REQUEST) serializer = OrderSerializer(data=data) serializer.is_valid(raise_exception=True) serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) @method_decorator(permission_scope(['Admin', 'Bartender', 'Waiter'])) def update(self, request, pk=None, **kwargs): order = self.__get_active_order(pk) if order is None: return Response(status=status.HTTP_400_BAD_REQUEST) serializer = OrderSerializer(instance=order, data=request.data, partial=False) serializer.is_valid(raise_exception=True) serializer.save() return Response(status=status.HTTP_200_OK) @method_decorator(permission_scope(['Admin', 'Bartender', 'Waiter'])) def partial_update(self, request, pk=None, **kwargs): order = self.__get_active_order(pk) if order is None: return Response(status=status.HTTP_400_BAD_REQUEST) serializer = OrderSerializer(instance=order, data=request.data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() return Response(status=status.HTTP_200_OK) @method_decorator(permission_scope(['Admin'])) def destroy(self, request, pk=None, **kwargs): order = Order.objects.filter(pk=pk) order.delete() return Response(status=status.HTTP_204_NO_CONTENT) def __get_active_order(self, pk): return Order.objects.filter(pk=pk, status='In progress').first()
class CategoryViewSet(viewsets.ModelViewSet): queryset = Category.objects.all() serializer_class = CategorySerializer @method_decorator(permission_scope(['Admin'])) def list(self, request, **kwargs): page = self.paginate_queryset(self.queryset) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) @method_decorator(permission_scope(['Admin'])) def retrieve(self, request, pk=None, **kwargs): category = get_object_or_404(self.queryset, pk=pk) serializer = CategorySerializer(category) return Response(serializer.data, status=status.HTTP_200_OK) @method_decorator(permission_scope(['Admin'])) def create(self, request, **kwargs): data = request.data serializer = CategorySerializer(data=data) serializer.is_valid(raise_exception=True) serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) @method_decorator(permission_scope(['Admin'])) def update(self, request, pk=None, **kwargs): category = get_object_or_404(self.queryset, pk=pk) serializer = CategorySerializer(instance=category, data=request.data, partial=False) serializer.is_valid(raise_exception=True) serializer.save() return Response(status=status.HTTP_200_OK) @method_decorator(permission_scope(['Admin'])) def partial_update(self, request, pk=None, **kwargs): category = get_object_or_404(self.queryset, pk=pk) serializer = CategorySerializer(instance=category, data=request.data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() return Response(status=status.HTTP_200_OK) @method_decorator(permission_scope(['Admin'])) def destroy(self, request, pk=None, **kwargs): category = get_object_or_404(self.queryset, pk=pk) products = Product.objects.filter(category=pk).first() if products is not None: return Response(status=status.HTTP_400_BAD_REQUEST) category.delete() return Response(status=status.HTTP_204_NO_CONTENT)