You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.7 KiB
66 lines
1.7 KiB
from decimal import Decimal
|
|
from django.conf import settings
|
|
from django.contrib import auth
|
|
|
|
from cart.models import Offer
|
|
from products.models import Product
|
|
|
|
|
|
# from discount.models import Discount
|
|
|
|
class Cart(object):
|
|
def __init__(self, request):
|
|
self.store = request.session
|
|
cart = self.store.get(settings.CART_SESSION_ID)
|
|
if not cart:
|
|
cart = self.store[settings.CART_SESSION_ID] = {}
|
|
self.cart = cart
|
|
|
|
def add(self, offer_id, quantity=1):
|
|
offer_id = str(offer_id)
|
|
if offer_id in self.cart:
|
|
self.cart[offer_id]['quantity'] += int(quantity)
|
|
else:
|
|
self.cart[offer_id] = {'quantity': quantity}
|
|
self.save()
|
|
|
|
def save(self):
|
|
self.store[settings.CART_SESSION_ID] = self.cart
|
|
self.store.modified = True
|
|
|
|
def remove(self, offer_id):
|
|
offer_id = str(offer_id)
|
|
if offer_id in self.cart:
|
|
del self.cart[offer_id]
|
|
self.save()
|
|
|
|
def clear(self):
|
|
del self.store[settings.CART_SESSION_ID]
|
|
self.store.modified = True
|
|
|
|
def keys(self):
|
|
return self.cart.keys()
|
|
|
|
def __iter__(self):
|
|
return iter(self.cart.keys())
|
|
|
|
def __setitem__(self, key, value):
|
|
try:
|
|
self.cart[str(key)] = value
|
|
except KeyError:
|
|
return setattr(self, key, value)
|
|
|
|
def __getitem__(self, key):
|
|
try:
|
|
return self.cart[str(key)]
|
|
except KeyError:
|
|
return getattr(self, key)
|
|
|
|
def __contains__(self, item):
|
|
return str(item) in self.cart
|
|
|
|
def __next__(self):
|
|
return self.cart.__next__()
|
|
|
|
def __len__(self):
|
|
return self.cart.__len__()
|
|
|