def cart_set_quantity(request, product_id, success_url='/store/cart'): if not request.method == 'POST': return HttpResponseRedirect(success_url) try: quantity = int(request.POST.get('quantity')) except ValueError: return HttpResponseRedirect(success_url) product_id = int(product_id) with cart(request) as session_cart: try: items_in_stock = session_cart[product_id].product.stock if quantity < 0: return HttpResponseRedirect(success_url) elif quantity == 0 or items_in_stock == 0: del session_cart[product_id] else: if quantity >= items_in_stock: session_cart[product_id]['quantity'] = items_in_stock else: session_cart[product_id]['quantity'] = quantity except AttributeError: if quantity < 0: return HttpResponseRedirect(success_url) elif quantity == 0: del session_cart[product_id] else: session_cart[product_id]['quantity'] = quantity return HttpResponseRedirect(success_url)
def product_add(request, slug=''): try: product = ProductModel.objects.get(slug=slug) except ProductModel.DoesNotExist: return HttpResponse('That product does not exist.') with cart(request) as session_cart: session_cart.add_product(product.id, 1) if request.is_ajax(): with cart(request) as session_cart: return HttpResponse(str(session_cart.get_product_count())) url = request.META.get('HTTP_REFERER', None) if url is None: url = reverse('store_product_list') return HttpResponseRedirect(url)
def product_remove(request, slug=''): try: product = ProductModel.objects.get(slug=slug) except ProductModel.DoesNotExist: return HttpResponse('That product does not exist.') with cart(request) as session_cart: try: session_cart.remove_product(product.id) except KeyError: return HttpResponse('Does not have one of those!') return HttpResponseRedirect(reverse('store_cart'))
def paypal_purchase(request, template_name='paypal/payment.html'): try: shipping_choice = ShippingMethodRegions.objects.get(pk=request.session['shipping_choice']) except KeyError: request.user.message_set.create(message=_(u'%s you haven\'t chosen a shipping method.') % (request.user.username,)) return HttpResponseRedirect(reverse('store_checkout')) customer = request.user.customer with cart(request) as session_cart: order_total = session_cart.get_price() + shipping_choice.cost current_site = Site.objects.get(id=settings.SITE_ID) paypal_dict = { 'business': settings.PAYPAL_RECEIVER_EMAIL, 'amount': order_total, 'item_name': '%s %s.' % (current_site.name, _('order')), #'invoice': 'unique-invoice-id', 'notify_url': 'http://79.107.108.6:8000/store/ppp/', 'return_url': 'http://79.107.108.6:8000/store/ppp/', 'cancel_return': 'http://www.example.com/your-cancel-location/', 'no_shipping': MyPayPalForm.SHIPPING_CHOICES[1][0], 'address_override': 1, 'first_name': customer.user.first_name, 'last_name': customer.user.last_name, 'address1': customer.address, 'city': customer.city, 'postal_code': customer.postal_code, 'country': customer.country, 'email': customer.user.email, } if request.session['currency']: paypal_dict['currency_code'] = request.session['currency'].code #form = PayPalPaymentsForm(initial=paypal_dict) form = MyPayPalForm(initial=paypal_dict) return render_to_response(template_name, {'form': form}, context_instance=RequestContext(request))
def checkout(request, template_name='checkout.html'): if not request.user.is_authenticated(): request.session['checkout'] = 'True' return HttpResponseRedirect(reverse('customer-register')) customer = request.user.customer with cart(request) as session_cart: order_total = session_cart.get_price() if not customer.country.shippingregion_set.all(): return HttpResponseRedirect(reverse('store_unshippable')) if request.method == 'POST': # shipping_form = OrderForm(customer, request.POST) # payment_form = PaymentForm(request.POST) if shipping_form.is_valid(): shipping_choice = shipping_form.cleaned_data['shipping_choice'] order_total += Decimal(shipping_choice.cost) request.session['shipping_choice'] = shipping_choice.id if payment_form.is_valid(): payment_option = payment_form.cleaned_data['payment_option'] request.session['payment_option'] = payment_option.id if payment_form.is_valid() and shipping_form.is_valid(): return HttpResponseRedirect(reverse(submit_order)) else: # shipping_form = OrderForm(customer) # payment_form = PaymentForm() pass return render_to_response(template_name, { 'customer': customer, # 'shipping_form': shipping_form, # 'payment_form': payment_form, 'order_total': order_total, }, context_instance=RequestContext(request))
def cart_clear(request): with cart(request) as session_cart: session_cart.clear() return HttpResponse('Done')