ecommerce/carts/views.py
2018-09-10 23:16:35 +03:00

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")