def add_to_cart(request): """ Add product to cart """ product_id = int(request.POST['product_id']) # Checking if user already has cart in session # otherwise create a new cart for the user if 'cart_id' in request.session: cart_id = int(request.session['cart_id']) cart = Cart.get_cart(cart_id) else: cart = Cart.get_cart() request.session['cart_id'] = cart.id try: quantity = int(request.POST['quantity']) if quantity > 0: cart.add_item(product_id, quantity, request.user) else: raise ValueError() except ValueError: return HttpResponseBadRequest('Product quantity is not correct, please enter one or more products in numbers.') if request.is_ajax(): default_currency = get_default_currency(request) return render(request, 'sales/cart_basket.html', {'cart': cart, 'default_currency': default_currency}) return HttpResponseRedirect(reverse('sales_checkout_cart'))
def process_online(request, order_id, receipt_code): """ Shows online or process online payment """ checkout_template_name = 'sales/checkout_base.html' if request.method == 'GET': form = None gateways = Gateway.get_gateways() order = get_object_or_404(Order, id=order_id, receipt_code=receipt_code) default_currency = get_default_currency(request) for gateway in gateways: if gateway.accept_credit_card: form = CreditCardForm(initial={'gateway': gateway}) return render( request, 'payments/process_online.html', { 'form': form, 'order': order, 'gateways': gateways, 'default_currency': default_currency, 'checkout_template_name': checkout_template_name, }) raise Http404
def process_credit_card(request, order_id, receipt_code): """ Process credit card payment """ if request.method == 'POST': error = None form = CreditCardForm(request.POST) order = get_object_or_404(Order, id=order_id, receipt_code=receipt_code) if form.is_valid(): data = form.cleaned_data gateway = data['gateway'] if gateway.name == Gateway.PAYPAL: processor = PayPal(gateway) elif gateway.name == Gateway.STRIPE: processor = Stripe(gateway) else: raise ImproperlyConfigured('%s is not supported gateway for processing credit cards.' % gateway) try: processor.credit_card_payment(data['card'], order, request.user) return render(request, 'credit_card_processed.html', {'order': order}) except DoorsaleError as e: error = e.message gateways = Gateway.get_gateways() default_currency = get_default_currency(request) return render(request, 'process_online.html', {'form': form, 'order': order, 'gateways': gateways, 'default_currency': default_currency, 'error': error}) raise Http404
def remove_all_from_cart(request): """ Remove all products from cart """ if request.method == 'POST': if 'cart_id' in request.session: cart_id = int(request.session['cart_id']) cart = Cart.get_cart(cart_id) cart.remove_all_items() else: cart = Cart() if request.is_ajax(): default_currency = get_default_currency(request) return render(request, 'sales/cart_basket.html', {'cart': cart, 'default_currency': default_currency}) return HttpResponseRedirect(reverse('sales_checkout_cart'))
def process_online(request, order_id, receipt_code): """ Shows online or process online payment """ if request.method == 'GET': form = None gateways = Gateway.get_gateways() order = get_object_or_404(Order, id=order_id, receipt_code=receipt_code) default_currency = get_default_currency(request) for gateway in gateways: if gateway.accept_credit_card: form = CreditCardForm(initial={'gateway': gateway}) return render(request, 'process_online.html', {'form': form, 'order': order, 'gateways': gateways, 'default_currency': default_currency}) raise Http404
def process_credit_card(request, order_id, receipt_code): """ Process credit card payment """ if request.method == 'POST': error = None form = CreditCardForm(request.POST) order = get_object_or_404(Order, id=order_id, receipt_code=receipt_code) if form.is_valid(): data = form.cleaned_data gateway = data['gateway'] if gateway.name == Gateway.PAYPAL: processor = PayPal(gateway) elif gateway.name == Gateway.STRIPE: processor = Stripe(gateway) else: raise ImproperlyConfigured( '%s is not supported gateway for processing credit cards.' % gateway) try: processor.credit_card_payment(data['card'], order, request.user) return render(request, 'payments/credit_card_processed.html', {'order': order}) except Exception as e: error = e.message gateways = Gateway.get_gateways() default_currency = get_default_currency(request) return render( request, 'payments/process_online.html', { 'form': form, 'order': order, 'gateways': gateways, 'default_currency': default_currency, 'error': error }) raise Http404
def get(self, request, order_id=None, receipt_code=None, *arg, **kwargs): if kwargs.get('order_id', None): self.order_id = self.kwargs['order_id'] if kwargs.get('receipt_code', None): self.receipt_code = self.kwargs['receipt_code'] if request.method == 'GET': self.form = None self.gateways = Gateway.get_gateways() self.order = get_object_or_404(Order, id=order_id, receipt_code=receipt_code) self.default_currency = get_default_currency(request) for self.gateway in self.gateways: if self.gateway.accept_credit_card: self.form = CreditCardForm( initial={'gateway': self.gateway}) return super(ProcessOnlineView, self).get(request, order_id, receipt_code, *arg, **kwargs)
def remove_from_cart(request): """ Remove product from cart """ product_id = int(request.POST['product_id']) # Checking if user session has cart or session may already flushed # Cart an empty cart for user if 'cart_id' in request.session: cart_id = int(request.session['cart_id']) cart = Cart.get_cart(cart_id) cart.remove_item(product_id) else: cart = Cart() if request.is_ajax(): default_currency = get_default_currency(request) return render(request, 'sales/cart_basket.html', {'cart': cart, 'default_currency': default_currency}) return HttpResponseRedirect(reverse('sales_checkout_cart'))