def get_or_create_cart(request, save=False): """ Return cart for current visitor. For a logged in user, try to get the cart from the database. If it's not there or it's empty, use the cart from the session. If the user is not logged in use the cart from the session. If there is no cart object in the database or session, create one. If ``save`` is True, cart object will be explicitly saved. """ cart = None if not hasattr(request, '_cart'): is_logged_in = request.user and not isinstance(request.user, AnonymousUser) if is_logged_in: # if we are authenticated session_cart = get_cart_from_session(request) if session_cart and session_cart.user == request.user: # and the session cart already belongs to us, we are done cart = session_cart elif session_cart and session_cart.total_quantity > 0 and session_cart.user != request.user: # if it does not belong to us yet database_cart = get_cart_from_database(request) if database_cart: # and there already is a cart that belongs to us in the database # delete the old database cart database_cart.delete() database_cart = None # save the user to the new one from the session session_cart.user = request.user session_cart.save() cart = session_cart else: # if there is no session_cart, or it's empty, use the database cart cart = get_cart_from_database(request) if cart: # and save it to the session request.session['cart_id'] = cart.id else: # not authenticated? cart might be in session cart = get_cart_from_session(request) if not cart: # in case it's our first visit and no cart was created yet if is_logged_in: cart = Cart(user=request.user) elif getattr(request, 'session', None) is not None: cart = Cart() if save and not cart.pk: cart.save() request.session['cart_id'] = cart.id setattr(request, '_cart', cart) cart = getattr(request, '_cart') # There we *must* have a cart return cart
def setUp(self): self.user = User.objects.create(username="******", email="*****@*****.**", first_name="Test", last_name="Toto") self.request = Mock() setattr(self.request, 'user', self.user) setattr(self.request, 'session', {}) setattr(self.request, 'method', 'GET') self.cart = Cart() self.cart.user = self.user self.cart.save()
def setUp(self): self.user = User.objects.create(username="******", email="*****@*****.**", first_name="Test", last_name="Toto") self.request = Mock() setattr(self.request, 'user', self.user) setattr(self.request, 'session', {}) setattr(self.request, 'method', 'GET') self.product = Product(name='pizza', slug='pizza', unit_price='1.45') self.product.save() self.cart = Cart() self.cart.user = self.user self.cart.save()
def create_fixtures(self): cart_modifiers_pool.USE_CACHE=False self.user = User.objects.create(username="******", email="*****@*****.**", first_name="Test", last_name = "Toto") self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.cart = Cart() self.cart.user = self.user self.cart.save() self.client = Client() self.client.user = self.user self.client.save() self.country = Country.objects.create(name='CH') self.address = Address() self.address.client = self.client self.address.address = 'address' self.address.address2 = 'address2' self.address.zip_code = '1234' self.address.state = 'ZH' self.address.country = self.country self.address.is_billing = True self.address.is_shipping = True self.address.save() self.address2 = Address() self.address2.client = self.client self.address2.address = '2address' self.address2.address2 = '2address2' self.address2.zip_code = '21234' self.address2.state = '2ZH' self.address2.country = self.country self.address2.is_billing = True self.address2.is_shipping = False self.address2.save()
def setUp(self): cart_modifiers_pool.USE_CACHE = False self.user = User.objects.create(username="******", email="*****@*****.**") self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.cart = Cart() self.cart.user = self.user self.cart.save()
def setUp(self): cart_modifiers_pool.USE_CACHE = False user = User.objects.create(username="******", email="*****@*****.**") self.request = Mock() setattr(self.request, 'user', user) self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.inactive_product = Product(name='InactiveProduct', slug='InactiveProduct', active=False) self.inactive_product.save() self.cart = Cart() self.cart.user = user self.cart.save()
def create_fixtures(self): cart_modifiers_pool.USE_CACHE = False self.user = User.objects.create(username="******", email="*****@*****.**", first_name="Test", last_name="Toto") self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.ogroup = OptionGroup() self.ogroup.product = self.product self.ogroup.name = 'Test group' self.ogroup.save() self.option = Option() self.option.group = self.ogroup self.option.name = "Awesome" self.option.price = self.AWESOME_OPTION_PRICE self.option.save() self.cart = Cart() self.cart.user = self.user self.cart.save() self.cartitem = CartItem() self.cartitem.cart = self.cart self.cartitem.quantity = 1 self.cartitem.product = self.product self.cartitem.save()