diff --git a/l10n_it_fatturapa_in/tests/data/IT03309970733_VATG2.xml b/l10n_it_fatturapa_in/tests/data/IT03309970733_VATG2.xml index c6a1898f9e17..663f8eb015fd 100644 --- a/l10n_it_fatturapa_in/tests/data/IT03309970733_VATG2.xml +++ b/l10n_it_fatturapa_in/tests/data/IT03309970733_VATG2.xml @@ -33,6 +33,17 @@ xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1. IT + + + + IT + 03309970733 + + + Rappresentante fiscale + + + 80213330584 @@ -48,6 +59,17 @@ xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1. IT + + + + IT + 03309970733 + + + Terzo Intermediario + + + @@ -58,6 +80,17 @@ xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1. FT/2015/0009 Rif ordine MAPA: --- Nr. Identificativo Ordine 1234567 + + + + IT + 03309970733 + + + Trasporto spa + + + diff --git a/l10n_it_fatturapa_in/wizard/wizard_import_fatturapa.py b/l10n_it_fatturapa_in/wizard/wizard_import_fatturapa.py index 387caf24c937..205d008bb56d 100644 --- a/l10n_it_fatturapa_in/wizard/wizard_import_fatturapa.py +++ b/l10n_it_fatturapa_in/wizard/wizard_import_fatturapa.py @@ -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() @@ -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"]