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
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
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
def test_amount_taxed_23(self): o = Order() o.amount = Decimal(123) o.tax = Decimal(23) self.assertEqual(o.total(), Decimal('151.29'))
def test_amount_taxed_0(self): o = Order() o.amount = Decimal(123) o.tax = Decimal(0) self.assertEqual(o.total(), Decimal('123'))
def test_amount_taxed_none(self): o = Order() o.amount = Decimal(123) o.tax = None self.assertEqual(o.total(), Decimal("123"))