odoo18/addons/l10n_it_edi/tests/test_res_partner.py

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,
},
])