Esempio n. 1
0
def test_custom_rules_business(event):
    tr = TaxRule(event=event,
                 rate=Decimal('10.00'),
                 price_includes_tax=False,
                 custom_rules=json.dumps([
                     {
                         'country': 'ZZ',
                         'address_type': 'business',
                         'action': 'no'
                     },
                 ]))
    ia = InvoiceAddress(is_business=True, country=Country('AT'))
    assert not tr.is_reverse_charge(ia)
    assert not tr._tax_applicable(ia)
    assert tr.tax_rate_for(ia) == Decimal('0.00')
    assert tr.tax(Decimal('100.00'), invoice_address=ia) == TaxedPrice(
        gross=Decimal('100.00'),
        net=Decimal('100.00'),
        tax=Decimal('0.00'),
        rate=Decimal('0.00'),
        name='',
    )

    ia = InvoiceAddress(is_business=False, country=Country('DE'))
    assert not tr.is_reverse_charge(ia)
    assert tr._tax_applicable(ia)
    assert tr.tax_rate_for(ia) == Decimal('10.00')
    assert tr.tax(Decimal('100.00'), invoice_address=ia) == TaxedPrice(
        gross=Decimal('110.00'),
        net=Decimal('100.00'),
        tax=Decimal('10.00'),
        rate=Decimal('10.00'),
        name='',
    )
Esempio n. 2
0
def test_reverse_charge_no_address(event):
    tr = TaxRule(event=event,
                 eu_reverse_charge=True,
                 rate=Decimal('10.00'),
                 price_includes_tax=False)
    assert not tr.is_reverse_charge(None)
    assert tr._tax_applicable(None)
Esempio n. 3
0
def test_custom_rules_country_rate_subtract_from_gross(event):
    tr = TaxRule(event=event,
                 rate=Decimal('10.00'),
                 price_includes_tax=False,
                 custom_rules=json.dumps([
                     {
                         'country': 'EU',
                         'address_type': 'business_vat_id',
                         'action': 'vat',
                         'rate': '100.00'
                     },
                 ]))
    ia = InvoiceAddress(is_business=True,
                        country=Country('DE'),
                        vat_id='DE1234',
                        vat_id_validated=True)
    assert tr.tax_rate_for(ia) == Decimal('100.00')
    assert not tr.is_reverse_charge(ia)
    assert tr._tax_applicable(ia)
    assert tr.tax(
        Decimal('100.00'),
        invoice_address=ia,
        subtract_from_gross=Decimal('20.00')) == TaxedPrice(
            gross=Decimal(
                '163.64'),  # ((100 * 1.1) - 20) / (1 + 10%) * (1 + 100%)
            net=Decimal('81.82'),
            tax=Decimal('81.82'),
            rate=Decimal('100.00'),
            name='',
        )
Esempio n. 4
0
def test_custom_rules_override(event):
    tr = TaxRule(event=event,
                 eu_reverse_charge=True,
                 home_country=Country('DE'),
                 rate=Decimal('10.00'),
                 price_includes_tax=False,
                 custom_rules=json.dumps([{
                     'country': 'ZZ',
                     'address_type': '',
                     'action': 'vat'
                 }]))
    ia = InvoiceAddress(is_business=True,
                        vat_id='AT12346',
                        vat_id_validated=True,
                        country=Country('AT'))
    assert not tr.is_reverse_charge(ia)
    assert tr._tax_applicable(ia)
    assert tr.tax_rate_for(ia) == Decimal('10.00')
    assert tr.tax(Decimal('100.00'), invoice_address=ia) == TaxedPrice(
        gross=Decimal('110.00'),
        net=Decimal('100.00'),
        tax=Decimal('10.00'),
        rate=Decimal('10.00'),
        name='',
    )
