Skip to content

Commit

Permalink
[IMP] l10n_it_fatturapa_in: Skip Duplicated Partners for some fields
Browse files Browse the repository at this point in the history
Only CedentePrestatore and CessionarioCommittente are checked for VAT Groups,
when other partner fields match multiple partners just log an inconsistency

Co-authored-by: SirAionTech <[email protected]>
  • Loading branch information
SirTakobi and SirAionTech committed Aug 6, 2024
1 parent 8ca2cd2 commit 10cfb55
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 34 deletions.
33 changes: 33 additions & 0 deletions l10n_it_fatturapa_in/tests/data/IT03309970733_VATG2.xml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,17 @@ xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.
<Nazione>IT</Nazione>
</Sede>
</CedentePrestatore>
<RappresentanteFiscale>
<DatiAnagrafici>
<IdFiscaleIVA>
<IdPaese>IT</IdPaese>
<IdCodice>03309970733</IdCodice>
</IdFiscaleIVA>
<Anagrafica>
<Denominazione>Rappresentante fiscale</Denominazione>
</Anagrafica>
</DatiAnagrafici>
</RappresentanteFiscale>
<CessionarioCommittente>
<DatiAnagrafici>
<CodiceFiscale>80213330584</CodiceFiscale>
Expand All @@ -48,6 +59,17 @@ xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.
<Nazione>IT</Nazione>
</Sede>
</CessionarioCommittente>
<TerzoIntermediarioOSoggettoEmittente>
<DatiAnagrafici>
<IdFiscaleIVA>
<IdPaese>IT</IdPaese>
<IdCodice>03309970733</IdCodice>
</IdFiscaleIVA>
<Anagrafica>
<Denominazione>Terzo Intermediario</Denominazione>
</Anagrafica>
</DatiAnagrafici>
</TerzoIntermediarioOSoggettoEmittente>
</FatturaElettronicaHeader>
<FatturaElettronicaBody>
<DatiGenerali>
Expand All @@ -58,6 +80,17 @@ xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.
<Numero>FT/2015/0009</Numero>
<Causale>Rif ordine MAPA: --- Nr. Identificativo Ordine 1234567</Causale>
</DatiGeneraliDocumento>
<DatiTrasporto>
<DatiAnagraficiVettore>
<IdFiscaleIVA>
<IdPaese>IT</IdPaese>
<IdCodice>03309970733</IdCodice>
</IdFiscaleIVA>
<Anagrafica>
<Denominazione>Trasporto spa</Denominazione>
</Anagrafica>
</DatiAnagraficiVettore>
</DatiTrasporto>
</DatiGenerali>
<DatiBeniServizi>
<DettaglioLinee>
Expand Down
73 changes: 39 additions & 34 deletions l10n_it_fatturapa_in/wizard/wizard_import_fatturapa.py
Original file line number Diff line number Diff line change
Expand Up @@ -314,11 +314,8 @@ def _get_commercial_partner(self, partners):
commercial_partner = self.env["res.partner"].browse()
return commercial_partner

def getPartnerBase(self, DatiAnagrafici): # noqa: C901
if not DatiAnagrafici:
return False
partner_model = self.env["res.partner"]
cf = DatiAnagrafici.CodiceFiscale or False
def _extract_vat(self, DatiAnagrafici):
"""Extract VAT from node DatiAnagrafici."""
vat = False
if DatiAnagrafici.IdFiscaleIVA:
id_paese = DatiAnagrafici.IdFiscaleIVA.IdPaese.upper()
Expand All @@ -330,43 +327,51 @@ def getPartnerBase(self, DatiAnagrafici): # noqa: C901
# XXX maybe San Marino needs special formatting too?
else:
vat = id_codice
return vat

def _prepare_partner_values(self, DatiAnagrafici, cf, vat):
country_id = False
if DatiAnagrafici.IdFiscaleIVA:
CountryCode = DatiAnagrafici.IdFiscaleIVA.IdPaese
countries = self.CountryByCode(CountryCode)
if countries:
country_id = countries[0].id
else:
raise UserError(_("Country Code %s not found in system.") % CountryCode)
vals = {
"vat": vat,
"fiscalcode": cf,
"is_company": (DatiAnagrafici.Anagrafica.Denominazione and True or False),
"eori_code": DatiAnagrafici.Anagrafica.CodEORI or "",
"country_id": country_id,
}
if DatiAnagrafici.Anagrafica.Nome:
vals["firstname"] = DatiAnagrafici.Anagrafica.Nome
if DatiAnagrafici.Anagrafica.Cognome:
vals["lastname"] = DatiAnagrafici.Anagrafica.Cognome
if DatiAnagrafici.Anagrafica.Denominazione:
vals["name"] = DatiAnagrafici.Anagrafica.Denominazione
return vals

def getPartnerBase(self, DatiAnagrafici): # noqa: C901
if not DatiAnagrafici:
return False
partner_model = self.env["res.partner"]
cf = DatiAnagrafici.CodiceFiscale or False
vat = self._extract_vat(DatiAnagrafici)
partners = self._search_partner_by_vat_fc(vat, cf)
commercial_partner = self._get_commercial_partner(partners)
if len(partners) > 1 and not commercial_partner:
return False
found_partner = partner_model.browse()
elif commercial_partner:
commercial_partner_id = commercial_partner.id
self.check_partner_base_data(commercial_partner_id, DatiAnagrafici)
return commercial_partner_id
found_partner = commercial_partner
else:
# partner to be created
country_id = False
if DatiAnagrafici.IdFiscaleIVA:
CountryCode = DatiAnagrafici.IdFiscaleIVA.IdPaese
countries = self.CountryByCode(CountryCode)
if countries:
country_id = countries[0].id
else:
raise UserError(
_("Country Code %s not found in system.") % CountryCode
)
vals = {
"vat": vat,
"fiscalcode": cf,
"is_company": (
DatiAnagrafici.Anagrafica.Denominazione and True or False
),
"eori_code": DatiAnagrafici.Anagrafica.CodEORI or "",
"country_id": country_id,
}
if DatiAnagrafici.Anagrafica.Nome:
vals["firstname"] = DatiAnagrafici.Anagrafica.Nome
if DatiAnagrafici.Anagrafica.Cognome:
vals["lastname"] = DatiAnagrafici.Anagrafica.Cognome
if DatiAnagrafici.Anagrafica.Denominazione:
vals["name"] = DatiAnagrafici.Anagrafica.Denominazione

return partner_model.create(vals).id
vals = self._prepare_partner_values(DatiAnagrafici, cf, vat)
found_partner = partner_model.create(vals)
return found_partner.id

def getCedPrest(self, cedPrest):
partner_model = self.env["res.partner"]
Expand Down

0 comments on commit 10cfb55

Please sign in to comment.