コード例 #1
0
    def post(self, request, pk):

        product = request.data['product']

        request_cart = Cart(request)
        cart = Cart()

        if request.user.is_authenticated:
            cart.add_offer(product['pk'], group=request.user.marketing_group)
        else:
            cart.add_offer(product['pk'])

        data = {
            'customer': {
                'email': '',
                'phone': request.data.get('phone'),
                'name': '',
                'address': ''
            },
            'delivery': {
                'type': 'not_selected',
                'price': 0,
                'pvz_code': 'None',
                'pvz_service': 'None',
                'pvz_address': ''
            },
            'payment': {
                'type': 'not_selected',
            },
            'client_notes': '',
            'source': 3
        }

        cpa = request.data.get('cpa', None)

        if cpa is not None:
            data['cpa'] = cpa

        serializer = OrderCreateSerializer(data, request, cart=cart)

        try:
            serializer.validate()
        except ValidationError as e:
            return Response(status=status.HTTP_400_BAD_REQUEST,
                            data=e.messages)

        instance = serializer.save()

        code = request_cart.data['promocode']
        if code != '':
            serve_promocode.delay(code)

        data = {
            'cart': instance.cart,
            'uuid': instance.uuid,
            'public_id': instance.public_id
        }
        return Response(data)
コード例 #2
0
    def post(self, request):

        cart = Cart()
        product = request.data.get('product', None)
        if product is not None:
            cart.add_offer(product['pk'])

        data = {
            'customer': {
                'email': '',
                'phone': request.data.get('phone'),
                'name': '',
                'address': ''
            },
            'delivery': {
                'type': 'not_selected',
                'price': 0,
                'pvz_code': None,
                'pvz_service': None,
                'pvz_address': ''
            },
            'payment': {
                'type': 'not_selected',
            },
            'client_notes': 'Обратный звонок',
            'source': 3
        }

        serializer = OrderCreateSerializer(data, request, cart=cart)

        try:
            serializer.validate()
        except ValidationError as e:
            return Response(status=status.HTTP_400_BAD_REQUEST,
                            data=e.messages)

        instance = serializer.save()

        data = {
            'cart': instance.cart,
            'uuid': instance.uuid,
            'public_id': instance.public_id
        }
        return Response(data)
コード例 #3
0
ファイル: api.py プロジェクト: minidron/stationery
 def add_to_cart(self, request):
     """
     Добавляем товар в корзину.
     """
     serializer = ItemSSerializer(data=request.data)
     serializer.is_valid(raise_exception=True)
     item = dict(serializer.validated_data)
     cart = Cart(request)
     if cart.add_offer(**item) == -1:
         return Response({'error': 'limit'}, status=status.HTTP_200_OK)
     return Response(serializer.data, status=status.HTTP_200_OK)
コード例 #4
0
ファイル: api.py プロジェクト: minidron/stationery
 def update_cart(self, request):
     """
     Обновляем кол-во товара в корзине.
     """
     serializer = ItemSSerializer(data=request.data)
     serializer.is_valid(raise_exception=True)
     item = dict(serializer.validated_data)
     cart = Cart(request)
     if cart.add_offer(**item, update_quantity=True) == -1:
         return Response({'error': 'limit'}, status=status.HTTP_200_OK)
     return Response(serializer.data, status=status.HTTP_200_OK)
コード例 #5
0
ファイル: views.py プロジェクト: Hagen013/presidentwatches
class CartPageView(TemplateView):

    template_name = 'pages/cart.html'

    def get(self, request, *args, **kwargs):
        self.cart = Cart(request)
        auto_add = request.GET.get('auto_add', None)
        if auto_add is not None:
            try:
                auto_add = int(auto_add)
            except ValueError:
                auto_add = None
            if auto_add is not None:
                self.cart.add_offer(auto_add)
                return redirect('/cart/')
        return super(CartPageView, self).get(request, *args, **kwargs)

    @property
    def products(self):
        products = []
        items = self.cart.data['items']
        for key in items.keys():
            products.append({
                'price': items[key]['price'],
                'purchase_price': items[key]['price'],
                'vendor': items[key]['brand'],
                'product_type': 'CUBE'
            })
        return products

    def get_delivery_data(self, products):
        url = settings.GEO_LOCATION_SERVICE_URL + 'api/delivery/meny_products/'
        kladr = self.request.COOKIES.get('city_code',
                                         settings.DEFAULT_KLADR_CODE)
        data = {'kladr': kladr, 'products': self.products}
        try:
            response = requests.post(url, json=data)
            delivery_data = response.json()
            keys = delivery_data.keys()
        except:
            delivery_data = {}
        return delivery_data

    def get_context_data(self, *args, **kwargs):
        products = self.products
        context = super(CartPageView, self).get_context_data(*args, **kwargs)

        if (len(products)) == 0:
            self.template_name = 'pages/cart.empty.html'
        else:
            delivery_data = self.get_delivery_data(products)
            context['delivery_data'] = delivery_data
            context['products'] = json.dumps(products)
            context['rr_ids'] = ','.join(
                [str(item['pk']) for item in self.cart.items_list])

            curier_is_available = False
            if delivery_data['curier'] is not None:
                curier_is_available = True
                price = int(delivery_data['curier']['price'])
            else:
                price = 0

            delivery_points_is_available = False
            if delivery_data['delivery_point'] is not None:
                delivery_points_is_available = True

            context['delivery_price'] = price
            context['total_price'] = price + self.cart.data['total_price']
            context['curier_is_available'] = curier_is_available
            context[
                'delivery_points_is_available'] = delivery_points_is_available

        return context