def test_cartprices(self): macaw_price = ProductPrice.objects.create(product=self.macaw, price=Decimal('10.0'), qty_mode='product') macaw_price.qty_overrides.create(min_qty=9, price=Decimal('9.0')) macaw_price.offsets.create(variant=self.macaw_blue_a, price_offset=Decimal('2.0')) cart = Cart.objects.create(typ='test') cart.set_quantity(self.macaw_blue_a, 4) cart.set_quantity(self.macaw_blue_d, 4) item_macaw_blue_a = cart.items.get(variant=self.macaw_blue_a) item_macaw_blue_d = cart.items.get(variant=self.macaw_blue_d) self.assertEqual( get_cartitem_unit_price(item_macaw_blue_d, currency='BTC'), Price(Decimal('10.0'), currency='BTC')) self.assertEqual( get_cartitem_unit_price(item_macaw_blue_a, currency='BTC'), Price(Decimal('12.0'), currency='BTC')) cart.add_quantity(self.macaw_blue_a, 1) cart.add_quantity(self.macaw_blue_d, 1) item_macaw_blue_a = cart.items.get(variant=self.macaw_blue_a) item_macaw_blue_d = cart.items.get(variant=self.macaw_blue_d) self.assertEqual( get_variant_price(item_macaw_blue_a.variant.get_subtype_instance(), currency='BTC', cart=cart), Price(Decimal('11.0'), currency='BTC')) # contextless product self.assertEqual( get_variant_price(item_macaw_blue_a.variant.get_subtype_instance(), currency='BTC'), Price(Decimal('12.0'), currency='BTC'))
def test_cartprices(self): macaw_price = ProductPrice.objects.create(product=self.macaw, price=Decimal('10.0'), qty_mode='product') macaw_price.qty_overrides.create(min_qty=9, price=Decimal('9.0')) macaw_price.offsets.create(variant=self.macaw_blue_a, price_offset=Decimal('2.0')) cart = Cart.objects.create(typ='test') cart.set_quantity(self.macaw_blue_a, 4) cart.set_quantity(self.macaw_blue_d, 4) item_macaw_blue_a = cart.items.get(variant=self.macaw_blue_a) item_macaw_blue_d = cart.items.get(variant=self.macaw_blue_d) self.assertEqual(get_cartitem_unit_price(item_macaw_blue_a, currency='BTC'), Price(Decimal('12.0'), currency='BTC')) self.assertEqual(get_cartitem_unit_price(item_macaw_blue_d, currency='BTC'), Price(Decimal('10.0'), currency='BTC')) cart.add_quantity(self.macaw_blue_a, 1) cart.add_quantity(self.macaw_blue_d, 1) item_macaw_blue_a = cart.items.get(variant=self.macaw_blue_a) item_macaw_blue_d = cart.items.get(variant=self.macaw_blue_d) # cartitem self.assertEqual(get_cartitem_unit_price(item_macaw_blue_a, currency='BTC'), Price(Decimal('11.0'), currency='BTC')) # contextless product self.assertEqual(get_variant_price(self.macaw_blue_a, currency='BTC'), Price(Decimal('12.0'), currency='BTC')) # product in cart context self.assertEqual(get_variant_price(self.macaw_blue_a, currency='BTC', cart=cart), Price(Decimal('11.0'), currency='BTC')) # cartitem self.assertEqual(get_cartitem_unit_price(item_macaw_blue_d, currency='BTC'), Price(Decimal('9.0'), currency='BTC')) # contextless product self.assertEqual(get_variant_price(self.macaw_blue_d, currency='BTC'), Price(Decimal('10.0'), currency='BTC')) # product in cart context self.assertEqual(get_variant_price(self.macaw_blue_d, currency='BTC', cart=cart), Price(Decimal('9.0'), currency='BTC'))
def test_default(self): self.vat23.default = True self.vat23.save() # these have 8% VAT self.assertEqual( handler.get_variant_price(self.macaw_blue_d, currency="PLN"), Price(10, Decimal("10.80"), currency="PLN") ) self.assertEqual( handler.get_variant_price(self.macaw_blue_a, currency="PLN"), Price(12, Decimal("12.96"), currency="PLN") ) # while these have default 23% VAT self.assertEqual( handler.get_variant_price(self.cockatoo_white_a, currency="PLN"), Price(20, Decimal("24.60"), currency="PLN"), ) self.assertEqual( handler.get_variant_price(self.cockatoo_green_a, currency="PLN"), Price(25, Decimal("30.75"), currency="PLN"), ) pr = handler.get_product_price_range(self.cockatoo, currency="PLN") self.assertEqual( pr, PriceRange( min_price=Price(20, Decimal("24.60"), currency="PLN"), max_price=Price(25, Decimal("30.75"), currency="PLN"), ), )
def test_nodefault(self): # these have 8% VAT self.assertEqual(handler.get_variant_price(self.macaw_blue_d, currency='PLN'), Price(10, Decimal('10.80'), currency='PLN')) self.assertEqual(handler.get_variant_price(self.macaw_blue_a, currency='PLN'), Price(12, Decimal('12.96'), currency='PLN')) # while these have no tax group, hence the tax is zero self.assertEqual(handler.get_variant_price(self.cockatoo_white_a, currency='PLN'), Price(20, 20, currency='PLN')) self.assertEqual(handler.get_variant_price(self.cockatoo_green_a, currency='PLN'), Price(25, 25, currency='PLN')) # same in cart cart = Cart.objects.create(typ='test') cart.set_quantity(self.macaw_blue_a, 3) cart.set_quantity(self.macaw_blue_d, 5) item_macaw_blue_a = cart.items.get(variant=self.macaw_blue_a) item_macaw_blue_d = cart.items.get(variant=self.macaw_blue_d) self.assertEqual( handler.get_cartitem_unit_price(item_macaw_blue_a, currency='PLN'), Price(12, Decimal('12.96'), currency='PLN')) self.assertEqual( handler.get_cartitem_unit_price(item_macaw_blue_d, currency='PLN'), Price(10, Decimal('10.80'), currency='PLN')) cart.set_quantity(self.cockatoo_white_a, 3) cart.set_quantity(self.cockatoo_green_a, 5) item_cockatoo_white_a = cart.items.get(variant=self.cockatoo_white_a) item_cockatoo_green_a = cart.items.get(variant=self.cockatoo_green_a) self.assertEqual( handler.get_cartitem_unit_price(item_cockatoo_white_a, currency='PLN'), Price(20, 20, currency='PLN')) self.assertEqual( handler.get_cartitem_unit_price(item_cockatoo_green_a, currency='PLN'), Price(25, 25, currency='PLN'))
def test_default(self): self.vat23.default = True self.vat23.save() # these have 8% VAT self.assertEqual(handler.get_variant_price(self.macaw_blue_d, currency='PLN'), Price(10, Decimal('10.80'), currency='PLN')) self.assertEqual(handler.get_variant_price(self.macaw_blue_a, currency='PLN'), Price(12, Decimal('12.96'), currency='PLN')) # while these have default 23% VAT self.assertEqual(handler.get_variant_price(self.cockatoo_white_a, currency='PLN'), Price(20, Decimal('24.60'), currency='PLN')) self.assertEqual(handler.get_variant_price(self.cockatoo_green_a, currency='PLN'), Price(25, Decimal('30.75'), currency='PLN')) # same in cart cart = Cart.objects.create(typ='test') cart.set_quantity(self.macaw_blue_a, 3) cart.set_quantity(self.macaw_blue_d, 5) item_macaw_blue_a = cart.items.get(variant=self.macaw_blue_a) item_macaw_blue_d = cart.items.get(variant=self.macaw_blue_d) self.assertEqual( handler.get_cartitem_unit_price(item_macaw_blue_a, currency='PLN'), Price(12, Decimal('12.96'), currency='PLN')) self.assertEqual( handler.get_cartitem_unit_price(item_macaw_blue_d, currency='PLN'), Price(10, Decimal('10.80'), currency='PLN')) cart.set_quantity(self.cockatoo_white_a, 3) cart.set_quantity(self.cockatoo_green_a, 5) item_cockatoo_white_a = cart.items.get(variant=self.cockatoo_white_a) item_cockatoo_green_a = cart.items.get(variant=self.cockatoo_green_a) self.assertEqual( handler.get_cartitem_unit_price(item_cockatoo_white_a, currency='PLN'), Price(20, Decimal('24.60'), currency='PLN')) self.assertEqual( handler.get_cartitem_unit_price(item_cockatoo_green_a, currency='PLN'), Price(25, Decimal('30.75'), currency='PLN'))
def test_product_discount(self): # these have 30% discount self.assertEqual(handler.get_variant_price(self.macaw_blue_a, currency='BTW'), Price(7, Decimal('7.0'), currency='BTW')) # while these have no tax group, hence the discount is zero self.assertEqual(handler.get_variant_price(self.cockatoo_white_a, currency='BTW'), Price(20, 20, currency='BTW'))
def test_nodefault(self): # these have 8% VAT self.assertEqual(handler.get_variant_price(self.macaw_blue_d, currency='PLN'), Price(10, Decimal('10.80'), currency='PLN')) self.assertEqual(handler.get_variant_price(self.macaw_blue_a, currency='PLN'), Price(12, Decimal('12.96'), currency='PLN')) # while these have no tax group, hence the tax is zero self.assertEqual(handler.get_variant_price(self.cockatoo_white_a, currency='PLN'), Price(20, 20, currency='PLN')) self.assertEqual(handler.get_variant_price(self.cockatoo_green_a, currency='PLN'), Price(25, 25, currency='PLN'))
def test_default(self): self.vat23.default = True self.vat23.save() # these have 8% VAT self.assertEqual(handler.get_variant_price(self.macaw_blue_d, currency='PLN'), Price(10, Decimal('10.80'), currency='PLN')) self.assertEqual(handler.get_variant_price(self.macaw_blue_a, currency='PLN'), Price(12, Decimal('12.96'), currency='PLN')) # while these have default 23% VAT self.assertEqual(handler.get_variant_price(self.cockatoo_white_a, currency='PLN'), Price(20, Decimal('24.60'), currency='PLN')) self.assertEqual(handler.get_variant_price(self.cockatoo_green_a, currency='PLN'), Price(25, Decimal('30.75'), currency='PLN'))
def test_undiscounted_price(self): price = handler.get_variant_price(None, u'PLN', quantity=1, discount=False) self.assertEqual(price, Price(net=5, gross=5*decimal.Decimal('1.9'), currency=u'PLN'))
def test_undiscounted_price(self): price = handler.get_variant_price(None, u'PLN', quantity=1, discount=False) self.assertEqual( price, Price(net=5, gross=5 * decimal.Decimal('1.9'), currency=u'PLN'))
def test_nodefault(self): # these have 8% VAT self.assertEqual( handler.get_variant_price(self.macaw_blue_d, currency="PLN"), Price(10, Decimal("10.80"), currency="PLN") ) self.assertEqual( handler.get_variant_price(self.macaw_blue_a, currency="PLN"), Price(12, Decimal("12.96"), currency="PLN") ) # while these have no tax group, hence the tax is zero self.assertEqual( handler.get_variant_price(self.cockatoo_white_a, currency="PLN"), Price(20, 20, currency="PLN") ) self.assertEqual( handler.get_variant_price(self.cockatoo_green_a, currency="PLN"), Price(25, 25, currency="PLN") ) pr = handler.get_product_price_range(self.cockatoo, currency="PLN") self.assertEqual( pr, PriceRange(min_price=Price(20, 20, currency="PLN"), max_price=Price(25, 25, currency="PLN")) )
def get_cartitem_unit_price(cartitem, currency=None, **kwargs): from satchless.pricing import handler variant = cartitem.variant.get_subtype_instance() currency = currency if currency else cartitem.cart.currency return handler.get_variant_price(variant, currency, quantity=cartitem.quantity, cart=cartitem.cart, cartitem=cartitem, **kwargs)
def variant_price(variant, currency=getattr(settings, 'SATCHLESS_DEFAULT_CURRENCY', None)): if not currency: return '' try: from satchless.pricing.handler import get_variant_price price = get_variant_price(variant, currency) if price is not None and price.has_value(): return price except ImportError: pass return ''
def test_default(self): self.vat23.default = True self.vat23.save() # these have 8% VAT self.assertEqual( handler.get_variant_price(self.macaw_blue_d, currency='PLN'), Price(10, Decimal('10.80'), currency='PLN')) self.assertEqual( handler.get_variant_price(self.macaw_blue_a, currency='PLN'), Price(12, Decimal('12.96'), currency='PLN')) # while these have default 23% VAT self.assertEqual( handler.get_variant_price(self.cockatoo_white_a, currency='PLN'), Price(20, Decimal('24.60'), currency='PLN')) self.assertEqual( handler.get_variant_price(self.cockatoo_green_a, currency='PLN'), Price(25, Decimal('30.75'), currency='PLN')) # same in cart cart = Cart.objects.create(typ='test') cart.set_quantity(self.macaw_blue_a, 3) cart.set_quantity(self.macaw_blue_d, 5) item_macaw_blue_a = cart.items.get(variant=self.macaw_blue_a) item_macaw_blue_d = cart.items.get(variant=self.macaw_blue_d) self.assertEqual( handler.get_cartitem_unit_price(item_macaw_blue_a, currency='PLN'), Price(12, Decimal('12.96'), currency='PLN')) self.assertEqual( handler.get_cartitem_unit_price(item_macaw_blue_d, currency='PLN'), Price(10, Decimal('10.80'), currency='PLN')) cart.set_quantity(self.cockatoo_white_a, 3) cart.set_quantity(self.cockatoo_green_a, 5) item_cockatoo_white_a = cart.items.get(variant=self.cockatoo_white_a) item_cockatoo_green_a = cart.items.get(variant=self.cockatoo_green_a) self.assertEqual( handler.get_cartitem_unit_price(item_cockatoo_white_a, currency='PLN'), Price(20, Decimal('24.60'), currency='PLN')) self.assertEqual( handler.get_cartitem_unit_price(item_cockatoo_green_a, currency='PLN'), Price(25, Decimal('30.75'), currency='PLN'))
def test_nodefault(self): # these have 8% VAT self.assertEqual( handler.get_variant_price(self.macaw_blue_d, currency='PLN'), Price(10, Decimal('10.80'), currency='PLN')) self.assertEqual( handler.get_variant_price(self.macaw_blue_a, currency='PLN'), Price(12, Decimal('12.96'), currency='PLN')) # while these have no tax group, hence the tax is zero self.assertEqual( handler.get_variant_price(self.cockatoo_white_a, currency='PLN'), Price(20, 20, currency='PLN')) self.assertEqual( handler.get_variant_price(self.cockatoo_green_a, currency='PLN'), Price(25, 25, currency='PLN')) # same in cart cart = Cart.objects.create(typ='test') cart.set_quantity(self.macaw_blue_a, 3) cart.set_quantity(self.macaw_blue_d, 5) item_macaw_blue_a = cart.items.get(variant=self.macaw_blue_a) item_macaw_blue_d = cart.items.get(variant=self.macaw_blue_d) self.assertEqual( handler.get_cartitem_unit_price(item_macaw_blue_a, currency='PLN'), Price(12, Decimal('12.96'), currency='PLN')) self.assertEqual( handler.get_cartitem_unit_price(item_macaw_blue_d, currency='PLN'), Price(10, Decimal('10.80'), currency='PLN')) cart.set_quantity(self.cockatoo_white_a, 3) cart.set_quantity(self.cockatoo_green_a, 5) item_cockatoo_white_a = cart.items.get(variant=self.cockatoo_white_a) item_cockatoo_green_a = cart.items.get(variant=self.cockatoo_green_a) self.assertEqual( handler.get_cartitem_unit_price(item_cockatoo_white_a, currency='PLN'), Price(20, 20, currency='PLN')) self.assertEqual( handler.get_cartitem_unit_price(item_cockatoo_green_a, currency='PLN'), Price(25, 25, currency='PLN'))
def get_price(self, product, currency, **kwargs): from satchless.pricing.handler import get_variant_price return get_variant_price(product, currency, **kwargs)
def test_basicprices(self): macaw_price = ProductPrice.objects.create(product=self.macaw, price=Decimal('10.0')) macaw_price.qty_overrides.create(min_qty=5, price=Decimal('9.0')) macaw_price.qty_overrides.create(min_qty=10, price=Decimal('8.0')) macaw_price.offsets.create(variant=self.macaw_blue_a, price_offset=Decimal('2.0')) self.assertEqual(get_variant_price(self.macaw_blue_d, currency='BTC', quantity=1), Price(Decimal('10.0'), currency='BTC')) self.assertEqual(get_variant_price(self.macaw_blue_d, currency='BTC', quantity=Decimal('4.9999')), Price(Decimal('10.0'), currency='BTC')) self.assertEqual(get_variant_price(self.macaw_blue_d, currency='BTC', quantity=5), Price(Decimal('9.0'), currency='BTC')) self.assertEqual(get_variant_price(self.macaw_blue_d, currency='BTC', quantity=Decimal('9.9999')), Price(Decimal('9.0'), currency='BTC')) self.assertEqual(get_variant_price(self.macaw_blue_d, currency='BTC', quantity=10), Price(Decimal('8.0'), currency='BTC')) self.assertEqual(get_variant_price(self.macaw_blue_d, currency='BTC', quantity=100), Price(Decimal('8.0'), currency='BTC')) self.assertEqual(get_variant_price(self.macaw_blue_a, currency='BTC', quantity=1), Price(Decimal('12.0'), currency='BTC')) self.assertEqual(get_variant_price(self.macaw_blue_a, currency='BTC', quantity=Decimal('4.9999')), Price(Decimal('12.0'), currency='BTC')) self.assertEqual(get_variant_price(self.macaw_blue_a, currency='BTC', quantity=5), Price(Decimal('11.0'), currency='BTC')) self.assertEqual(get_variant_price(self.macaw_blue_a, currency='BTC', quantity=Decimal('9.9999')), Price(Decimal('11.0'), currency='BTC')) self.assertEqual(get_variant_price(self.macaw_blue_a, currency='BTC', quantity=10), Price(Decimal('10.0'), currency='BTC')) self.assertEqual(get_variant_price(self.macaw_blue_a, currency='BTC', quantity=100), Price(Decimal('10.0'), currency='BTC'))
def test_basicprices(self): macaw_price = ProductPrice.objects.create(product=self.macaw, price=Decimal('10.0')) macaw_price.qty_overrides.create(min_qty=5, price=Decimal('9.0')) macaw_price.qty_overrides.create(min_qty=10, price=Decimal('8.0')) macaw_price.offsets.create(variant=self.macaw_blue_a, price_offset=Decimal('2.0')) self.assertEqual( get_variant_price(self.macaw_blue_d, currency='BTC', quantity=1), Price(Decimal('10.0'), currency='BTC')) self.assertEqual( get_variant_price(self.macaw_blue_d, currency='BTC', quantity=Decimal('4.9999')), Price(Decimal('10.0'), currency='BTC')) self.assertEqual( get_variant_price(self.macaw_blue_d, currency='BTC', quantity=5), Price(Decimal('9.0'), currency='BTC')) self.assertEqual( get_variant_price(self.macaw_blue_d, currency='BTC', quantity=Decimal('9.9999')), Price(Decimal('9.0'), currency='BTC')) self.assertEqual( get_variant_price(self.macaw_blue_d, currency='BTC', quantity=10), Price(Decimal('8.0'), currency='BTC')) self.assertEqual( get_variant_price(self.macaw_blue_d, currency='BTC', quantity=100), Price(Decimal('8.0'), currency='BTC')) self.assertEqual( get_variant_price(self.macaw_blue_a, currency='BTC', quantity=1), Price(Decimal('12.0'), currency='BTC')) self.assertEqual( get_variant_price(self.macaw_blue_a, currency='BTC', quantity=Decimal('4.9999')), Price(Decimal('12.0'), currency='BTC')) self.assertEqual( get_variant_price(self.macaw_blue_a, currency='BTC', quantity=5), Price(Decimal('11.0'), currency='BTC')) self.assertEqual( get_variant_price(self.macaw_blue_a, currency='BTC', quantity=Decimal('9.9999')), Price(Decimal('11.0'), currency='BTC')) self.assertEqual( get_variant_price(self.macaw_blue_a, currency='BTC', quantity=10), Price(Decimal('10.0'), currency='BTC')) self.assertEqual( get_variant_price(self.macaw_blue_a, currency='BTC', quantity=100), Price(Decimal('10.0'), currency='BTC'))