@@ -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 := body_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