Skip to content

Commit

Permalink
[FIX] l10n_it_fatturapa_in: Manage VAT groups
Browse files Browse the repository at this point in the history
Co-authored-by: SirAionTech <[email protected]>
  • Loading branch information
SirTakobi and SirAionTech committed Aug 6, 2024
1 parent 2bc41e7 commit 8ca2cd2
Show file tree
Hide file tree
Showing 3 changed files with 173 additions and 0 deletions.
108 changes: 108 additions & 0 deletions l10n_it_fatturapa_in/tests/data/IT03309970733_VATG2.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
<?xml version="1.0" encoding="UTF-8"?>
<p:FatturaElettronica versione="FPA12" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<FatturaElettronicaHeader>
<DatiTrasmissione>
<IdTrasmittente>
<IdPaese>IT</IdPaese>
<IdCodice>05979361218</IdCodice>
</IdTrasmittente>
<ProgressivoInvio>VATG2</ProgressivoInvio>
<FormatoTrasmissione>FPA12</FormatoTrasmissione>
<CodiceDestinatario>UFPQ1O</CodiceDestinatario>
</DatiTrasmissione>
<CedentePrestatore>
<DatiAnagrafici>
<IdFiscaleIVA>
<IdPaese>IT</IdPaese>
<IdCodice>03309970733</IdCodice>
</IdFiscaleIVA>
<CodiceFiscale>03533590174</CodiceFiscale>
<Anagrafica>
<Denominazione>SOCIETA' ALPHA BETA SRL</Denominazione>
</Anagrafica>
<RegimeFiscale>RF02</RegimeFiscale>
</DatiAnagrafici>
<Sede>
<Indirizzo>VIALE ROMA 543B</Indirizzo>
<CAP>07100</CAP>
<Comune>SASSARI</Comune>
<Provincia>SS</Provincia>
<Nazione>IT</Nazione>
</Sede>
</CedentePrestatore>
<CessionarioCommittente>
<DatiAnagrafici>
<CodiceFiscale>80213330584</CodiceFiscale>
<Anagrafica>
<Denominazione>AMMINISTRAZIONE BETA</Denominazione>
</Anagrafica>
</DatiAnagrafici>
<Sede>
<Indirizzo>VIA TORINO 38-B</Indirizzo>
<CAP>00145</CAP>
<Comune>ROMA</Comune>
<Provincia>RM</Provincia>
<Nazione>IT</Nazione>
</Sede>
</CessionarioCommittente>
</FatturaElettronicaHeader>
<FatturaElettronicaBody>
<DatiGenerali>
<DatiGeneraliDocumento>
<TipoDocumento>TD01</TipoDocumento>
<Divisa>EUR</Divisa>
<Data>2015-02-16</Data>
<Numero>FT/2015/0009</Numero>
<Causale>Rif ordine MAPA: --- Nr. Identificativo Ordine 1234567</Causale>
</DatiGeneraliDocumento>
</DatiGenerali>
<DatiBeniServizi>
<DettaglioLinee>
<NumeroLinea>1</NumeroLinea>
<CodiceArticolo>
<CodiceTipo>SA</CodiceTipo>
<CodiceValore>123456-01</CodiceValore>
</CodiceArticolo>
<Descrizione>USB</Descrizione>
<Quantita>4.00</Quantita>
<UnitaMisura>PZ</UnitaMisura>
<PrezzoUnitario>177.00</PrezzoUnitario>
<ScontoMaggiorazione>
<Tipo>SC</Tipo>
<Percentuale>10.00</Percentuale>
</ScontoMaggiorazione>
<PrezzoTotale>637.20</PrezzoTotale>
<AliquotaIVA>22.00</AliquotaIVA>
<RiferimentoAmministrazione>D122353</RiferimentoAmministrazione>
</DettaglioLinee>
<DettaglioLinee>
<NumeroLinea>2</NumeroLinea>
<CodiceArticolo>
<CodiceTipo>SA</CodiceTipo>
<CodiceValore>123456-04</CodiceValore>
</CodiceArticolo>
<Descrizione>USB</Descrizione>
<Quantita>1.00</Quantita>
<UnitaMisura>PZ</UnitaMisura>
<PrezzoUnitario>596.00</PrezzoUnitario>
<ScontoMaggiorazione>
<Tipo>SC</Tipo>
<Percentuale>10.00</Percentuale>
</ScontoMaggiorazione>
<PrezzoTotale>536.40</PrezzoTotale>
<AliquotaIVA>22.00</AliquotaIVA>
<RiferimentoAmministrazione>D122354</RiferimentoAmministrazione>
</DettaglioLinee>
<DatiRiepilogo>
<AliquotaIVA>22.00</AliquotaIVA>
<ImponibileImporto>1173.60</ImponibileImporto>
<Imposta>258.19</Imposta>
<EsigibilitaIVA>S</EsigibilitaIVA>
<RiferimentoNormativo>SCISSIONE PAGAMENTI Split Payment art.17-ter del DPR 633/1972</RiferimentoNormativo>
</DatiRiepilogo>
</DatiBeniServizi>
</FatturaElettronicaBody>
</p:FatturaElettronica>
56 changes: 56 additions & 0 deletions l10n_it_fatturapa_in/tests/test_import_fatturapa_xml.py
Original file line number Diff line number Diff line change
Expand Up @@ -1041,6 +1041,62 @@ def test_55_duplicated_partner(self):
for partner in partners:
self.assertIn(partner.name, inconsistencies)

