예제 #1
0
def _list_products_from_request(products, request, **kwargs):

    address_type = None
    tax_policy = settings_manager['tax_policy']
    if tax_policy:
        address_type = POLICY_CUSTOMER_ADDRESS_TYPES.get(tax_policy, None)

    default_zone = AddressZone.default(address_type)
    if default_zone is not None and not default_zone.spans(AddressZone.get_current(address_type)):
        products = products.set_bare(True)
        yield products
예제 #2
0
def _list_products_from_request(products, request, **kwargs):

    address_type = None
    tax_policy = settings_manager['tax_policy']
    if tax_policy:
        address_type = POLICY_CUSTOMER_ADDRESS_TYPES.get(tax_policy, None)

    default_zone = AddressZone.default(address_type)
    if default_zone is not None and not default_zone.spans(
            AddressZone.get_current(address_type)):
        products = products.set_bare(True)
        yield products
예제 #3
0
def _calculate(
    price,
    product=None,
    shipping_method=None,
    payment_method=None,
    bare=False,
    **kwargs
):

    if bare or price is None or TAX in price:
        return

    tax_policy = settings_manager['tax_policy']
    if tax_policy:
        address_type = POLICY_CUSTOMER_ADDRESS_TYPES.get(tax_policy, None)

    zone = AddressZone.get_current(address_type)
    taxes = Tax.objects.spans(zone)
    tax_rules = TaxRule.objects.none()

    if product:
        product_classes = ProductTaxClass.objects.for_product(product)
        tax_rules = TaxRule.objects.filter(product_classes__in=product_classes)
    elif shipping_method:
        tax_rules = TaxRule.objects.filter(applies_to_shipping_costs=True)
    elif payment_method:
        tax_rules = TaxRule.objects.filter(applies_to_payment_costs=True)

    if 'customer_group' in kwargs:
        customer_group = kwargs['customer_group']
    else:
        CustomerGroup.current_customer_group()

    tax_rules = tax_rules.filter(
        Q(customer_groups=customer_group) | Q(
            customer_groups=None
        )
    )
    taxes = taxes.polymorphic().filter(tax_rules__in=tax_rules).distinct()

    for tax in taxes:
        price = tax.apply(price)

    yield chaining.update(price=price)
    yield price
예제 #4
0
def _calculate(price,
               product=None,
               shipping_method=None,
               payment_method=None,
               bare=False,
               **kwargs):

    if bare or price is None or TAX in price:
        return

    tax_policy = settings_manager['tax_policy']
    if tax_policy:
        address_type = POLICY_CUSTOMER_ADDRESS_TYPES.get(tax_policy, None)

    zone = AddressZone.get_current(address_type)
    taxes = Tax.objects.spans(zone)
    tax_rules = TaxRule.objects.none()

    if product:
        product_classes = ProductTaxClass.objects.for_product(product)
        tax_rules = TaxRule.objects.filter(product_classes__in=product_classes)
    elif shipping_method:
        tax_rules = TaxRule.objects.filter(applies_to_shipping_costs=True)
    elif payment_method:
        tax_rules = TaxRule.objects.filter(applies_to_payment_costs=True)

    if 'customer_group' in kwargs:
        customer_group = kwargs['customer_group']
    else:
        CustomerGroup.current_customer_group()

    tax_rules = tax_rules.filter(
        Q(customer_groups=customer_group) | Q(customer_groups=None))
    taxes = taxes.polymorphic().filter(tax_rules__in=tax_rules).distinct()

    for tax in taxes:
        price = tax.apply(price)

    yield chaining.update(price=price)
    yield price