Skip to content

Commit 5e2f17e

Browse files
committed
[FIX] l10n_it_fatturapa_out: avoid to add country code to PIVA for foreign customers with italian PIVA
1 parent a149fa6 commit 5e2f17e

File tree

2 files changed

+73
-2
lines changed

2 files changed

+73
-2
lines changed

l10n_it_fatturapa_out/tests/test_fatturapa_xml_validation.py

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import re
99
from unittest.mock import Mock
1010

11+
from lxml import etree
1112
from psycopg2 import IntegrityError
1213

1314
import odoo
@@ -1237,3 +1238,69 @@ def test_max_invoice_number_company(self):
12371238
# Check that two attachments are created
12381239
attachments_nbr = len(invoices.mapped("fatturapa_attachment_out_id"))
12391240
self.assertEqual(attachments_nbr, 2)
1241+
1242+
def test_foreign_customer_with_italian_piva_xml_export(self):
1243+
# creo un'azienda estera con sede in una nazione straniera,
1244+
# ma partita iva italiana
1245+
vals = {
1246+
"name": "Azienda Estera",
1247+
"is_company": "1",
1248+
"street": "Mžaja ŠtraÇÃ 14",
1249+
"is_pa": False,
1250+
"city": "Šofıa",
1251+
"zip": "49715",
1252+
"country_id": self.env.ref("base.si").id,
1253+
"vat": "IT03297040366",
1254+
}
1255+
partner = self.env["res.partner"].create(vals)
1256+
invoice = self.invoice_model.create(
1257+
{
1258+
"name": "INV/2024/0014",
1259+
"invoice_date": "2024-01-07",
1260+
"partner_id": partner.id,
1261+
"journal_id": self.sales_journal.id,
1262+
"invoice_payment_term_id": self.account_payment_term.id,
1263+
"user_id": self.user_demo.id,
1264+
"move_type": "out_invoice",
1265+
"currency_id": self.EUR.id,
1266+
"invoice_line_ids": [
1267+
(
1268+
0,
1269+
0,
1270+
{
1271+
"account_id": self.a_sale.id,
1272+
"product_id": self.product_product_10.id,
1273+
"name": "Mouse Optical",
1274+
"quantity": 1,
1275+
"product_uom_id": self.product_uom_unit.id,
1276+
"price_unit": 10,
1277+
"tax_ids": [(6, 0, {self.tax_22.id})],
1278+
},
1279+
),
1280+
],
1281+
}
1282+
)
1283+
invoice._post()
1284+
res = self.run_wizard(invoice.id)
1285+
self.assertTrue(res)
1286+
1287+
attachment = self.attach_model.browse(res["res_id"])
1288+
xml_content = base64.decodebytes(attachment.datas)
1289+
1290+
parser = etree.XMLParser(remove_blank_text=True)
1291+
xml = etree.fromstring(xml_content, parser)
1292+
cessionario_committente_idiva = xml.findall(
1293+
".//CessionarioCommittente/DatiAnagrafici/IdFiscaleIVA"
1294+
)
1295+
# verifica che ci sia solo un tag
1296+
# CessionarioCommittente/DatiAnagrafici/IdFiscaleIVA
1297+
self.assertEqual(len(cessionario_committente_idiva), 1)
1298+
# verifica che ci siano sia IdPaese che IdCodice
1299+
self.assertEqual(len(cessionario_committente_idiva[0]), 2)
1300+
# verifica che ci siano sia IdPaese sia IT e non sia stato aggiunto il codice
1301+
# nazione come prima del commit:
1302+
# [FIX] l10n_it_fatturapa_out: avoid to add country code to PIVA for foreign
1303+
# customers with italian PIVA
1304+
self.assertEqual(cessionario_committente_idiva[0][0].text, "IT")
1305+
# verifica che ci siano sia IdPaese sia corretto
1306+
self.assertEqual(cessionario_committente_idiva[0][1].text, "03297040366")

l10n_it_fatturapa_out/wizard/efattura.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,14 @@ def format_quantity(line):
119119
def get_id_fiscale_iva(partner, prefer_fiscalcode=False):
120120
id_paese = partner.country_id.code
121121
if partner.vat:
122-
if (id_paese == "IT" and partner.vat.startswith("IT")) or (
123-
id_paese == "SM" and partner.vat.startswith("SM")
122+
id_paese_from_vat = partner.vat[:2]
123+
if (id_paese == "IT" and id_paese_from_vat == "IT") or (
124+
id_paese == "SM" and id_paese_from_vat == "SM"
124125
):
125126
id_codice = partner.vat[2:]
127+
elif id_paese_from_vat.isalpha() and id_paese != id_paese_from_vat:
128+
id_codice = partner.vat[2:]
129+
id_paese = partner.vat[:2]
126130
else:
127131
id_codice = partner.vat
128132
elif partner.fiscalcode or id_paese == "IT":

0 commit comments

Comments
 (0)