179 lines
6.3 KiB
Python
179 lines
6.3 KiB
Python
from odoo.exceptions import UserError
|
|
from odoo.tests import Form
|
|
from odoo.tests.common import TransactionCase, tagged
|
|
|
|
|
|
@tagged('post_install_l10n', 'post_install', '-at_install')
|
|
class TestResPartner(TransactionCase):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls.usa, cls.france, cls.italy = [
|
|
cls.env.ref(f'base.{x}')
|
|
for x in ('us', 'fr', 'it')
|
|
]
|
|
|
|
def test_validate_fiscal_code(self):
|
|
valid_codes = [
|
|
"AORTHV05P30V295L",
|
|
"SPDTHB43S93F42VH",
|
|
"MDRTUV99H14X2MNU",
|
|
"XPTDRX73R64YPLUD",
|
|
"LOLXDR40T3MZRTSV",
|
|
"GJTIUG55DLQZRTSS",
|
|
"CDEOTG5PBLQZRTSE",
|
|
"PERTLELPALQZRTSN",
|
|
"IT12345678887",
|
|
"IT12345670546",
|
|
"IT95286931217",
|
|
"IT95867361206",
|
|
"IT94567689990",
|
|
"12345670546",
|
|
"95286931217",
|
|
"95867361206",
|
|
"94567689990",
|
|
]
|
|
|
|
invalid_codes = [
|
|
"AORTHV05P34V295U",
|
|
"SPDTHB43O93F42VH",
|
|
"MDRTUVV9H14X2MNU",
|
|
"XPTDRX73RS4YPLUD",
|
|
"LOLXDRQ0T3QZRTSJ",
|
|
"GJTIUGR5DLQZRTSS",
|
|
"CDEOTG5PBLQZRTSS",
|
|
"PERTLEZPALQZRTSN",
|
|
"IT12345678901",
|
|
"IT12345678885",
|
|
"IT45689349992",
|
|
"IT78239131204",
|
|
"IT45692151219",
|
|
"12345678901",
|
|
"12345678885",
|
|
"45689349992",
|
|
"78239131204",
|
|
"45692151219",
|
|
]
|
|
|
|
partners = self.env['res.partner']
|
|
|
|
for i, code in enumerate(invalid_codes):
|
|
with self.assertRaises(UserError):
|
|
partners += self.env['res.partner'].create({'name': f'partner_{i}', 'l10n_it_codice_fiscale': code})
|
|
|
|
for i, code in enumerate(valid_codes):
|
|
partners += self.env['res.partner'].create({'name': f'partner_{i}', 'l10n_it_codice_fiscale': code})
|
|
|
|
self.assertEqual(len(partners), len(valid_codes))
|
|
|
|
def test_partner_l10n_it_codice_fiscale(self):
|
|
vat_partner = self.env['res.partner'].create({
|
|
'name': 'Customer with VAT',
|
|
})
|
|
|
|
partner_form = Form(vat_partner)
|
|
|
|
partner_form.vat = 'IT12345676017'
|
|
self.assertEqual(partner_form.l10n_it_codice_fiscale, '12345676017', "We give the Parnter a VAT, l10n_it_codice_fiscale is given accordingly")
|
|
|
|
partner_form.country_id = self.env.ref('base.ir')
|
|
self.assertFalse(partner_form.l10n_it_codice_fiscale, "Partner is given Iran as country, l10n_it_codice_fiscale is removed")
|
|
|
|
partner_form.country_id = self.env.ref('base.it')
|
|
self.assertEqual(partner_form.l10n_it_codice_fiscale, '12345676017', "The partner was given the wrong country, we correct it to Italy")
|
|
|
|
partner_form.vat = 'IT12345670017'
|
|
self.assertEqual(partner_form.l10n_it_codice_fiscale, '12345670017', "There was a typo in the VAT, changing it should change l10n_it_codice_fiscale as well")
|
|
|
|
def _test_normalized_data(self, testdata):
|
|
prefix = "normalized_"
|
|
partner = self.env['res.partner'].create({'name': 'partner'})
|
|
for testentry in testdata:
|
|
with self.subTest(testentry=testentry):
|
|
partner.write({
|
|
k: (v if isinstance(v, str | int | float) else v.id)
|
|
for k, v in testentry.items()
|
|
if not k.startswith(prefix)
|
|
})
|
|
l10n_it_edi_values = partner._l10n_it_edi_get_values()
|
|
for field, expected in [
|
|
(k[len(prefix):], v)
|
|
for k, v in testentry.items()
|
|
if k.startswith(prefix)
|
|
]:
|
|
self.assertEqual(expected, l10n_it_edi_values.get(field))
|
|
|
|
def test_normalized_pa_index_and_zip(self):
|
|
self._test_normalized_data([
|
|
{
|
|
'country_id': self.italy,
|
|
'zip': '20100',
|
|
'l10n_it_pa_index': '1234567',
|
|
'normalized_pa_index': '1234567',
|
|
'normalized_zip': '20100',
|
|
},
|
|
{
|
|
'country_id': self.france,
|
|
'l10n_it_pa_index': '1234567',
|
|
'zip': '33344',
|
|
'normalized_pa_index': 'XXXXXXX',
|
|
'normalized_zip': '00000',
|
|
},
|
|
])
|
|
|
|
def test_normalized_country_and_vat(self):
|
|
self._test_normalized_data([
|
|
{
|
|
'country_id': self.usa,
|
|
'vat': '911-92-3333',
|
|
'l10n_it_codice_fiscale': False,
|
|
'normalized_country_code': 'US',
|
|
'normalized_vat': '911-92-3333',
|
|
},
|
|
{
|
|
'country_id': self.france,
|
|
'vat': 'FR 13542107651',
|
|
'l10n_it_codice_fiscale': False,
|
|
'normalized_country_code': 'FR',
|
|
'normalized_vat': '13542107651',
|
|
},
|
|
{
|
|
'country_id': self.usa,
|
|
'vat': False,
|
|
'l10n_it_codice_fiscale': False,
|
|
'normalized_country_code': 'US',
|
|
'normalized_vat': 'OO99999999999',
|
|
},
|
|
{
|
|
'country_id': self.france,
|
|
'vat': False,
|
|
'l10n_it_codice_fiscale': False,
|
|
'normalized_country_code': 'FR',
|
|
'normalized_vat': '0000000',
|
|
},
|
|
{
|
|
'country_id': self.italy,
|
|
'vat': False,
|
|
'l10n_it_codice_fiscale': False,
|
|
'normalized_country_code': 'IT',
|
|
'normalized_vat': False,
|
|
},
|
|
{
|
|
'country_id': self.italy,
|
|
'vat': 'IT06289781004',
|
|
'l10n_it_codice_fiscale': 'IT06289781004',
|
|
'normalized_country_code': 'IT',
|
|
'normalized_codice_fiscale': '06289781004',
|
|
'normalized_vat': '06289781004',
|
|
},
|
|
{
|
|
'country_id': False,
|
|
'vat': False,
|
|
'l10n_it_codice_fiscale': 'MRTMTT91D08F205J',
|
|
'normalized_codice_fiscale': 'MRTMTT91D08F205J',
|
|
'normalized_country_code': 'IT',
|
|
'normalized_vat': False,
|
|
},
|
|
])
|