Esempio n. 5
0
def test_reverse_charge_no_country(event):
    tr = TaxRule(event=event,
                 eu_reverse_charge=True,
                 rate=Decimal('10.00'),
                 price_includes_tax=False)
    ia = InvoiceAddress()
    assert not tr.is_reverse_charge(ia)
    assert tr._tax_applicable(ia)
    assert tr.tax_rate_for(ia) == Decimal('10.00')
Esempio n. 6
0
def test_custom_rules_eu_country(event):
    tr = TaxRule(event=event,
                 rate=Decimal('10.00'),
                 price_includes_tax=False,
                 custom_rules=json.dumps([
                     {
                         'country': 'EU',
                         'address_type': '',
                         'action': 'no'
                     },
                 ]))
    ia = InvoiceAddress(is_business=True, country=Country('AT'))
    assert not tr.is_reverse_charge(ia)
    assert not tr._tax_applicable(ia)
    assert tr.tax_rate_for(ia) == Decimal('0.00')
    ia = InvoiceAddress(is_business=True, country=Country('US'))
    assert not tr.is_reverse_charge(ia)
    assert tr._tax_applicable(ia)
Esempio n. 7
0
def test_reverse_charge_individual_eu(event):
    tr = TaxRule(event=event,
                 eu_reverse_charge=True,
                 home_country=Country('DE'),
                 rate=Decimal('10.00'),
                 price_includes_tax=False)
    ia = InvoiceAddress(is_business=False, country=Country('AT'))
    assert not tr.is_reverse_charge(ia)
    assert tr._tax_applicable(ia)
    assert tr.tax_rate_for(ia) == Decimal('10.00')
Esempio n. 8
0
def test_reverse_charge_disabled(event):
    tr = TaxRule(event=event,
                 eu_reverse_charge=False,
                 home_country=Country('DE'),
                 rate=Decimal('10.00'),
                 price_includes_tax=False)
    ia = InvoiceAddress(is_business=True,
                        vat_id='AT12346',
                        vat_id_validated=True,
                        country=Country('AT'))
    assert not tr.is_reverse_charge(ia)
    assert tr._tax_applicable(ia)
    assert tr.tax_rate_for(ia) == Decimal('10.00')
Esempio n. 9
0
def test_custom_rules_vat_id(event):
    tr = TaxRule(
        event=event,
        rate=Decimal('10.00'), price_includes_tax=False,
        custom_rules=json.dumps([
            {'country': 'EU', 'address_type': 'business_vat_id', 'action': 'reverse'},
        ])
    )
    ia = InvoiceAddress(
        is_business=True,
        country=Country('AT')
    )
    assert not tr.is_reverse_charge(ia)
    assert tr.tax_applicable(ia)
    ia = InvoiceAddress(
        is_business=True,
        country=Country('DE'),
        vat_id='DE1234',
        vat_id_validated=True
    )
    assert tr.is_reverse_charge(ia)
    assert not tr.tax_applicable(ia)
Esempio n. 10
0
def test_reverse_charge_valid_vat_id_business_3rdc(event):
    tr = TaxRule(
        event=event, eu_reverse_charge=True, home_country=Country('DE'),
        rate=Decimal('10.00'), price_includes_tax=False
    )
    ia = InvoiceAddress(
        is_business=True,
        country=Country('US'),
        vat_id='US12346',
        vat_id_validated=True
    )
    assert not tr.is_reverse_charge(ia)
    assert not tr.tax_applicable(ia)
