29 lines
760 B
Python
29 lines
760 B
Python
from decimal import Decimal
|
|
|
|
from django.db.models import Sum
|
|
|
|
from shop.models import Cart, CartItem
|
|
from web.settings import ANONYMOUS_CART_ID_COOKIE_NAME
|
|
|
|
|
|
def get_or_create_cart(request) -> [Cart, bool]:
|
|
created = False
|
|
if not request.user.is_authenticated:
|
|
uid = request.COOKIES.get(ANONYMOUS_CART_ID_COOKIE_NAME)
|
|
|
|
if uid:
|
|
cart = Cart.objects.get(uuid=uid)
|
|
else:
|
|
cart = Cart.objects.create(user=None)
|
|
created = True
|
|
else:
|
|
cart, created = Cart.objects.get_or_create(user=request.user)
|
|
|
|
return cart, created
|
|
|
|
|
|
def get_cart_total(cart: Cart):
|
|
return CartItem.objects.filter(cart=cart).annotate(cart_total=Sum("total")).get(
|
|
"cart_total"
|
|
) or Decimal("0.00")
|