Skip to content

Commit 76eea6b

Browse files
[FIX] l10n_it_fatturapa_in: Manage VAT groups
Co-authored-by: SirAionTech <simone.rubino@aion-tech.it>
1 parent 9a707dc commit 76eea6b

File tree

3 files changed

+173
-0
lines changed

3 files changed

+173
-0
lines changed
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<p:FatturaElettronica versione="FPA12" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
3+
xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd">
6+
<FatturaElettronicaHeader>
7+
<DatiTrasmissione>
8+
<IdTrasmittente>
9+
<IdPaese>IT</IdPaese>
10+
<IdCodice>05979361218</IdCodice>
11+
</IdTrasmittente>
12+
<ProgressivoInvio>VATG2</ProgressivoInvio>
13+
<FormatoTrasmissione>FPA12</FormatoTrasmissione>
14+
<CodiceDestinatario>UFPQ1O</CodiceDestinatario>
15+
</DatiTrasmissione>
16+
<CedentePrestatore>
17+
<DatiAnagrafici>
18+
<IdFiscaleIVA>
19+
<IdPaese>IT</IdPaese>
20+
<IdCodice>03309970733</IdCodice>
21+
</IdFiscaleIVA>
22+
<CodiceFiscale>03533590174</CodiceFiscale>
23+
<Anagrafica>
24+
<Denominazione>SOCIETA' ALPHA BETA SRL</Denominazione>
25+
</Anagrafica>
26+
<RegimeFiscale>RF02</RegimeFiscale>
27+
</DatiAnagrafici>
28+
<Sede>
29+
<Indirizzo>VIALE ROMA 543B</Indirizzo>
30+
<CAP>07100</CAP>
31+
<Comune>SASSARI</Comune>
32+
<Provincia>SS</Provincia>
33+
<Nazione>IT</Nazione>
34+
</Sede>
35+
</CedentePrestatore>
36+
<CessionarioCommittente>
37+
<DatiAnagrafici>
38+
<CodiceFiscale>80213330584</CodiceFiscale>
39+
<Anagrafica>
40+
<Denominazione>AMMINISTRAZIONE BETA</Denominazione>
41+
</Anagrafica>
42+
</DatiAnagrafici>
43+
<Sede>
44+
<Indirizzo>VIA TORINO 38-B</Indirizzo>
45+
<CAP>00145</CAP>
46+
<Comune>ROMA</Comune>
47+
<Provincia>RM</Provincia>
48+
<Nazione>IT</Nazione>
49+
</Sede>
50+
</CessionarioCommittente>
51+
</FatturaElettronicaHeader>
52+
<FatturaElettronicaBody>
53+
<DatiGenerali>
54+
<DatiGeneraliDocumento>
55+
<TipoDocumento>TD01</TipoDocumento>
56+
<Divisa>EUR</Divisa>
57+
<Data>2015-02-16</Data>
58+
<Numero>FT/2015/0009</Numero>
59+
<Causale>Rif ordine MAPA: --- Nr. Identificativo Ordine 1234567</Causale>
60+
</DatiGeneraliDocumento>
61+
</DatiGenerali>
62+
<DatiBeniServizi>
63+
<DettaglioLinee>
64+
<NumeroLinea>1</NumeroLinea>
65+
<CodiceArticolo>
66+
<CodiceTipo>SA</CodiceTipo>
67+
<CodiceValore>123456-01</CodiceValore>
68+
</CodiceArticolo>
69+
<Descrizione>USB</Descrizione>
70+
<Quantita>4.00</Quantita>
71+
<UnitaMisura>PZ</UnitaMisura>
72+
<PrezzoUnitario>177.00</PrezzoUnitario>
73+
<ScontoMaggiorazione>
74+
<Tipo>SC</Tipo>
75+
<Percentuale>10.00</Percentuale>
76+
</ScontoMaggiorazione>
77+
<PrezzoTotale>637.20</PrezzoTotale>
78+
<AliquotaIVA>22.00</AliquotaIVA>
79+
<RiferimentoAmministrazione>D122353</RiferimentoAmministrazione>
80+
</DettaglioLinee>
81+
<DettaglioLinee>
82+
<NumeroLinea>2</NumeroLinea>
83+
<CodiceArticolo>
84+
<CodiceTipo>SA</CodiceTipo>
85+
<CodiceValore>123456-04</CodiceValore>
86+
</CodiceArticolo>
87+
<Descrizione>USB</Descrizione>
88+
<Quantita>1.00</Quantita>
89+
<UnitaMisura>PZ</UnitaMisura>
90+
<PrezzoUnitario>596.00</PrezzoUnitario>
91+
<ScontoMaggiorazione>
92+
<Tipo>SC</Tipo>
93+
<Percentuale>10.00</Percentuale>
94+
</ScontoMaggiorazione>
95+
<PrezzoTotale>536.40</PrezzoTotale>
96+
<AliquotaIVA>22.00</AliquotaIVA>
97+
<RiferimentoAmministrazione>D122354</RiferimentoAmministrazione>
98+
</DettaglioLinee>
99+
<DatiRiepilogo>
100+
<AliquotaIVA>22.00</AliquotaIVA>
101+
<ImponibileImporto>1173.60</ImponibileImporto>
102+
<Imposta>258.19</Imposta>
103+
<EsigibilitaIVA>S</EsigibilitaIVA>
104+
<RiferimentoNormativo>SCISSIONE PAGAMENTI Split Payment art.17-ter del DPR 633/1972</RiferimentoNormativo>
105+
</DatiRiepilogo>
106+
</DatiBeniServizi>
107+
</FatturaElettronicaBody>
108+
</p:FatturaElettronica>

