def get_product_availability( product: Product, discounts: Iterable[DiscountInfo] = None, taxes=None, local_currency: str = None, ) -> ProductAvailability: discounted = product.get_price_range(discounts=discounts, taxes=taxes) undiscounted = product.get_price_range(taxes=taxes) discount = _get_total_discount(undiscounted, discounted) price_range_local, discount_local_currency = _get_product_price_range( discounted, undiscounted, local_currency) is_on_sale = product.is_visible and discount is not None return ProductAvailability( available=product.is_available, on_sale=is_on_sale, price_range=discounted, price_range_undiscounted=undiscounted, discount=discount, price_range_local_currency=price_range_local, discount_local_currency=discount_local_currency, )
def get_product_availability( product: Product, discounts: Iterable[DiscountInfo] = None, country=None, local_currency=None, extensions=None, ) -> ProductAvailability: if not extensions: extensions = get_extensions_manager() discounted_net_range = product.get_price_range(discounts=discounts) undiscounted_net_range = product.get_price_range() discounted = TaxedMoneyRange( start=extensions.apply_taxes_to_product( product, discounted_net_range.start, country ), stop=extensions.apply_taxes_to_product( product, discounted_net_range.stop, country ), ) undiscounted = TaxedMoneyRange( start=extensions.apply_taxes_to_product( product, undiscounted_net_range.start, country ), stop=extensions.apply_taxes_to_product( product, undiscounted_net_range.stop, country ), ) discount = _get_total_discount(undiscounted, discounted) price_range_local, discount_local_currency = _get_product_price_range( discounted, undiscounted, local_currency ) is_on_sale = product.is_visible and discount is not None return ProductAvailability( available=product.is_available, on_sale=is_on_sale, price_range=discounted, price_range_undiscounted=undiscounted, discount=discount, price_range_local_currency=price_range_local, discount_local_currency=discount_local_currency, )
def get_product_availability( product: Product, discounts: Iterable[DiscountInfo] = None, country: Optional[str] = None, local_currency: Optional[str] = None, extensions: Optional["ExtensionsManager"] = None, ) -> ProductAvailability: if not extensions: extensions = get_extensions_manager() discounted_net_range = product.get_price_range(discounts=discounts) undiscounted_net_range = product.get_price_range() discounted = TaxedMoneyRange( start=extensions.apply_taxes_to_product(product, discounted_net_range.start, country), stop=extensions.apply_taxes_to_product(product, discounted_net_range.stop, country), ) undiscounted = TaxedMoneyRange( start=extensions.apply_taxes_to_product(product, undiscounted_net_range.start, country), stop=extensions.apply_taxes_to_product(product, undiscounted_net_range.stop, country), ) discount = _get_total_discount_from_range(undiscounted, discounted) price_range_local, discount_local_currency = _get_product_price_range( discounted, undiscounted, local_currency) is_on_sale = product.is_visible and discount is not None country = country if country is not None else settings.DEFAULT_COUNTRY is_available = product.is_visible and is_product_in_stock(product, country) return ProductAvailability( on_sale=is_on_sale, price_range=discounted, price_range_undiscounted=undiscounted, discount=discount, price_range_local_currency=price_range_local, discount_local_currency=discount_local_currency, )
def get_product_availability( product: Product, discounts: Iterable[DiscountInfo] = None, country: Optional[str] = None, local_currency: Optional[str] = None, plugins: Optional["PluginsManager"] = None, ) -> ProductAvailability: if not plugins: plugins = get_plugins_manager() discounted_net_range = product.get_price_range(discounts=discounts) undiscounted_net_range = product.get_price_range() discounted = TaxedMoneyRange( start=plugins.apply_taxes_to_product(product, discounted_net_range.start, country), stop=plugins.apply_taxes_to_product(product, discounted_net_range.stop, country), ) undiscounted = TaxedMoneyRange( start=plugins.apply_taxes_to_product(product, undiscounted_net_range.start, country), stop=plugins.apply_taxes_to_product(product, undiscounted_net_range.stop, country), ) discount = _get_total_discount_from_range(undiscounted, discounted) price_range_local, discount_local_currency = _get_product_price_range( discounted, undiscounted, local_currency) is_on_sale = product.is_visible and discount is not None return ProductAvailability( on_sale=is_on_sale, price_range=discounted, price_range_undiscounted=undiscounted, discount=discount, price_range_local_currency=price_range_local, discount_local_currency=discount_local_currency, )
def get_product_availability( product: Product, discounts=None, taxes=None, local_currency=None ) -> ProductAvailability: discounted = product.get_price_range(discounts=discounts, taxes=taxes) undiscounted = product.get_price_range(taxes=taxes) discount = _get_total_discount(undiscounted, discounted) price_range_local, discount_local_currency = _get_product_price_range( discounted, undiscounted, local_currency ) is_on_sale = product.is_visible and discount is not None return ProductAvailability( available=product.is_available, on_sale=is_on_sale, price_range=discounted, price_range_undiscounted=undiscounted, discount=discount, price_range_local_currency=price_range_local, discount_local_currency=discount_local_currency, )