def test_56_xml_import_vat_group(self):
"""Importing bills from VAT groups creates different suppliers."""
# Arrange: The involved XMLs contain suppliers from a VAT group:
# the suppliers have the same VAT `common_vat`,
# but each supplier has a different fiscal code
common_vat = "IT03309970733"
vat_group_1_fiscalcode = "MRORSS90E25B111T"
vat_group_2_fiscalcode = "03533590174"

# Update any conflicting partner from other tests
existing_partners = self.env["res.partner"].search(
[
"|",
("vat", "=", common_vat),
(
"fiscalcode",
"in",
(
vat_group_1_fiscalcode,
vat_group_2_fiscalcode,
),
),
],
)
existing_partners.update(
{
"vat": "IT12345670017",
"is_company": True,
"fiscalcode": "1234567890123456",
}
)

# Act: Import the XMLs,
# checking that the suppliers match the data in the XML
res = self.run_wizard("VATG1_group", "IT03309970733_VATG1.xml")
invoice_model = res.get("res_model")
invoice_domain = res.get("domain")
invoice_vat_group_1 = self.env[invoice_model].search(invoice_domain)
vat_group_1_partner = invoice_vat_group_1.partner_id
self.assertEqual(vat_group_1_partner.vat, common_vat)
self.assertEqual(vat_group_1_partner.fiscalcode, vat_group_1_fiscalcode)

res = self.run_wizard("VATG2", "IT03309970733_VATG2.xml")
invoice_model = res.get("res_model")
invoice_domain = res.get("domain")
invoice_vat_group_2 = self.env[invoice_model].search(invoice_domain)
vat_group_2_partner = invoice_vat_group_2.partner_id
self.assertEqual(vat_group_2_partner.vat, common_vat)
self.assertEqual(vat_group_2_partner.fiscalcode, vat_group_2_fiscalcode)

# Assert: Two different partners have been created
self.assertNotEqual(
vat_group_1_partner,
vat_group_2_partner,
)

def test_01_xml_link(self):
"""
E-invoice lines are created.
Expand Down
9 changes: 9 additions & 0 deletions l10n_it_fatturapa_in/wizard/wizard_import_fatturapa.py
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,15 @@ def _get_partner_domains_by_vat_fc(self, vat, fc):
vat_domain = [("vat", "=", vat)]
fc_domain = [("fiscalcode", "=", fc)]
domains = list()
if vat and fc:
# The partner must match exactly (both VAT and FC)
domains.append(expression.AND([vat_domain, fc_domain]))
# Or it is missing either FC or VAT
no_vat_domain = [("vat", "=", False)]
no_fc_domain = [("fiscalcode", "=", False)]
vat_domain = expression.AND([vat_domain, no_fc_domain])
fc_domain = expression.AND([no_vat_domain, fc_domain])

if vat:
domains.append(vat_domain)
if fc:
Expand Down

0 comments on commit 8ca2cd2

Please sign in to comment.