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)
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)
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)
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)
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