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): if settings.CART_SESSION_ID in self.store: del self.store[settings.CART_SESSION_ID] self.store.modified = True del self.cart self.cart = {} 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__()