Skip to content

Commit b021c40

Browse files
committed
[REF] l10n_it_edi_extension: refactor tax representative and intermediary creation
1 parent 5fe0f3a commit b021c40

1 file changed

Lines changed: 36 additions & 58 deletions

File tree

l10n_it_edi_extension/models/account_move.py

Lines changed: 36 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -239,57 +239,15 @@ def _l10n_it_edi_get_values(self, pdf_values=None):
239239

240240
return res
241241

242-
def _l10n_it_edi_get_tax_representative(self, body_tree):
243-
if body_tree.xpath("//RappresentanteFiscale"):
244-
vat = get_text(body_tree, "//RappresentanteFiscale//IdCodice")
245-
codice_fiscale = get_text(
246-
body_tree, "//RappresentanteFiscale//CodiceFiscale"
247-
)
248-
self = self.with_context(skip_create_partner=True)
249-
if tax_representative := self._l10n_it_edi_search_partner(
250-
self.company_id, vat, codice_fiscale, ""
251-
):
252-
self.l10n_it_edi_tax_representative_id = tax_representative.id
253-
else:
254-
if tax_representative := self._l10n_it_edi_create_partner(
255-
body_tree, "//RappresentanteFiscale", vat, codice_fiscale
256-
):
257-
self.l10n_it_edi_tax_representative_id = tax_representative.id
258-
259-
def _l10n_it_edi_get_intermediary(self, body_tree):
260-
if body_tree.xpath("//TerzoIntermediarioOSoggettoEmittente"):
261-
vat = get_text(
262-
body_tree, "//TerzoIntermediarioOSoggettoEmittente//IdCodice"
263-
)
264-
codice_fiscale = get_text(
265-
body_tree, "//TerzoIntermediarioOSoggettoEmittente//CodiceFiscale"
266-
)
267-
self = self.with_context(skip_create_partner=True)
268-
if intermediary := self._l10n_it_edi_search_partner(
269-
self.company_id, vat, codice_fiscale, ""
270-
):
271-
self.l10n_it_edi_intermediary_id = intermediary.id
272-
else:
273-
if intermediary := self._l10n_it_edi_create_partner(
274-
body_tree,
275-
"//TerzoIntermediarioOSoggettoEmittente",
276-
vat,
277-
codice_fiscale,
278-
):
279-
self.l10n_it_edi_intermediary_id = intermediary.id
280-
281-
if sender := get_text(body_tree, "//SoggettoEmittente"):
282-
self.l10n_it_edi_sender = sender
283-
284242
def _l10n_it_edi_get_extra_info(
285243
self, company, document_type, body_tree, incoming=True
286244
):
287245
extra_info, message_to_log = super()._l10n_it_edi_get_extra_info(
288246
company, document_type, body_tree, incoming=incoming
289247
)
290248

291-
self._l10n_it_edi_get_tax_representative(body_tree)
292-
self._l10n_it_edi_get_intermediary(body_tree)
249+
if sender := get_text(body_tree, "//SoggettoEmittente"):
250+
self.l10n_it_edi_sender = sender
293251

294252
if element_stabile_organizzazione := xml_tree.xpath("//StabileOrganizzazione"):
295253
self.write(
@@ -520,11 +478,7 @@ def _l10n_it_edi_search_partner(self, company, vat, codice_fiscale, email):
520478
company, vat, codice_fiscale, email
521479
)
522480
edi_attachment = self.l10n_it_edi_attachment_id
523-
if (
524-
edi_attachment
525-
and not partner
526-
and not self.env.context.get("skip_create_partner")
527-
):
481+
if edi_attachment and not partner:
528482
try:
529483
xml_tree = edi_attachment._decode_edi_l10n_it_edi(
530484
edi_attachment.name, edi_attachment.raw
@@ -803,13 +757,23 @@ def _l10n_it_buyer_seller_info(self):
803757
)
804758
return buyer_seller_info
805759

806-
def _l10n_it_edi_extension_prepare_partner_values(self, invoice_data):
807-
buyer_seller_info = self._l10n_it_buyer_seller_info()
808-
is_incoming = self.is_purchase_document(include_receipts=True)
809-
partner_role = "seller" if is_incoming else "buyer"
810-
partner_info = buyer_seller_info[partner_role]
760+
def _l10n_it_edi_extension_prepare_partner_values(self, tree, section_xpath=None):
761+
if section_xpath:
762+
partner_info = {
763+
"name_xpath": f"{section_xpath}//Denominazione",
764+
"first_name_xpath": f"{section_xpath}//Nome",
765+
"last_name_xpath": f"{section_xpath}//Cognome",
766+
"country_code_xpath": f"{section_xpath}//IdPaese",
767+
"vat_xpath": f"{section_xpath}//IdCodice",
768+
"codice_fiscale_xpath": f"{section_xpath}//CodiceFiscale",
769+
"eori_code_xpath": f"{section_xpath}//CodEORI",
770+
}
771+
else:
772+
buyer_seller_info = self._l10n_it_buyer_seller_info()
773+
is_incoming = self.is_purchase_document(include_receipts=True)
774+
partner_role = "seller" if is_incoming else "buyer"
775+
partner_info = buyer_seller_info[partner_role]
811776

812-
tree = invoice_data["xml_tree"]
813777
name = get_text(tree, partner_info["name_xpath"])
814778
country_code = get_text(tree, partner_info["country_code_xpath"])
815779
country = self.env["res.country"].search([("code", "=", country_code)], limit=1)
@@ -838,19 +802,33 @@ def _l10n_it_edi_extension_prepare_partner_values(self, invoice_data):
838802
vals["name"] = " ".join(filter(None, [first_name, last_name]))
839803
return vals
840804

841-
def _l10n_it_edi_extension_create_partner(self, invoice_data):
805+
def _l10n_it_edi_extension_create_partner(self, invoice_data, section_xpath=None):
842806
partner_values = self._l10n_it_edi_extension_prepare_partner_values(
843-
invoice_data
807+
invoice_data, section_xpath
844808
)
845809
return self.env["res.partner"].create(partner_values)
846810

847811
def _l10n_it_edi_import_invoice(self, invoice, data, is_new):
848812
invoice = super()._l10n_it_edi_import_invoice(invoice, data, is_new)
813+
814+
body_tree = data["xml_tree"]
849815
if (
850816
invoice
851817
and not invoice.partner_id
852818
and self.env.company.l10n_edi_it_create_partner
853819
):
854-
partner = self._l10n_it_edi_extension_create_partner(data)
820+
partner = self._l10n_it_edi_extension_create_partner(body_tree)
855821
invoice.partner_id = partner
822+
823+
if body_tree.xpath("//RappresentanteFiscale"):
824+
tax_representative = self._l10n_it_edi_extension_create_partner(
825+
body_tree, section_xpath="//RappresentanteFiscale"
826+
)
827+
invoice.l10n_it_edi_tax_representative_id = tax_representative.id
828+
829+
if body_tree.xpath("//TerzoIntermediarioOSoggettoEmittente"):
830+
intermediary = self._l10n_it_edi_extension_create_partner(
831+
body_tree, section_xpath="//TerzoIntermediarioOSoggettoEmittente"
832+
)
833+
invoice.l10n_it_edi_intermediary_id = intermediary.id
856834
return invoice

0 commit comments

Comments
 (0)