Esempio n. 11
0
def test_custom_rules_country_rate_keep_gross_if_rate_changes(event):
    tr = TaxRule(event=event,
                 rate=Decimal('10.00'),
                 price_includes_tax=False,
                 keep_gross_if_rate_changes=True,
                 custom_rules=json.dumps([
                     {
                         'country': 'EU',
                         'address_type': 'business_vat_id',
                         'action': 'vat',
                         'rate': '100.00'
                     },
                 ]))
    ia = InvoiceAddress(is_business=True, country=Country('DE'))
    assert not tr.is_reverse_charge(ia)
    assert tr._tax_applicable(ia)
    assert tr.tax_rate_for(ia) == Decimal('10.00')
    assert tr.tax(Decimal('100.00'), invoice_address=ia) == TaxedPrice(
        gross=Decimal('110.00'),
        net=Decimal('100.00'),
        tax=Decimal('10.00'),
        rate=Decimal('10.00'),
        name='',
    )
    ia = InvoiceAddress(is_business=True,
                        country=Country('DE'),
                        vat_id='DE1234',
                        vat_id_validated=True)
    assert tr.tax_rate_for(ia) == Decimal('100.00')
    assert not tr.is_reverse_charge(ia)
    assert tr._tax_applicable(ia)
    assert tr.tax(Decimal('100.00'), invoice_address=ia) == TaxedPrice(
        gross=Decimal('110.00'),
        net=Decimal('55.00'),
        tax=Decimal('55.00'),
        rate=Decimal('100.00'),
        name='',
    )
Esempio n. 12
0
def test_reverse_charge_no_country(event):
    tr = TaxRule(event=event,
                 eu_reverse_charge=True,
                 rate=Decimal('10.00'),
                 price_includes_tax=False)
    ia = InvoiceAddress()
    assert not tr.is_reverse_charge(ia)
    assert tr._tax_applicable(ia)
    assert tr.tax_rate_for(ia) == Decimal('10.00')
    assert tr.tax(Decimal('100.00'), invoice_address=ia) == TaxedPrice(
        gross=Decimal('110.00'),
        net=Decimal('100.00'),
        tax=Decimal('10.00'),
        rate=Decimal('10.00'),
        name='',
    )
Esempio n. 13
0
def test_reverse_charge_individual_3rdc(event):
    tr = TaxRule(event=event,
                 eu_reverse_charge=True,
                 home_country=Country('DE'),
                 rate=Decimal('10.00'),
                 price_includes_tax=False)
    ia = InvoiceAddress(is_business=False, country=Country('US'))
    assert not tr.is_reverse_charge(ia)
    assert not tr._tax_applicable(ia)
    assert tr.tax_rate_for(ia) == Decimal('0.00')
    assert tr.tax(Decimal('100.00'), invoice_address=ia) == TaxedPrice(
        gross=Decimal('100.00'),
        net=Decimal('100.00'),
        tax=Decimal('0.00'),
        rate=Decimal('0.00'),
        name='',
    )
Esempio n. 14
0
def test_reverse_charge_valid_vat_id_business_eu(event):
    tr = TaxRule(event=event,
                 eu_reverse_charge=True,
                 home_country=Country('DE'),
                 rate=Decimal('10.00'),
                 price_includes_tax=False)
    ia = InvoiceAddress(is_business=True,
                        vat_id='AT12346',
                        vat_id_validated=True,
                        country=Country('AT'))
    assert tr.is_reverse_charge(ia)
    assert not tr._tax_applicable(ia)
    assert tr.tax_rate_for(ia) == Decimal('0.00')
    assert tr.tax(Decimal('100.00'), invoice_address=ia) == TaxedPrice(
        gross=Decimal('100.00'),
        net=Decimal('100.00'),
        tax=Decimal('0.00'),
        rate=Decimal('0.00'),
        name='',
    )
Esempio n. 15
0
def test_custom_rules_in_order(event):
    tr = TaxRule(event=event,
                 rate=Decimal('10.00'),
                 price_includes_tax=False,
                 custom_rules=json.dumps([{
                     'country': 'ZZ',
                     'address_type': '',
                     'action': 'vat'
                 }, {
                     'country': 'ZZ',
                     'address_type': '',
                     'action': 'reverse'
                 }]))
    ia = InvoiceAddress(is_business=True,
                        vat_id='AT12346',
                        vat_id_validated=True,
                        country=Country('AT'))
    assert not tr.is_reverse_charge(ia)
    assert tr._tax_applicable(ia)
    assert tr.tax_rate_for(ia) == Decimal('10.00')