Пример #1
0
    def create(self, request, *args, **kwargs):
        data = request.data

        table = Table.objects.get(number=data["table"])

        has_active_order = Order.objects.filter(status="IN_PROGRESS",
                                                table_id=getattr(table, "id"),
                                                is_deleted=0)

        if has_active_order.exists():
            return Response("There is already order on that table!",
                            status=status.HTTP_400_BAD_REQUEST)

        user = User.objects.first()

        new_order = Order.objects.create(table=table,
                                         status=data["status"],
                                         user=user,
                                         is_deleted=data["is_deleted"])

        new_order.save()

        for product in data["products"]:
            product_obj = Product.objects.get(name=product["product_name"])
            OrderProduct.objects.create(
                product_price_currency=getattr(product_obj, "price_currency"),
                product_price=getattr(product_obj, "price"),
                product_quantity=product["product_quantity"],
                order_id=getattr(new_order, "id"),
                product_id=getattr(product_obj, "id"))

        serializer = OrderModelSerializer(new_order)

        return Response(serializer.data, status=status.HTTP_200_OK)
Пример #2
0
    def make_order(self, request, *args, **kwargs):
        
        order = get_object_or_404(
            Order,
            id=kwargs['id'],
            user=self.user.id,
            store=self.store.id
        )

        # Assign Rider
        query_riders = Rider.objects.filter(is_active=True).filter(is_available=True)
        rider_available = query_riders.first()
        rider_id = rider_available.id
        rider_instance = Rider.objects.get(id=rider_id)

        # import pdb; pdb.set_trace()

        # Order: add Rider & ordered=True
        order.rider = rider_instance
        order.ordered = True
        # Rider stats
        rider_instance.orders_active += 1

        # Rider status
        if rider_instance.orders_active == 2:
            rider_instance.is_available = False

        # Saving instance in DB
        order.save()
        rider_instance.save()

        data = OrderModelSerializer(order).data

        return Response(data, status=status.HTTP_200_OK)
Пример #3
0
class ContactSummarySerializer(serializers.ModelSerializer):
    contact_persons = ContactPersonModelSerializer(read_only=True, many=True)
    orders = OrderModelSerializer(read_only=True, many=True)
    offers = OfferModelSerializer(read_only=True, many=True)
    deliveries = DeliveryModelSerializer(read_only=True, many=True)
    invoices = InvoiceModelSerializer(read_only=True, many=True)

    class Meta:
        model = Contact
        fields = '__all__'
Пример #4
0
    def orders(self, request, *args, **kwargs):
        '''Show orders assign to the Rider.'''
        # import pdb; pdb.set_trace()
        store = get_object_or_404(Store,
                                  store_slugname=kwargs['store_slugname'])
        orders_assigned = (store.order_set.all().filter(
            picked_up=False).filter(deliveried=False))
        n = len(orders_assigned)
        for i in range(n):
            data = OrderModelSerializer(orders_assigned[i]).data

        return Response(data, status=status.HTTP_200_OK)
Пример #5
0
    def orders(self, request, *args, **kwargs):
        '''Show orders assign to the Rider.'''
        rider = get_object_or_404(Rider, id=kwargs['slugname']) # Don't know why appears slugnmame in kwargs. There's no slugname in models even
        orders_assigned = (
            rider.order_set.all()
                .filter(picked_up=False)
                .filter(deliveried=False)
        ) 
        # import pdb; pdb.set_trace()
        n = len(orders_assigned)
        for i in range(n):
            data = OrderModelSerializer(orders_assigned[i]).data

        return Response(data, status=status.HTTP_200_OK)
Пример #6
0
class ContactShortSummarySerializer(serializers.ModelSerializer):
    contact_persons = serializers.StringRelatedField(many=True)
    delivery = DeliveryModelSerializer(many=True)
    invoices = InvoiceModelSerializer(many=True)
    offers = OfferModelSerializer(many=True)
    orders = OrderModelSerializer(many=True)

    class Meta:
        model = Contact
        fields = [
            'application_id', 'name_1', 'address', 'post_code',
            'contact_persons', 'delivery', 'invoices', 'offers', 'orders',
            'longitude', 'latitude'
        ]
Пример #7
0
    def get_active_order_by_table_id(self, request, *args, **kwargs):
        table_id = int(kwargs['table_id'])

        try:
            table = Table.objects.get(id=table_id)
        except Table.DoesNotExist:
            return Response("Table not found",
                            status=status.HTTP_404_NOT_FOUND)

        order = table.orders.filter(is_deleted=0, status="IN_PROGRESS").first()
        if not order:
            return Response("There is no order for that table",
                            status=status.HTTP_404_NOT_FOUND)

        serializer = OrderModelSerializer(order)

        return Response(serializer.data)
Пример #8
0
    def update(self, request, *args, **kwargs):

        instance = self.get_object()
        if getattr(instance, 'status').lower() == 'completed':
            return Response("Can't update completed order",
                            status=status.HTTP_400_BAD_REQUEST)
        data = request.data

        table = Table.objects.get(number=data["table"])

        has_active_order = Order.objects.filter(
            status="IN_PROGRESS",
            table_id=getattr(table, "id"),
            is_deleted=0,
        ).exclude(id=getattr(instance, 'id'))

        if has_active_order.exists():
            return Response("There is already order on that table!",
                            status=status.HTTP_400_BAD_REQUEST)

        user = User.objects.first()

        instance.table = table
        instance.status = data["status"]
        instance.user = user
        instance.is_deleted = data["is_deleted"]

        instance.save()

        OrderProduct.objects.filter(order_id=getattr(instance, 'id')).delete()

        for product in data["products"]:
            product_obj = Product.objects.get(name=product["product_name"])
            OrderProduct.objects.create(
                product_price_currency=getattr(product_obj, "price_currency"),
                product_price=getattr(product_obj, "price"),
                product_quantity=product["product_quantity"],
                order_id=getattr(instance, "id"),
                product_id=getattr(product_obj, "id"))

        serializer = OrderModelSerializer(instance)

        return Response(serializer.data)
Пример #9
0
    def create(self, request, *args, **kwargs):
        '''Create an order.'''

        request.data['user'] = self.user.id
        request.data['customer'] = self.user.customer.id
        request.data['store'] = self.store.id

        serializer = OrderModelSerializer(
            data=request.data
        )
        serializer.is_valid(raise_exception=True)
        serializer.save()

        return Response(serializer.data, status=status.HTTP_201_CREATED)