l10n_it_fatturapa_in/tests/test_import_fatturapa_xml.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -987,6 +987,62 @@ def test_55_duplicated_partner(self):
987987
for partner in partners:
988988
self.assertIn(partner.name, inconsistencies)
989989

990+
def test_56_xml_import_vat_group(self):
991+
"""Importing bills from VAT groups creates different suppliers."""
992+
# Arrange: The involved XMLs contain suppliers from a VAT group:
993+
# the suppliers have the same VAT `common_vat`,
994+
# but each supplier has a different fiscal code
995+
common_vat = "IT03309970733"
996+
vat_group_1_fiscalcode = "MRORSS90E25B111T"
997+
vat_group_2_fiscalcode = "03533590174"
998+
999+
# Update any conflicting partner from other tests
1000+
existing_partners = self.env["res.partner"].search(
1001+
[
1002+
"|",
1003+
("vat", "=", common_vat),
1004+
(
1005+
"fiscalcode",
1006+
"in",
1007+
(
1008+
vat_group_1_fiscalcode,
1009+
vat_group_2_fiscalcode,
1010+
),
1011+
),
1012+
],
1013+
)
1014+
existing_partners.update(
1015+
{
1016+
"vat": "IT12345670017",
1017+
"is_company": True,
1018+
"fiscalcode": "1234567890123456",
1019+
}
1020+
)
1021+
1022+
# Act: Import the XMLs,
1023+
# checking that the suppliers match the data in the XML
1024+
res = self.run_wizard("VATG1_group", "IT03309970733_VATG1.xml")
1025+
invoice_model = res.get("res_model")
1026+
invoice_domain = res.get("domain")
1027+
invoice_vat_group_1 = self.env[invoice_model].search(invoice_domain)
1028+
vat_group_1_partner = invoice_vat_group_1.partner_id
1029+
self.assertEqual(vat_group_1_partner.vat, common_vat)
1030+
self.assertEqual(vat_group_1_partner.fiscalcode, vat_group_1_fiscalcode)
1031+
1032+
res = self.run_wizard("VATG2", "IT03309970733_VATG2.xml")
1033+
invoice_model = res.get("res_model")
1034+
invoice_domain = res.get("domain")
1035+
invoice_vat_group_2 = self.env[invoice_model].search(invoice_domain)
1036+
vat_group_2_partner = invoice_vat_group_2.partner_id
1037+
self.assertEqual(vat_group_2_partner.vat, common_vat)
1038+
self.assertEqual(vat_group_2_partner.fiscalcode, vat_group_2_fiscalcode)
1039+
1040+
# Assert: Two different partners have been created
1041+
self.assertNotEqual(
1042+
vat_group_1_partner,
1043+
vat_group_2_partner,
1044+
)
1045+
9901046
def test_01_xml_link(self):
9911047
"""
9921048
E-invoice lines are created.

l10n_it_fatturapa_in/wizard/wizard_import_fatturapa.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,15 @@ def _get_partner_domains_by_vat_fc(self, vat, fc):
224224
vat_domain = [("vat", "=", vat)]
225225
fc_domain = [("fiscalcode", "=", fc)]
226226
domains = list()
227+
if vat and fc:
228+
# The partner must match exactly (both VAT and FC)
229+
domains.append(expression.AND([vat_domain, fc_domain]))
230+
# Or it is missing either FC or VAT
231+
no_vat_domain = [("vat", "=", False)]
232+
no_fc_domain = [("fiscalcode", "=", False)]
233+
vat_domain = expression.AND([vat_domain, no_fc_domain])
234+
fc_domain = expression.AND([no_vat_domain, fc_domain])
235+
227236
if vat:
228237
domains.append(vat_domain)
229238
if fc:

0 commit comments

Comments
 (0)