def __call__(self, context, item, quantity=1, include_taxes=None, allow_cache=True, supplier=None): options = PriceDisplayOptions.from_context(context) if options.hide_prices: return "" if include_taxes is None: include_taxes = options.include_taxes request = context.get('request') price_info = get_cached_price_info( request, item, quantity, include_taxes=include_taxes, supplier=supplier ) if allow_cache else None if not price_info: price_info = _get_priceful(request, item, quantity, supplier) if not price_info: return "" price_info = convert_taxness(request, item, price_info, include_taxes) if allow_cache: cache_price_info(request, item, quantity, price_info, include_taxes=include_taxes, supplier=supplier) return money(getattr(price_info, self.property_name))
def test_convert_taxness_without_conversion(taxes, price_cls): request = get_request() item = Product() priceful = _get_price_info(price_cls) calcs_done_before = DummyTaxModule.calculations_done result = convert_taxness(request, item, priceful, with_taxes=taxes) calcs_done_after = DummyTaxModule.calculations_done assert result == priceful assert result.price == price_cls(480, 'USD') assert result.base_price == price_cls(660, 'USD') assert result.quantity == 2 assert calcs_done_after == calcs_done_before
def __call__(self, context, product, quantity=1, allow_cache=True, supplier=None): """ :type product: E-Commerce.core.models.Product """ options = PriceDisplayOptions.from_context(context) if options.hide_prices: return ("", "") request = context.get('request') priced_products = get_many_cached_price_info( request, product, quantity, include_taxes=options.include_taxes, supplier=supplier ) if allow_cache else None if not priced_products: priced_children_key = PRICED_CHILDREN_CACHE_KEY % (product.id, quantity) priced_products = [] if hasattr(request, priced_children_key): priced_children = getattr(request, priced_children_key) else: priced_children = product.get_priced_children(request, quantity) or [ (product, _get_priceful(request, product, quantity, supplier)) ] setattr(request, priced_children_key, priced_children) for child_product, price_info in priced_children: if not price_info: continue priceful = convert_taxness(request, child_product, price_info, options.include_taxes) priced_products.append(priceful) if priced_products and allow_cache: cache_many_price_info( request, product, quantity, priced_products, include_taxes=options.include_taxes, supplier=supplier) if not priced_products: return ("", "") return (money(priced_products[0].price), money(priced_products[-1].price))
def test_convert_taxness_taxless_to_taxful(): request = get_request() tax_class = TaxClass() item = Product(tax_class=tax_class) priceful = _get_price_info(TaxlessPrice) calcs_done_before = DummyTaxModule.calculations_done result = convert_taxness(request, item, priceful, with_taxes=True) calcs_done_after = DummyTaxModule.calculations_done assert result != priceful assert result.price == TaxfulPrice(576, 'USD') assert result.base_price == TaxfulPrice(792, 'USD') assert result.quantity == 2 assert result.tax_amount == Money(96, 'USD') assert result.taxful_price == result.price assert result.taxless_price == priceful.price assert calcs_done_after == calcs_done_before + 2
def render_price_property(request, item, priceful, property_name='price'): """ Render price property of a Priceful object. :type request: django.http.HttpRequest :type item: E-Commerce.core.taxing.TaxableItem :type priceful: E-Commerce.core.pricing.Priceful :type propert_name: str :rtype: str """ options = PriceDisplayOptions.from_context({'request': request}) if options.hide_prices: return "" new_priceful = convert_taxness( request, item, priceful, options.include_taxes) price_value = getattr(new_priceful, property_name) return money(price_value)
def _get_product_price_info(self, shop_product): context = self._get_pricing_context(self.context["request"], shop_product.shop) price_info = shop_product.product.get_price_info(context) return convert_taxness(self.context["request"], shop_product.product, price_info, True)