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)
Esempio n. 2
0
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)
Esempio n. 3
0
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()
Esempio n. 6
0
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)