def checkout_home(request): cart_obj, cart_created = Cart.objects.new_or_get(request) order_obj = None shipping_address_qs = None billing_address_qs = None if cart_created or cart_obj.products.count() == 0: return redirect('cart:home') billing_profile, billing_profile_created = BillingProfile.objects.new_or_get( request) billing_address_id = request.session.get('billing_address_id') shipping_address_id = request.session.get('shipping_address_id') if billing_profile is not None: address_qs = Address.objects.filter(billing_profile=billing_profile) shipping_address_qs = address_qs.filter(address_type="shipping") billing_address_qs = address_qs.filter(address_type="billing") order_obj, order_obj_created = Order.objects.new_or_get( cart_obj, billing_profile) if billing_address_id is not None and shipping_address_id is not None: order_obj.shipping_address = Address.objects.get( id=shipping_address_id) order_obj.billing_address = Address.objects.get( id=billing_address_id) order_obj.save() del request.session['billing_address_id'] del request.session['shipping_address_id'] if request.method == "POST": is_done = order_obj.check_order() if is_done: del request.session['cart_id'] request.session['cart_count'] = 0 order_obj.complete_order() cart_obj.active = False cart_obj.save() return redirect("cart:success") context = { "object": order_obj, "obj_count": cart_obj.products.count(), "billing_profile": billing_profile, "form_login": LoginForm(), "form_registration": RegistrationForm(), "form_guest": GestForm(), "shipping_address": AddressForm(prefix="shipping"), "billing_address": AddressForm(prefix="billing"), "saved_shipping_address": shipping_address_qs, "saved_billing_address": billing_address_qs, } return render(request, "cart/checkout.html", context)
def address_update(request): if request.method == 'POST': # Is this a shipping or billing address???? address_type = request.POST.get('address_type') address_id = request.POST.get('address') print('address', address_id) address = Address.objects.get(id=address_id) billing_profile, bill_created = BillingProfile.objects.new_or_get( request) cart_obj, cart_created = Cart.objects.new_or_get(request) order_obj, order_created = Order.objects.new_or_get( billing_profile=billing_profile, cart_obj=cart_obj) form = AddressForm(request.POST) if form.is_valid(): # Now we have to associate to the order if address_type == 'shipping': # How do we get the order? order_obj.shipping_address = address order_obj.save() if address_type == 'billing': order_obj.billing_address = address order_obj.save() return redirect('carts:cart_checkout') else: return redirect('carts:cart_checkout')
def checkout_home(request): cart_obj, cart_created = Cart.objects.new_or_get(request) order_obj = None if cart_created or cart_obj.products.count() == 0: return redirect("cart:home") login_form = LoginForm() guest_form = GuestForm() address_form = AddressForm() billing_address_id = request.session.get("billing_address_id", None) shipping_address_id = request.session.get("shipping_address_id", None) billing_profile, billing_profile_created = BillingProfile.objects.new_or_get( request) if billing_profile is not None: order_obj, order_obj_created = Order.objects.new_or_get( billing_profile, cart_obj) if shipping_address_id: order_obj.shipping_address = Address.objects.get( id=shipping_address_id) del request.session["shipping_address_id"] if billing_address_id: order_obj.billing_address = Address.objects.get( id=billing_address_id) del request.session["billing_address_id"] if billing_address_id or shipping_address_id: order_obj.save() context = { "object": order_obj, "billing_profile": billing_profile, "login_form": login_form, "guest_form": guest_form, "address_form": address_form, } return render(request, "carts/checkout.html", context)
def cart_checkout(request): order_obj = None old_addresses = None credit_card = None loginForm = LoginForm() guestForm = GuestForm() addressForm = AddressForm() # print('AddressForm', addressForm) cart_obj, cart_created = Cart.objects.new_or_get(request) billing_profile, bill_created = BillingProfile.objects.new_or_get(request) cards = Card.objects.filter(billing_profile=billing_profile, default=True) if cards.exists(): credit_card = cards.last() # print('BillingProfile ',billing_profile) if billing_profile is not None: order_obj, order_created = Order.objects.new_or_get( billing_profile=billing_profile, cart_obj=cart_obj) if order_obj is not None: old_addresses = Address.objects.filter(billing_profile=billing_profile) context = { 'order_obj': order_obj, 'loginForm': loginForm, 'guestForm': guestForm, 'addressForm': addressForm, 'billing_profile': billing_profile, 'old_addresses': old_addresses, 'credit_card': credit_card, } return render(request, 'carts/cart_checkout.html', context)
def checkout_address_create_view(request): form = AddressForm(request.POST or None) context = {"form": form} next_ = request.GET.get("next") next_post = request.POST.get("next") redirect_path = next_ or next_post or None if form.is_valid(): print(request.POST) instance = form.save(commit=False) billing_profile, billing_profile_created = BillingProfile.objects.new_or_get( request) if billing_profile is not None: address_type = request.POST.get("address_type", 'shipping') instance.billing_profile = billing_profile instance.address_type = request.POST.get('address_type', 'shipping') instance.save() request.session[address_type + "_address_id"] = instance.id print(request.session[address_type + "_address_id"]) else: # TODO put a real error here that the address didn't save print("Error trying to save address") return redirect("cart:checkout") if is_safe_url(redirect_path, request.get_host()): return redirect(redirect_path) else: return redirect("cart:checkout") return redirect("cart:checkout")
def checkout_home(request): context = {} if request.user.is_authenticated: # checkout will be after cart view, ie when cart is created cart_obj, cart_created = Cart.objects.get_or_create_cart(request) if cart_obj.products.count() == 0: # cart is empty redirect to cart view return redirect("carts:cart") billing_profile, billing_profile_created = BillingProfile.objects.get_or_create( user=request.user, email=request.user.email) if billing_profile is not None: order_obj, order_obj_created = Order.objects.get_or_create_order( billing_profile, cart_obj ) num_cart_items = order_obj.cart.products.count() shipping_address_form = AddressForm() addresses = Address.objects.filter(billing_profile=billing_profile) context = { 'object': order_obj, 'num_cart_items': num_cart_items, 'addresses': addresses, 'billing_profile': billing_profile, 'shipping_address_form': shipping_address_form, } return render(request, "carts/checkout.html", context)
def checkout_home(request): cart_obj, cart_created = Cart.objects.new_or_get(request) order_obj = None items = None if cart_created: redirect('cart') address_form = AddressForm() billing_address_id = request.session.get('billing_address_id', None) shipping_address_id = request.session.get('shipping_address_id', None) billing_profile, billing_profile_created = BillingProfile.objects.new_or_get( request) address_qs = None has_card = None if billing_profile is not None: address_qs = Address.objects.filter(billing_profile=billing_profile) order_obj, order_obj_created = Order.objects.new_or_get( billing_profile, cart_obj) items = Item.objects.filter(cart=cart_obj) if shipping_address_id: order_obj.shipping_address = Address.objects.get( id=shipping_address_id) del request.session['shipping_address_id'] if billing_address_id: order_obj.billing_address = Address.objects.get( id=billing_address_id) del request.session['billing_address_id'] if shipping_address_id or billing_address_id: order_obj.save() has_card = billing_profile.has_card() if request.method == 'POST': is_prepared = order_obj.check_done() if is_prepared: did_charge, charge_msg = billing_profile.charge(order_obj) if did_charge: order_obj.mark_paid() Item.objects.all().delete() Cart.objects.all().delete() return redirect('success') else: print(charge_msg) return redirect('checkout') context = { 'object': order_obj, 'items': items, 'billing_profile': billing_profile, 'address_form': address_form, 'addresses': address_qs, 'has_card': has_card, 'publish_key': STRIPE_PUB_KEY } return render(request, 'cart/checkout.html', context)