def remove_from_cart(request): priced_product = get_product(request) if priced_product is None: return HttpResponseBadRequest('Wrong parameters') # Корзина cart, created = get_cart(request) try: cart_product = CartProducts.objects.get(cart=cart, priced_product=priced_product) except CartProducts.DoesNotExist: return HttpResponseBadRequest('Not in cart') cart_product.delete() cart_items = CartProducts.objects_detailed.filter(cart=cart) result = { 'html': render_to_string( 'cart/cart_form.html', { 'cart': cart, 'cart_items': cart_items, 'cart_summary': cart.get_cart_summary(), 'amount_template': 'cart/cart_amount.html' }) } return JsonResponse(result)
def get(self,request): sku_result = get_cart(request.user) serializer = CartSKUSerializer(sku_result, many=True) return Response(serializer.data)
def add_to_cart(request): priced_product = get_product(request) amount = get_amount(request) if None in [priced_product, amount]: return HttpResponseBadRequest('Wrong parameters') # Корзина cart, created = get_cart(request) result = {} # Проверим, нет заказывается ли больше, чем есть в наличии + есть в корзине if priced_product.product.stock_track != priced_product.product.STOCK_AVAILABLE: try: cart_amount = CartProducts.objects.get( cart=cart, priced_product=priced_product).amount except CartProducts.DoesNotExist: cart_amount = 0 if priced_product.stock_amount - cart_amount - amount < 0: # Заказывают больше, чем имеется result['error'] = 'Недостаточно товара для добавления в корзину' return JsonResponse(result) cart_products, created = CartProducts.objects.get_or_create( cart=cart, priced_product=priced_product, defaults={'amount': amount}) if not created: cart_products.amount += amount cart_products.save() result['html'] = render_to_string('cart/cart_add_popover.html', { 'amount': cart_products.amount, 'priced_product': priced_product }) return JsonResponse(result)
def checkout(request): cart, created = get_cart(request, False) cart_items = CartProducts.objects.filter(cart=cart). \ select_related('priced_product__product__unit') # Пустая корзина if not cart_items: return HttpResponseRedirect(reverse('cart:view')) user = get_user(request) if request.method == 'POST': checkout_form = CheckoutForm(cart, user, request.POST) if checkout_form.is_valid(): # Если отмечено register, зарегистрировать пользователя if checkout_form.cleaned_data['register']: user, password = register_user( request, checkout_form.cleaned_data['email']) send_registration_email(user, password) # Записать заказ в базу по корзине order = create_new_order(checkout_form) # Очистить корзину cart.delete() # Перенаправление на страницу с заказом # Там же возможна дальнейшая оплата return HttpResponseRedirect( reverse('orders:direct_view', args=[order.uid]) + '?new_order') else: return render( request, 'cart/checkout.html', { 'form': checkout_form, 'cart': cart, 'cart_items': cart_items, 'cart_summary': checkout_form.cart_summary }) if request.method == 'GET': initial = {} if initial_method: initial['shipment'] = initial_method.__name__ initial['payment'] = initial_method.initial_gateway checkout_form = CheckoutForm(cart, user, initial=initial) return render( request, 'cart/checkout.html', { 'form': checkout_form, 'cart': cart, 'cart_items': cart_items, 'cart_summary': checkout_form.cart_summary })
def remove_coupon(request): coupon = get_coupon(request) result = {} if coupon is None: result['error'] = 'Неверный код купона' return JsonResponse(result) cart, created = get_cart(request) coupon.carts.remove(cart) result['html'] = render_to_string('coupons/cart_coupons_form.html', {'cart_coupons': Coupon.objects.filter(carts=cart)}, context_instance=RequestContext(request)) return JsonResponse(result)
def view_cart(request): if request.method == 'POST': return HttpResponseRedirect(reverse('cart:checkout')) if request.method == 'GET': cart, created = get_cart(request, False) cart_items = CartProducts.objects_detailed.filter(cart=cart). \ select_related('priced_product__product__unit') return render( request, 'cart/cart.html', { 'cart': cart, 'cart_items': cart_items, 'cart_summary': cart.get_cart_summary() })
def remove_coupon(request): coupon = get_coupon(request) result = {} if coupon is None: result['error'] = 'Неверный код купона' return JsonResponse(result) cart, created = get_cart(request) coupon.carts.remove(cart) result['html'] = render_to_string( 'coupons/cart_coupons_form.html', {'cart_coupons': Coupon.objects.filter(carts=cart)}, context_instance=RequestContext(request)) return JsonResponse(result)
def update_checkout(request): cart, created = get_cart(request, False) user = get_user(request) # AJAX запрос на обновление формы checkout_form = CheckoutForm(cart, user, initial=request.POST) result = { 'html': render_to_string('cart/checkout_form.html', { 'form': checkout_form, 'cart': cart, 'cart_summary': checkout_form.cart_summary }, request=request) } return JsonResponse(result)
def update_cart(request): result = {} try: items = json.loads(request.POST['cart_items']) except (KeyError, ValueError): result['error'] = 'Неверные параметры' return JsonResponse(result) cart, created = get_cart(request) cart_items = [] for item in items: try: cart_product = CartProducts.objects_detailed. \ get(cart=cart, priced_product__id=item['product']) new_amount = int(item['amount']) if not new_amount == cart_product.stock_amount: # Количество товара не должно превысить количество на складе cart_product.amount = min(cart_product.stock_amount, new_amount) cart_product.save() cart_items.append(cart_product) except (CartProducts.DoesNotExist, KeyError, ValueError): result['error'] = 'Неверные параметры' return JsonResponse(result) result['html'] = render_to_string( 'cart/cart_form.html', { 'cart': cart, 'cart_items': cart_items, 'cart_summary': cart.get_cart_summary(), 'amount_template': 'cart/cart_amount.html' }) return JsonResponse(result)
def get_cart_summary(request): cart, created = get_cart(request, False) result = { 'html': render_to_string('cart/cart_widget.html', {'user_cart': cart}) } return JsonResponse(result)
def user_cart(request): cart, created = get_cart(request, False) return {'user_cart': cart}