895 lines
28 KiB
Python
895 lines
28 KiB
Python
|
from odoo.addons.account.tests.common import TestTaxCommon
|
||
|
from odoo.tests import tagged
|
||
|
|
||
|
|
||
|
@tagged('post_install', '-at_install')
|
||
|
class TestTaxesComputation(TestTaxCommon):
|
||
|
|
||
|
def test_taxes_ordering(self):
|
||
|
tax_division = self.division_tax(10.0, sequence=1)
|
||
|
tax_fixed = self.fixed_tax(10.0, sequence=2)
|
||
|
tax_percent = self.percent_tax(10.0, sequence=3)
|
||
|
tax_group = self.group_of_taxes(tax_fixed + tax_percent, sequence=4)
|
||
|
|
||
|
self.assert_taxes_computation(
|
||
|
tax_group | tax_division,
|
||
|
200.0,
|
||
|
{
|
||
|
'total_included': 252.22,
|
||
|
'total_excluded': 200.0,
|
||
|
'taxes_data': (
|
||
|
(200.0, 22.22),
|
||
|
(200.0, 10.0),
|
||
|
(200.0, 20.0),
|
||
|
),
|
||
|
},
|
||
|
)
|
||
|
|
||
|
tax_percent1 = self.percent_tax(0.0, price_include_override='tax_included')
|
||
|
tax_percent2 = self.percent_tax(8.0, price_include_override='tax_included')
|
||
|
tax_group1 = self.group_of_taxes(tax_percent1, sequence=5)
|
||
|
tax_group2 = self.group_of_taxes(tax_percent2, sequence=6)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_group1 | tax_group2,
|
||
|
124.4,
|
||
|
{
|
||
|
'total_included': 124.4,
|
||
|
'total_excluded': 115.19,
|
||
|
'taxes_data': (
|
||
|
(115.19, 0.0),
|
||
|
(115.19, 9.21),
|
||
|
),
|
||
|
},
|
||
|
)
|
||
|
self._run_js_tests()
|
||
|
|
||
|
def test_random_case_1(self):
|
||
|
tax_percent_8_price_included = self.percent_tax(8.0, price_include_override='tax_included')
|
||
|
tax_percent_0_price_included = self.percent_tax(0.0, price_include_override='tax_included')
|
||
|
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_8_price_included + tax_percent_0_price_included,
|
||
|
124.40,
|
||
|
{
|
||
|
'total_included': 124.40,
|
||
|
'total_excluded': 115.19,
|
||
|
'taxes_data': (
|
||
|
(115.19, 9.21),
|
||
|
(115.19, 0.0),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_per_line',
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_8_price_included + tax_percent_0_price_included,
|
||
|
124.40,
|
||
|
{
|
||
|
'total_included': 124.40,
|
||
|
'total_excluded': 115.185185,
|
||
|
'taxes_data': (
|
||
|
(115.185185, 9.214815),
|
||
|
(115.185185, 0.0),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
self._run_js_tests()
|
||
|
|
||
|
def test_random_case_2(self):
|
||
|
tax_percent_5_price_included = self.percent_tax(5.0, price_include_override='tax_included')
|
||
|
currency_dp_half = 0.05
|
||
|
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_5_price_included,
|
||
|
5.0,
|
||
|
{
|
||
|
'total_included': 5.0,
|
||
|
'total_excluded': 4.75,
|
||
|
'taxes_data': (
|
||
|
(4.75, 0.25),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_per_line',
|
||
|
precision_rounding=currency_dp_half,
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_5_price_included,
|
||
|
10.0,
|
||
|
{
|
||
|
'total_included': 10.0,
|
||
|
'total_excluded': 9.5,
|
||
|
'taxes_data': (
|
||
|
(9.5, 0.5),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_per_line',
|
||
|
precision_rounding=currency_dp_half,
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_5_price_included,
|
||
|
50.0,
|
||
|
{
|
||
|
'total_included': 50.0,
|
||
|
'total_excluded': 47.6,
|
||
|
'taxes_data': (
|
||
|
(47.6, 2.4),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_per_line',
|
||
|
precision_rounding=currency_dp_half,
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_5_price_included,
|
||
|
5.0,
|
||
|
{
|
||
|
'total_included': 5.0,
|
||
|
'total_excluded': 4.761905,
|
||
|
'taxes_data': (
|
||
|
(4.761905, 0.238095),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_5_price_included,
|
||
|
10.0,
|
||
|
{
|
||
|
'total_included': 10.0,
|
||
|
'total_excluded': 9.52381,
|
||
|
'taxes_data': (
|
||
|
(9.52381, 0.47619),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_5_price_included,
|
||
|
50.0,
|
||
|
{
|
||
|
'total_included': 50.0,
|
||
|
'total_excluded': 47.619048,
|
||
|
'taxes_data': (
|
||
|
(47.619048, 2.380952),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
self._run_js_tests()
|
||
|
|
||
|
def test_random_case_3(self):
|
||
|
tax_percent_15_price_excluded = self.percent_tax(15.0)
|
||
|
tax_percent_5_5_price_included = self.percent_tax(5.5, price_include_override='tax_included')
|
||
|
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_15_price_excluded + tax_percent_5_5_price_included,
|
||
|
2300.0,
|
||
|
{
|
||
|
'total_included': 2627.01,
|
||
|
'total_excluded': 2180.09,
|
||
|
'taxes_data': (
|
||
|
(2180.09, 327.01),
|
||
|
(2180.09, 119.91),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_per_line',
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_15_price_excluded + tax_percent_5_5_price_included,
|
||
|
2300.0,
|
||
|
{
|
||
|
'total_included': 2627.014218,
|
||
|
'total_excluded': 2180.094787,
|
||
|
'taxes_data': (
|
||
|
(2180.094787, 327.014218),
|
||
|
(2180.094787, 119.905213),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
self._run_js_tests()
|
||
|
|
||
|
def test_random_case_4(self):
|
||
|
tax_percent_12_price_included = self.percent_tax(12.0, price_include_override='tax_included')
|
||
|
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_12_price_included,
|
||
|
52.50,
|
||
|
{
|
||
|
'total_included': 52.50,
|
||
|
'total_excluded': 46.87,
|
||
|
'taxes_data': (
|
||
|
(46.87, 5.63),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_per_line',
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_12_price_included,
|
||
|
52.50,
|
||
|
{
|
||
|
'total_included': 52.50,
|
||
|
'total_excluded': 46.875,
|
||
|
'taxes_data': (
|
||
|
(46.875, 5.625),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
self._run_js_tests()
|
||
|
|
||
|
def test_random_case_5(self):
|
||
|
tax_percent_19 = self.percent_tax(19.0)
|
||
|
tax_percent_19_price_included = self.percent_tax(19.0, price_include_override='tax_included')
|
||
|
currency_dp_0 = 1.0
|
||
|
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_19,
|
||
|
22689.0,
|
||
|
{
|
||
|
'total_included': 27000.0,
|
||
|
'total_excluded': 22689.0,
|
||
|
'taxes_data': (
|
||
|
(22689, 4311),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_per_line',
|
||
|
precision_rounding=currency_dp_0,
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_19,
|
||
|
9176.0,
|
||
|
{
|
||
|
'total_included': 10919.0,
|
||
|
'total_excluded': 9176.0,
|
||
|
'taxes_data': (
|
||
|
(9176, 1743),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_per_line',
|
||
|
precision_rounding=currency_dp_0,
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_19_price_included,
|
||
|
27000.0,
|
||
|
{
|
||
|
'total_included': 27000.0,
|
||
|
'total_excluded': 22689.0,
|
||
|
'taxes_data': (
|
||
|
(22689.0, 4311.0),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_per_line',
|
||
|
precision_rounding=currency_dp_0,
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_19_price_included,
|
||
|
10920.0,
|
||
|
{
|
||
|
'total_included': 10920.0,
|
||
|
'total_excluded': 9176.0,
|
||
|
'taxes_data': (
|
||
|
(9176.0, 1744.0),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_per_line',
|
||
|
precision_rounding=currency_dp_0,
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_19,
|
||
|
22689.0,
|
||
|
{
|
||
|
'total_included': 26999.91,
|
||
|
'total_excluded': 22689.0,
|
||
|
'taxes_data': (
|
||
|
(22689, 4310.91),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_19,
|
||
|
9176.0,
|
||
|
{
|
||
|
'total_included': 10919.44,
|
||
|
'total_excluded': 9176.0,
|
||
|
'taxes_data': (
|
||
|
(9176, 1743.44),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_19_price_included,
|
||
|
27000.0,
|
||
|
{
|
||
|
'total_included': 27000.0,
|
||
|
'total_excluded': 22689.07563,
|
||
|
'taxes_data': (
|
||
|
(22689.07563, 4310.92437),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_19_price_included,
|
||
|
10920.0,
|
||
|
{
|
||
|
'total_included': 10920.0,
|
||
|
'total_excluded': 9176.470588,
|
||
|
'taxes_data': (
|
||
|
(9176.470588, 1743.529412),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
self._run_js_tests()
|
||
|
|
||
|
def test_random_case_6(self):
|
||
|
tax_percent_20_price_included = self.percent_tax(20.0, price_include_override='tax_included')
|
||
|
currency_dp_6 = 0.000001
|
||
|
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_20_price_included,
|
||
|
399.999999,
|
||
|
{
|
||
|
'total_included': 399.999999,
|
||
|
'total_excluded': 333.333332,
|
||
|
'taxes_data': (
|
||
|
# 399.999999 / 1.20 * 0.20 ~= 66.666667
|
||
|
# 399.999999 - 66.666667 = 333.333332
|
||
|
(333.333332, 66.666667),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_per_line',
|
||
|
precision_rounding=currency_dp_6,
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_20_price_included,
|
||
|
399.999999,
|
||
|
{
|
||
|
'total_included': 399.999999,
|
||
|
'total_excluded': 333.3333325,
|
||
|
'taxes_data': (
|
||
|
(333.3333325, 66.6666665),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
self._run_js_tests()
|
||
|
|
||
|
def test_random_case_7(self):
|
||
|
tax_percent_21_price_included = self.percent_tax(21.0, price_include_override='tax_included')
|
||
|
currency_dp_6 = 0.000001
|
||
|
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_21_price_included,
|
||
|
11.90,
|
||
|
{
|
||
|
'total_included': 11.90,
|
||
|
'total_excluded': 9.83,
|
||
|
'taxes_data': (
|
||
|
(9.83, 2.07),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_per_line',
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_21_price_included,
|
||
|
2.80,
|
||
|
{
|
||
|
'total_included': 2.80,
|
||
|
'total_excluded': 2.31,
|
||
|
'taxes_data': (
|
||
|
(2.31, 0.49),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_per_line',
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_21_price_included,
|
||
|
7.0,
|
||
|
{
|
||
|
'total_included': 7.0,
|
||
|
'total_excluded': 5.785124,
|
||
|
'taxes_data': (
|
||
|
(5.785124, 1.214876),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_per_line',
|
||
|
precision_rounding=currency_dp_6,
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_21_price_included,
|
||
|
11.90,
|
||
|
{
|
||
|
'total_included': 11.90,
|
||
|
'total_excluded': 9.834711,
|
||
|
'taxes_data': (
|
||
|
(9.834711, 2.065289),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_21_price_included,
|
||
|
2.80,
|
||
|
{
|
||
|
'total_included': 2.80,
|
||
|
'total_excluded': 2.31405,
|
||
|
'taxes_data': (
|
||
|
(2.31405, 0.48595),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
self.assert_taxes_computation(
|
||
|
tax_percent_21_price_included,
|
||
|
7.0,
|
||
|
{
|
||
|
'total_included': 7.0,
|
||
|
'total_excluded': 5.785124,
|
||
|
'taxes_data': (
|
||
|
(5.785124, 1.214876),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
self._run_js_tests()
|
||
|
|
||
|
def test_random_case_8(self):
|
||
|
tax_percent_20_withholding = self.percent_tax(-20.0)
|
||
|
tax_percent_4 = self.percent_tax(4.0, include_base_amount=True)
|
||
|
tax_percent_22 = self.percent_tax(22.0)
|
||
|
taxes = tax_percent_20_withholding + tax_percent_4 + tax_percent_22
|
||
|
|
||
|
self.assert_taxes_computation(
|
||
|
taxes,
|
||
|
50.0,
|
||
|
{
|
||
|
'total_included': 53.44,
|
||
|
'total_excluded': 50.0,
|
||
|
'taxes_data': (
|
||
|
(50.0, -10.0),
|
||
|
(50.0, 2.0),
|
||
|
(52.0, 11.44),
|
||
|
),
|
||
|
},
|
||
|
)
|
||
|
self._run_js_tests()
|
||
|
|
||
|
def test_random_case_9(self):
|
||
|
tax_division_100 = self.division_tax(100.0, price_include_override='tax_included')
|
||
|
|
||
|
self.assert_taxes_computation(
|
||
|
tax_division_100,
|
||
|
100.0,
|
||
|
{
|
||
|
'total_included': 100.0,
|
||
|
'total_excluded': 0.0,
|
||
|
'taxes_data': (
|
||
|
(0.0, 100.0),
|
||
|
),
|
||
|
},
|
||
|
)
|
||
|
self._run_js_tests()
|
||
|
|
||
|
def test_fixed_tax_price_included_affect_base_on_0(self):
|
||
|
tax = self.fixed_tax(0.05, price_include_override='tax_included', include_base_amount=True)
|
||
|
self.assert_taxes_computation(
|
||
|
tax,
|
||
|
0.0,
|
||
|
{
|
||
|
'total_included': 0.0,
|
||
|
'total_excluded': -0.05,
|
||
|
'taxes_data': (
|
||
|
(-0.05, 0.05),
|
||
|
),
|
||
|
},
|
||
|
)
|
||
|
self._run_js_tests()
|
||
|
|
||
|
def test_percent_taxes_for_l10n_in(self):
|
||
|
tax1 = self.percent_tax(6)
|
||
|
tax2 = self.percent_tax(6)
|
||
|
tax3 = self.percent_tax(3)
|
||
|
|
||
|
self.assert_taxes_computation(
|
||
|
tax1 + tax2 + tax3,
|
||
|
100.0,
|
||
|
{
|
||
|
'total_included': 115.0,
|
||
|
'total_excluded': 100.0,
|
||
|
'taxes_data': (
|
||
|
(100.0, 6.0),
|
||
|
(100.0, 6.0),
|
||
|
(100.0, 3.0),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
|
||
|
# tax price_incl incl_base_amount is_base_affected
|
||
|
# ----------------------------------------------------------------
|
||
|
# tax1 T T
|
||
|
# tax2 T
|
||
|
# tax3 T
|
||
|
tax1.include_base_amount = True
|
||
|
self.assert_taxes_computation(
|
||
|
tax1 + tax2 + tax3,
|
||
|
100.0,
|
||
|
{
|
||
|
'total_included': 115.54,
|
||
|
'total_excluded': 100.0,
|
||
|
'taxes_data': (
|
||
|
(100.0, 6.0),
|
||
|
(106.0, 6.36),
|
||
|
(106.0, 3.18),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
|
||
|
# tax price_incl incl_base_amount is_base_affected
|
||
|
# ----------------------------------------------------------------
|
||
|
# tax1 T T
|
||
|
# tax2 T T
|
||
|
# tax3 T
|
||
|
tax2.include_base_amount = True
|
||
|
self.assert_taxes_computation(
|
||
|
tax1 + tax2 + tax3,
|
||
|
100.0,
|
||
|
{
|
||
|
'total_included': 115.7308,
|
||
|
'total_excluded': 100.0,
|
||
|
'taxes_data': (
|
||
|
(100.0, 6.0),
|
||
|
(106.0, 6.36),
|
||
|
(112.36, 3.3708),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
excluded_special_modes=['total_included'], # Impossible.
|
||
|
)
|
||
|
|
||
|
# tax price_incl incl_base_amount is_base_affected
|
||
|
# ----------------------------------------------------------------
|
||
|
# tax1 T T
|
||
|
# tax2 T
|
||
|
# tax3 T
|
||
|
tax2.is_base_affected = False
|
||
|
self.assert_taxes_computation(
|
||
|
tax1 + tax2 + tax3,
|
||
|
100.0,
|
||
|
{
|
||
|
'total_included': 115.36,
|
||
|
'total_excluded': 100.0,
|
||
|
'taxes_data': (
|
||
|
(100.0, 6.0),
|
||
|
(100.0, 6.0),
|
||
|
(112.0, 3.36),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
|
||
|
# tax price_incl incl_base_amount is_base_affected
|
||
|
# ----------------------------------------------------------------
|
||
|
# tax1 T T T
|
||
|
# tax2 T T
|
||
|
# tax3 T
|
||
|
tax1.price_include_override = 'tax_included'
|
||
|
tax2.price_include_override = 'tax_included'
|
||
|
self.assert_taxes_computation(
|
||
|
tax1 + tax2 + tax3,
|
||
|
112.0,
|
||
|
{
|
||
|
'total_included': 115.36,
|
||
|
'total_excluded': 100.0,
|
||
|
'taxes_data': (
|
||
|
(100.0, 6.0),
|
||
|
(100.0, 6.0),
|
||
|
(112.0, 3.36),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
|
||
|
# Ensure tax1 & tax2 give always the same result.
|
||
|
self.assert_taxes_computation(
|
||
|
tax1 + tax2,
|
||
|
17.79,
|
||
|
{
|
||
|
'total_included': 17.79,
|
||
|
'total_excluded': 15.883929,
|
||
|
'taxes_data': (
|
||
|
(15.883929, 0.953036),
|
||
|
(15.883929, 0.953036),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
self._run_js_tests()
|
||
|
|
||
|
def test_division_taxes_for_l10n_br(self):
|
||
|
tax1 = self.division_tax(5)
|
||
|
tax2 = self.division_tax(3)
|
||
|
tax3 = self.division_tax(0.65)
|
||
|
tax4 = self.division_tax(9)
|
||
|
tax5 = self.division_tax(15)
|
||
|
|
||
|
# Same of tax4/tax5 except the amount is based on 32% of the base amount.
|
||
|
self.assert_taxes_computation(
|
||
|
tax1 + tax2 + tax3 + tax4 + tax5,
|
||
|
32.33,
|
||
|
{
|
||
|
'total_included': 48.00297,
|
||
|
'total_excluded': 32.33,
|
||
|
'taxes_data': (
|
||
|
(32.33, 2.400148),
|
||
|
(32.33, 1.440089),
|
||
|
(32.33, 0.312019),
|
||
|
(32.33, 4.320267),
|
||
|
(32.33, 7.200445),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
|
||
|
(tax1 + tax2 + tax3 + tax4 + tax5).price_include_override = 'tax_included'
|
||
|
self.assert_taxes_computation(
|
||
|
tax1 + tax2 + tax3 + tax4 + tax5,
|
||
|
48.0,
|
||
|
{
|
||
|
'total_included': 48.0,
|
||
|
'total_excluded': 32.328,
|
||
|
'taxes_data': (
|
||
|
(32.328, 2.4),
|
||
|
(32.328, 1.44),
|
||
|
(32.328, 0.312),
|
||
|
(32.328, 4.32),
|
||
|
(32.328, 7.2),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
self._run_js_tests()
|
||
|
|
||
|
def test_fixed_taxes_for_l10n_be(self):
|
||
|
tax1 = self.fixed_tax(1)
|
||
|
tax2 = self.percent_tax(21)
|
||
|
tax3 = self.fixed_tax(2)
|
||
|
|
||
|
self.assert_taxes_computation(
|
||
|
tax1 + tax2 + tax3,
|
||
|
20.0,
|
||
|
{
|
||
|
'total_included': 136.0,
|
||
|
'total_excluded': 100.0,
|
||
|
'taxes_data': (
|
||
|
(100.0, 5.0),
|
||
|
(100.0, 21.0),
|
||
|
(100.0, 10.0),
|
||
|
),
|
||
|
},
|
||
|
quantity=5,
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
|
||
|
# tax price_incl incl_base_amount
|
||
|
# -----------------------------------------------
|
||
|
# tax1 T
|
||
|
# tax2
|
||
|
# tax3
|
||
|
tax1.include_base_amount = True
|
||
|
self.assert_taxes_computation(
|
||
|
tax1 + tax2 + tax3,
|
||
|
19.0,
|
||
|
{
|
||
|
'total_included': 131.0,
|
||
|
'total_excluded': 95.0,
|
||
|
'taxes_data': (
|
||
|
(95.0, 5.0),
|
||
|
(100.0, 21.0),
|
||
|
(100.0, 10.0),
|
||
|
),
|
||
|
},
|
||
|
quantity=5,
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
|
||
|
# tax price_incl incl_base_amount
|
||
|
# -----------------------------------------------
|
||
|
# tax1 T
|
||
|
# tax2 T
|
||
|
# tax3
|
||
|
tax2.price_include_override = 'tax_included'
|
||
|
self.assert_taxes_computation(
|
||
|
tax1 + tax2 + tax3,
|
||
|
120.0,
|
||
|
{
|
||
|
'total_included': 123.0,
|
||
|
'total_excluded': 99.0,
|
||
|
'taxes_data': (
|
||
|
(99.0, 1.0),
|
||
|
(100.0, 21.0),
|
||
|
(121.0, 2.0),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
|
||
|
# tax price_incl incl_base_amount
|
||
|
# -----------------------------------------------
|
||
|
# tax1 T
|
||
|
# tax2 T T
|
||
|
# tax3
|
||
|
tax2.include_base_amount = True
|
||
|
self.assert_taxes_computation(
|
||
|
tax1 + tax2 + tax3,
|
||
|
120.0,
|
||
|
{
|
||
|
'total_included': 123.0,
|
||
|
'total_excluded': 99.0,
|
||
|
'taxes_data': (
|
||
|
(99.0, 1.0),
|
||
|
(100.0, 21.0),
|
||
|
(121.0, 2.0),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
|
||
|
# tax price_incl incl_base_amount
|
||
|
# -----------------------------------------------
|
||
|
# tax1
|
||
|
# tax2 T T
|
||
|
# tax3
|
||
|
tax1.include_base_amount = False
|
||
|
self.assert_taxes_computation(
|
||
|
tax1 + tax2 + tax3,
|
||
|
121.0,
|
||
|
{
|
||
|
'total_included': 124.0,
|
||
|
'total_excluded': 100.0,
|
||
|
'taxes_data': (
|
||
|
(100.0, 1.0),
|
||
|
(100.0, 21.0),
|
||
|
(121.0, 2.0),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
|
||
|
# tax price_incl incl_base_amount
|
||
|
# -----------------------------------------------
|
||
|
# tax1
|
||
|
# tax2 T
|
||
|
# tax3
|
||
|
tax2.price_include_override = 'tax_excluded'
|
||
|
self.assert_taxes_computation(
|
||
|
tax1 + tax2 + tax3,
|
||
|
100.0,
|
||
|
{
|
||
|
'total_included': 124.0,
|
||
|
'total_excluded': 100.0,
|
||
|
'taxes_data': (
|
||
|
(100.0, 1.0),
|
||
|
(100.0, 21.0),
|
||
|
(121.0, 2.0),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally'
|
||
|
)
|
||
|
|
||
|
# tax price_incl incl_base_amount
|
||
|
# -----------------------------------------------
|
||
|
# tax1 T
|
||
|
# tax2 T T
|
||
|
# tax3
|
||
|
tax1.price_include_override = 'tax_included'
|
||
|
tax2.price_include_override = 'tax_included'
|
||
|
self.assert_taxes_computation(
|
||
|
tax1 + tax2 + tax3,
|
||
|
122.0,
|
||
|
{
|
||
|
'total_included': 124.0,
|
||
|
'total_excluded': 100.0,
|
||
|
'taxes_data': (
|
||
|
(100.0, 1.0),
|
||
|
(100.0, 21.0),
|
||
|
(122.0, 2.0),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
|
||
|
# tax price_incl incl_base_amount
|
||
|
# -----------------------------------------------
|
||
|
# tax1 T
|
||
|
# tax2 T
|
||
|
# tax3
|
||
|
tax2.include_base_amount = False
|
||
|
self.assert_taxes_computation(
|
||
|
tax1 + tax2 + tax3,
|
||
|
122.0,
|
||
|
{
|
||
|
'total_included': 124.0,
|
||
|
'total_excluded': 100.0,
|
||
|
'taxes_data': (
|
||
|
(100.0, 1.0),
|
||
|
(100.0, 21.0),
|
||
|
(122.0, 2.0),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
|
||
|
# tax price_incl incl_base_amount
|
||
|
# -----------------------------------------------
|
||
|
# tax1 T T
|
||
|
# tax2 T T
|
||
|
# tax3
|
||
|
tax1.include_base_amount = True
|
||
|
tax2.include_base_amount = True
|
||
|
self.assert_taxes_computation(
|
||
|
tax1 + tax2 + tax3,
|
||
|
121.0,
|
||
|
{
|
||
|
'total_included': 123.0,
|
||
|
'total_excluded': 99.0,
|
||
|
'taxes_data': (
|
||
|
(99.0, 1.0),
|
||
|
(100.0, 21.0),
|
||
|
(121.0, 2.0),
|
||
|
),
|
||
|
},
|
||
|
rounding_method='round_globally',
|
||
|
)
|
||
|
self._run_js_tests()
|
||
|
|
||
|
def test_adapt_price_unit_to_another_taxes(self):
|
||
|
tax_fixed_incl = self.fixed_tax(10, price_include_override='tax_included')
|
||
|
tax_fixed_excl = self.fixed_tax(10, price_include_override='tax_excluded')
|
||
|
tax_include_src = self.percent_tax(21, price_include_override='tax_included')
|
||
|
tax_include_dst = self.percent_tax(6, price_include_override='tax_included')
|
||
|
tax_exclude_src = self.percent_tax(15, price_include_override='tax_excluded')
|
||
|
tax_exclude_dst = self.percent_tax(21, price_include_override='tax_excluded')
|
||
|
|
||
|
self.assert_adapt_price_unit_to_another_taxes(
|
||
|
121.0,
|
||
|
tax_include_src,
|
||
|
tax_include_dst,
|
||
|
106.0,
|
||
|
)
|
||
|
self.assert_adapt_price_unit_to_another_taxes(
|
||
|
100.0,
|
||
|
tax_exclude_src,
|
||
|
tax_include_dst,
|
||
|
100.0,
|
||
|
)
|
||
|
self.assert_adapt_price_unit_to_another_taxes(
|
||
|
121.0,
|
||
|
tax_include_src,
|
||
|
tax_exclude_dst,
|
||
|
100.0,
|
||
|
)
|
||
|
self.assert_adapt_price_unit_to_another_taxes(
|
||
|
100.0,
|
||
|
tax_exclude_src,
|
||
|
tax_exclude_dst,
|
||
|
100.0,
|
||
|
)
|
||
|
self.assert_adapt_price_unit_to_another_taxes(
|
||
|
100.0,
|
||
|
tax_fixed_incl + tax_exclude_src,
|
||
|
tax_fixed_incl + tax_include_dst,
|
||
|
100.0,
|
||
|
)
|
||
|
self.assert_adapt_price_unit_to_another_taxes(
|
||
|
100.0,
|
||
|
tax_fixed_excl + tax_include_src,
|
||
|
tax_fixed_excl + tax_exclude_dst,
|
||
|
100.0,
|
||
|
)
|
||
|
self._run_js_tests()
|