from django.shortcuts import render, redirect, get_object_or_404 from products.models import Product from .models import Cart from orders.models import Order from billing.models import BillingProfile from accounts.forms import GuestForm from accounts.models import GuestEmail from addresses.forms import AddressForm from addresses.models import Address def cart_home(request): cart_obj, new_obj = Cart.objects.new_or_get(request) return render(request, 'carts/home.html', {"cart": cart_obj}) def cart_update(request): product_id = request.POST.get("product_id") product_obj = get_object_or_404(Product, id=product_id) cart_obj, new_obj = Cart.objects.new_or_get(request) if product_obj in cart_obj.products.all(): cart_obj.products.remove(product_obj) else: cart_obj.products.add(product_obj) request.session['cart_items'] = cart_obj.products.count() return redirect("carts:home") 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("carts:home") guest_form = GuestForm() address_form = AddressForm() address_id = request.session.get("address_id", None) billing_profile, billing_profile_created = BillingProfile.objects.new_or_get(request) address_qs = None if billing_profile is not None: if request.user.is_authenticated(): address_qs = Address.objects.filter(billing_profile=billing_profile) order_obj, order_obj_created = Order.objects.new_or_get(billing_profile, cart_obj) if address_id: order_obj.address = Address.objects.get(id=address_id) request.session['cart_items'] = 0 del request.session["address_id"] order_obj.save() if request.method == 'POST': 'check that order is done' is_done = order_obj.check_done() if is_done: order_obj.mark_paid() del request.session['cart_id'] return redirect('carts:success') context = { "object": order_obj, "billing_profile": billing_profile, "guest_form" : guest_form, "address_form": address_form, "address_qs": address_qs } return render(request, "carts/checkout.html", context) def checkout_done(request): return render(request, "carts/checkout-done.html")