71 lines
2.4 KiB
Python
71 lines
2.4 KiB
Python
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") |