Пример #1
0
    def create(self, request):
        """
        Add an item to the basket
        """
        variant_id = request.data.get("variant_id", None)

        if variant_id is not None:
            variant = ProductVariant.objects.get(id=variant_id)

            quantity = int(request.data.get("quantity", 1))
            items, bid = utils.get_basket_items(request)

            # Check if the variant is already in the basket
            in_basket = False
            for item in items:
                if item.variant.id == variant.id:
                    item.increase_quantity(quantity)
                    in_basket = True
                    break
            if not in_basket:
                item = BasketItem(variant=variant,
                                  quantity=quantity,
                                  basket_id=bid)
                item.save()

            serializer = BasketItemSerializer(self.get_queryset(request),
                                              many=True)
            response = Response(data=serializer.data,
                                status=status.HTTP_201_CREATED)

        else:
            response = Response({"message": "Missing 'variant_id'"},
                                status=status.HTTP_400_BAD_REQUEST)

        return response
Пример #2
0
    def get_rates_cache_key(self, **kwargs):
        from longclaw.basket.serializers import BasketItemSerializer

        settings = kwargs['settings']
        origin = settings.shipping_origin
        destination = kwargs['destination']
        basket_id = kwargs['basket_id']

        items = BasketItem.objects.filter(basket_id=basket_id)
        serialized_items = BasketItemSerializer(items, many=True)

        serialized_origin = AddressSerializer(origin) or None
        serialized_destination = AddressSerializer(destination) or None

        data = {
            "items": serialized_items.data,
            "origin": serialized_origin.data,
            "destination": serialized_destination.data,
        }

        raw_key = json.dumps(
            data,
            sort_keys=True,
            indent=4,
            separators=(',', ': '),
            cls=DjangoJSONEncoder,
        )

        hashed_key = hashlib.sha1(force_bytes(raw_key)).hexdigest()

        return force_text(hashed_key)
Пример #3
0
    def bulk_update(self, request):
        """Put multiple items in the basket,
        removing anything that already exists
        """
        # Delete everything in the basket
        bid = utils.destroy_basket(request)

        for item_data in request.data:
            item = BasketItem(basket_id=bid, **item_data)
            item.save()

        serializer = BasketItemSerializer(self.get_queryset(request),
                                          many=True)
        response = Response(data=serializer.data, status=status.HTTP_200_OK)
        return response
Пример #4
0
    def destroy(self, request, variant_id=None):
        """
        Remove an item from the basket
        """
        variant = ProductVariant.objects.get(id=variant_id)
        quantity = int(request.data.get("quantity", 1))
        try:
            item = BasketItem.objects.get(basket_id=utils.basket_id(request),
                                          variant=variant)
            item.decrease_quantity(quantity)
        except BasketItem.DoesNotExist:
            pass

        serializer = BasketItemSerializer(self.get_queryset(request),
                                          many=True)
        return Response(data=serializer.data, status=status.HTTP_200_OK)