Ejemplo n.º 1
0
    def __call__(self,
                 context,
                 item,
                 quantity=1,
                 include_taxes=None,
                 allow_cache=True):
        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) if allow_cache else None

        if not price_info:
            price_info = _get_priceful(request, item, quantity)

            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)

        return money(getattr(price_info, self.property_name))
Ejemplo n.º 2
0
    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 __call__(self,
                 context,
                 product,
                 quantity=1,
                 allow_cache=True,
                 supplier=None):
        """
        :type product: shuup.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))
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
    def __call__(self, context, product, quantity=1, allow_cache=True, supplier=None):
        """
        :type product: shuup.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))
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
def test_convert_taxness_taxful_to_taxless():
    request = get_request()
    tax_class = TaxClass()
    item = Product(tax_class=tax_class)
    priceful = _get_price_info(TaxfulPrice)
    calcs_done_before = DummyTaxModule.calculations_done
    result = convert_taxness(request, item, priceful, with_taxes=False)
    calcs_done_after = DummyTaxModule.calculations_done
    assert result != priceful
    assert (result.price - TaxlessPrice(400, "USD")).value < 0.00001
    assert result.base_price == TaxlessPrice(550, "USD")
    assert result.quantity == 2
    assert result.tax_amount == Money(80, "USD")
    assert result.taxless_price == result.price
    assert result.taxful_price == priceful.price
    assert calcs_done_after == calcs_done_before + 2
Ejemplo n.º 10
0
def render_price_property(request, item, priceful, property_name='price'):
    """
    Render price property of a Priceful object.

    :type request: django.http.HttpRequest
    :type item: shuup.core.taxing.TaxableItem
    :type priceful: shuup.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)
Ejemplo n.º 11
0
def render_price_property(request, item, priceful, property_name='price'):
    """
    Render price property of a Priceful object.

    :type request: django.http.HttpRequest
    :type item: shuup.core.taxing.TaxableItem
    :type priceful: shuup.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)
Ejemplo n.º 12
0
 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)
Ejemplo n.º 13
0
 def resolve_price_info(self, info, **kwargs):
     customer = get_person_contact(info.context.user)
     price_context = PricingContext(shop=self.shop, customer=customer)
     price_info = self.product.get_price_info(price_context)
     return convert_taxness(info.context, self.product, price_info, True)
Ejemplo n.º 14
0
 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)