Exemplo n.º 1
0
def add(request, content_type_id, product_id, form_class=None):
    """Add a product to the cart
    POST data should include content_type_id, 
    """
    if request.method != 'POST':
        return HttpResponseNotAllowed(['POST'])
    else:
        ctype = get_object_or_404(ContentType, pk=content_type_id)
        product = get_object_or_404(ctype.model_class(), pk=product_id)
        
        if not form_class:
            form_class = helpers.get_add_form(product)
            
        form = form_class(request.POST, product=product)
        cart = helpers.get_cart()(request)

        if form.is_valid():
            form.add(request)
            notification = (messages.SUCCESS, 'Product was added to your cart. <a href="%s">View cart</a>' % (reverse(checkout)))
        else:
            notification = (messages.ERROR, 'Could not add product to cart. \r%s' % form_errors_as_notification(form))
        
        if request.is_ajax():
            data = {
                'notification': notification,
                'cart': cart.as_dict(),
                'checkout_url': reverse('cart.views.checkout'),
                'delivery_url': reverse('cart.views.delivery'),
            }
            if form.is_valid():
                data.update({
                    'success': True,
                    'cart': cart.as_dict(),
                    'product_pk': product.pk,
                    'product_name': product.name,
                    'product_quantity_added': form.get_quantity(),
                    'product_quantity': cart.get(product, form.get_options())['quantity'],
                    'total_quantity': cart.quantity(),
                })
                
            return HttpResponse(simplejson.dumps(data), mimetype='application/json')
        else:
            messages.add_message(request, *notification)

            if form.is_valid():
                return HttpResponseRedirect(request.POST.get('redirect_to', reverse(checkout)))
            else:
                return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse(checkout)))
Exemplo n.º 2
0
def add(request, form_class=AddToCartForm):
    """Add a product to the cart
    POST data should include content_type_id, 
    """
    if request.method != 'POST':
        return HttpResponseNotAllowed('GET not allowed; POST is required.')
    else:
        form = form_class(request.POST)
        cart = Cart(request)

        if form.is_valid():
            form.add(request)
            notification = (messages.SUCCESS, 'Product was added to your cart. <a href="%s">View cart</a>' % (reverse(checkout)))
        else:
            notification = (messages.ERROR, 'Could not add product to cart. %s' % form_errors_as_notification(form))
                    
        
        
        if request.is_ajax():
            data = {
                'notification': notification,
                'cart': cart.as_dict(),
                'checkout_url': reverse('cart.views.checkout'),
                'cart_url': reverse('cart.views.index'),
            }
            if form.is_valid():
                data.update({
                    'success': True,
                    'product_pk': form.get_product().pk,
                    'product_name': form.get_product().name,
                    'product_quantity_added': form.get_quantity(),
                    'product_quantity': cart.get(form.get_product(), form.get_options())['quantity'],
                })
                
            return HttpResponse(simplejson.dumps(data), mimetype='application/json')
        else:
            messages.add_message(request, *notification)

            if form.is_valid():
                return HttpResponseRedirect(request.POST.get('redirect_to', reverse(checkout)))
            else:
                return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse(checkout)))