def shipping_method_view(self, request): cart = utils.get_or_create_cart(request) if request.method == "POST": form = self.shipping_method_form(request.POST, request=request) if form.is_valid(): shipment_id = request.session.get("kishore_shipment_id",None) shipment = easypost.Shipment.retrieve(id=shipment_id) rate_id = form.cleaned_data["method"] shipping_total = [r.rate for r in shipment.rates if r.id == rate_id][0] order = Order.objects.create( shipment_processor = kishore_settings.KISHORE_SHIPPING_BACKEND, shipment_id = shipment_id, shipment_method_id = rate_id, shipping_address = self.create_shipping_address(shipment.to_address), shipping_total = shipping_total) request.session['kishore_order_id'] = order.id return redirect("kishore_payment") else: form = self.shipping_method_form(request=request) return render(request, "kishore/store/shipping_method.html",{'form':form})
def shipping_view(self, request): if request.method == "POST": form = self.address_form(request.POST) if form.is_valid(): to_address = form.easypost_address cart = utils.get_or_create_cart(request) parcel = easypost.Parcel.create( length = 12, width = 12, height = 4, weight = cart.total_weight, ) shipment = easypost.Shipment.create( to_address = to_address, from_address = self.from_address, parcel = parcel, ) request.session['kishore_shipment_id'] = shipment["id"] return redirect("kishore_shipping_methods") else: form = self.address_form() return render(request, "kishore/store/easypost_shipping.html", {'form': form})
def get(self, request, *args, **kwargs): product = get_object_or_404(Product, slug=self.kwargs['slug']) # create an empty cart and add a single item cart = utils.get_or_create_cart(request, force_create=True) cart.add_product(product) return redirect("kishore_checkout")
def remove_from_cart(request, item_id): if request.method == "POST": cart = utils.get_or_create_cart(request) item = get_object_or_404(CartItem, pk=item_id) if item not in cart.cartitem_set.all(): return HttpResponse("Bad request", status=400) item.delete() return redirect("kishore_cart") else: return HttpResponse("Bad request", status=400)
def checkout(request): cart = utils.get_or_create_cart(request) valid = cart.clean() if not valid: return render(request, "kishore/store/cart.html", {'cart':cart,'error':True}) if cart.empty: return redirect("kishore_cart") elif cart.shippable: return redirect('kishore_shipping') else: request.session['kishore_order_id'] = None return redirect('kishore_payment')
def update_cart(request, item_id): if request.method == "POST": cart = utils.get_or_create_cart(request) item = get_object_or_404(CartItem, pk=item_id) if item not in cart.cartitem_set.all(): return HttpResponse("Bad request", status=400) form = CartItemForm(request.POST, instance=item) if form.is_valid(): form.save() return redirect("kishore_cart") else: return HttpResponse("Bad request", status=400)
def add_to_cart(request): if request.method == "POST": cart = utils.get_or_create_cart(request) form = CartItemForm(request.POST) if form.is_valid(): item = form.save(commit=False) cart_items = cart.cartitem_set.filter(product=item.product) # check to see we don't already have this product in the cart if len(cart_items) > 0: item_to_update = cart_items[0] item_to_update.quantity = item_to_update.quantity + item.quantity item_to_update.save() else: item.cart = cart item.save() return redirect("kishore_cart") else: return HttpResponse("Bad request", status=400)
def payment(request): order = utils.get_or_create_order(request) if request.method == "POST": form = PaymentForm(request.POST, order=order) if form.is_valid(): order.customer_name = form.cleaned_data['name'] order.customer_email = form.cleaned_data['email'] order.payment_processor = form.cleaned_data['processor'] order.save() p = form.cleaned_data["processor"] klass = utils.load_class(p) processor = klass(order) return processor.get_response(request) else: cart = utils.get_or_create_cart(request) order.prepare_from_cart(cart) form = PaymentForm(order=order) return render(request, "kishore/store/payment.html",{'form':form,'order':order})
def cart(request): cart = utils.get_or_create_cart(request) return render(request, "kishore/store/cart.html", {'cart': cart})