Example #1
0
    def recalculate(self, amount, billing_info):
        """
        Calculates and return pre-filled Order
        """
        order = Order(pk=-1)
        order.amount = amount
        order.currency = self.get_currency()
        country = getattr(billing_info, 'country', None)
        if country is None:
            country = get_country_code(self.request)
        else:
            country = country.code
        tax_number = getattr(billing_info, 'tax_number', None)

        # Calculating tax can be complex task (e.g. VIES webservice call)
        # To ensure that tax calculated on order preview will be the same on final order
        # tax rate is cached for a given billing data (as this value only depends on it)
        tax_session_key = "tax_%s_%s" % (tax_number, country)

        tax = self.request.session.get(tax_session_key)
        if tax is None:
            taxation_policy = getattr(settings, 'PLANS_TAXATION_POLICY', None)
            if not taxation_policy:
                raise ImproperlyConfigured('PLANS_TAXATION_POLICY is not set')
            taxation_policy = import_name(taxation_policy)
            tax = str(taxation_policy.get_tax_rate(tax_number, country))
            # Because taxation policy could return None which clutters with saving this value
            # into cache, we use str() representation of this value
            self.request.session[tax_session_key] = tax

        order.tax = Decimal(tax) if tax != 'None' else None

        return order
Example #2
0
    def recalculate(self, amount, billing_info):
        """
        Calculates and return pre-filled Order
        """
        order = Order(pk=-1)
        order.amount = amount
        order.currency = self.get_currency()
        country = getattr(billing_info, 'country', None)
        if not country is None:
            country = country.code
        tax_number = getattr(billing_info, 'tax_number', None)

        # Calculating session can be complex task (e.g. VIES webservice call)
        # To ensure that once we get what tax we display to confirmation it will
        # not change, tax rate is cached for a given billing data (as it mainly depends on it)
        tax_session_key = "tax_%s_%s" % (tax_number, country)

        tax = self.request.session.get(tax_session_key)

        if tax:
            order.tax = tax[0] #retreiving tax as a tuple to avoid None problems
        else:
            taxation_policy = getattr(settings, 'TAXATION_POLICY' , None)
            if not taxation_policy:
                raise ImproperlyConfigured('TAXATION_POLICY is not set')
            taxation_policy = import_name(taxation_policy)
            order.tax = taxation_policy.get_tax_rate(tax_number, country)
            self.request.session[tax_session_key] = (order.tax, )

        return order
Example #3
0
    def recalculate(self, amount, billing_info):
        """
        Calculates and return pre-filled Order
        """
        order = Order(pk=-1)
        order.amount = amount
        order.currency = self.get_currency()
        country = getattr(billing_info, 'country', None)
        if not country is None:
            country = country.code
        tax_number = getattr(billing_info, 'tax_number', None)

        # Calculating session can be complex task (e.g. VIES webservice call)
        # To ensure that once we get what tax we display to confirmation it will
        # not change, tax rate is cached for a given billing data (as it mainly depends on it)
        tax_session_key = "tax_%s_%s" % (tax_number, country)

        tax = self.request.session.get(tax_session_key)

        if tax:
            order.tax = tax[
                0]  # retreiving tax as a tuple to avoid None problems
        else:
            taxation_policy = getattr(settings, 'TAXATION_POLICY', None)
            if not taxation_policy:
                raise ImproperlyConfigured('TAXATION_POLICY is not set')
            taxation_policy = import_name(taxation_policy)
            order.tax = taxation_policy.get_tax_rate(tax_number, country)
            self.request.session[tax_session_key] = (order.tax, )

        return order
Example #4
0
    def recalculate(self, amount, billing_info):
        """
        Calculates and return pre-filled Order
        """
        order = Order(pk=-1)
        order.amount = amount
        order.currency = self.get_currency()
        country = getattr(billing_info, "country", None)
        if not country is None:
            country = country.code
        tax_number = getattr(billing_info, "tax_number", None)

        # Calculating tax can be complex task (e.g. VIES webservice call)
        # To ensure that tax calculated on order preview will be the same on
        # final order tax rate is cached for a given billing data (as this
        # value only depends on it)
        tax_session_key = "tax_%s_%s" % (tax_number, country)

        tax = self.request.session.get(tax_session_key)
        if tax is None:
            tax = getattr(settings, "PLANS_TAX", None)
            if tax is None:
                taxation_policy = getattr(settings, "PLANS_TAXATION_POLICY", None)
                if not taxation_policy:
                    raise ImproperlyConfigured("PLANS_TAXATION_POLICY is not set")
                taxation_policy = import_name(taxation_policy)
                tax = str(taxation_policy.get_tax_rate(tax_number, country))
                # Because taxation policy could return None which clutters with saving this value
                # into cache, we use str() representation of this value
                self.request.session[tax_session_key] = tax

        order.tax = Decimal(tax) if tax != "None" else None

        return order
Example #5
0
    def recalculate(self, amount, billing_info):
        """
        Calculates and return pre-filled Order
        """
        order = Order(pk=-1)
        order.amount = amount
        order.currency = self.get_currency()
        country = getattr(billing_info, 'country', None)
        if not country is None:
            country = country.code
        tax_number = getattr(billing_info, 'tax_number', None)

        # Calculating session can be complex task (e.g. VIES webservice call)
        # To ensure that once we get what tax we display to confirmation it will
        # not change, tax rate is cached for a given billing data (as it mainly depends on it)
        tax_session_key = "tax_%s_%s" % (tax_number, country)

        tax = self.request.session.get(tax_session_key)

        if tax is None:
            taxation_policy = getattr(settings, 'TAXATION_POLICY', None)
            if not taxation_policy:
                raise ImproperlyConfigured('TAXATION_POLICY is not set')
            taxation_policy = import_name(taxation_policy)
            tax = str(taxation_policy.get_tax_rate(tax_number, country))
            # Because taxation policy could return None which clutters with saving this value
            # into cache, we use str() representation of this value
            self.request.session[tax_session_key] = tax

        order.tax = Decimal(tax) if tax != 'None' else None

        return order