From 52b7d9a48ec98510f8fa9e41f172765fde4a6a36 Mon Sep 17 00:00:00 2001 From: Tony Masci Date: Fri, 13 May 2022 11:35:12 +0000 Subject: [PATCH 1/2] [IMP] l10n_it_edi: Hook to manage partner in invoice import Part-of: odoo/odoo#91326 --- .../l10n_it_edi/models/account_edi_format.py | 45 ++++++++++++------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/addons/l10n_it_edi/models/account_edi_format.py b/addons/l10n_it_edi/models/account_edi_format.py index 358d96ef364..74c8229bb16 100644 --- a/addons/l10n_it_edi/models/account_edi_format.py +++ b/addons/l10n_it_edi/models/account_edi_format.py @@ -375,6 +375,32 @@ class AccountEdiFormat(models.Model): return self._import_fattura_pa(decoded_content, invoice) return super()._update_invoice_from_binary(filename, content, extension, invoice) + def get_partner_invoice(self, tree, company): + # Partner (first step to avoid warning 'Warning! You must first select a partner.'). <1.2> + elements = tree.xpath('//CedentePrestatore//IdCodice') + partner = elements and self.env['res.partner'].search( + ['&', ('vat', 'ilike', elements[0].text), '|', ('company_id', '=', company.id), ('company_id', '=', False)], + limit=1) + if not partner: + elements = tree.xpath('//CedentePrestatore//CodiceFiscale') + if elements: + codice = elements[0].text + domains = [[('l10n_it_codice_fiscale', '=', codice)]] + if re.match(r'^[0-9]{11}$', codice): + domains.append([('l10n_it_codice_fiscale', '=', 'IT' + codice)]) + elif re.match(r'^IT[0-9]{11}$', codice): + domains.append([('l10n_it_codice_fiscale', '=', + self.env['res.partner']._l10n_it_normalize_codice_fiscale(codice))]) + partner = elements and self.env['res.partner'].search( + AND([OR(domains), OR([[('company_id', '=', company.id)], [('company_id', '=', False)]])]), limit=1) + if not partner: + elements = tree.xpath('//DatiTrasmissione//Email') + partner = elements and self.env['res.partner'].search( + ['&', '|', ('email', '=', elements[0].text), ('l10n_it_pec_email', '=', elements[0].text), '|', + ('company_id', '=', company.id), ('company_id', '=', False)], limit=1) + + return partner + def _import_fattura_pa(self, tree, invoice): """ Decodes a fattura_pa invoice into an invoice. @@ -432,23 +458,8 @@ class AccountEdiFormat(models.Model): with invoice_ctx._get_edi_creation() as invoice_form: message_to_log = [] - # Partner (first step to avoid warning 'Warning! You must first select a partner.'). <1.2> - elements = tree.xpath('//CedentePrestatore//IdCodice') - partner = elements and self.env['res.partner'].search(['&', ('vat', 'ilike', elements[0].text), '|', ('company_id', '=', company.id), ('company_id', '=', False)], limit=1) - if not partner: - elements = tree.xpath('//CedentePrestatore//CodiceFiscale') - if elements: - codice = elements[0].text - domains = [[('l10n_it_codice_fiscale', '=', codice)]] - if re.match(r'^[0-9]{11}$', codice): - domains.append([('l10n_it_codice_fiscale', '=', 'IT' + codice)]) - elif re.match(r'^IT[0-9]{11}$', codice): - domains.append([('l10n_it_codice_fiscale', '=', self.env['res.partner']._l10n_it_normalize_codice_fiscale(codice))]) - partner = elements and self.env['res.partner'].search( - AND([OR(domains), OR([[('company_id', '=', company.id)], [('company_id', '=', False)]])]), limit=1) - if not partner: - elements = tree.xpath('//DatiTrasmissione//Email') - partner = elements and self.env['res.partner'].search(['&', '|', ('email', '=', elements[0].text), ('l10n_it_pec_email', '=', elements[0].text), '|', ('company_id', '=', company.id), ('company_id', '=', False)], limit=1) + partner = self.get_partner_invoice(tree, company) + if partner: invoice_form.partner_id = partner else: From 3a34eccf821b73c0d61e4456ea2728eaf48863f3 Mon Sep 17 00:00:00 2001 From: Tony Masci Date: Tue, 24 May 2022 13:42:23 +0000 Subject: [PATCH 2/2] [IMP] l10n_it_edi: Hook to manage partner in invoice import Part-of: odoo/odoo#91326 --- addons/l10n_it_edi/models/account_edi_format.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/l10n_it_edi/models/account_edi_format.py b/addons/l10n_it_edi/models/account_edi_format.py index 74c8229bb16..793a52be6de 100644 --- a/addons/l10n_it_edi/models/account_edi_format.py +++ b/addons/l10n_it_edi/models/account_edi_format.py @@ -375,7 +375,7 @@ class AccountEdiFormat(models.Model): return self._import_fattura_pa(decoded_content, invoice) return super()._update_invoice_from_binary(filename, content, extension, invoice) - def get_partner_invoice(self, tree, company): + def _l10n_it_get_partner_invoice(self, tree, company): # Partner (first step to avoid warning 'Warning! You must first select a partner.'). <1.2> elements = tree.xpath('//CedentePrestatore//IdCodice') partner = elements and self.env['res.partner'].search( @@ -458,7 +458,7 @@ class AccountEdiFormat(models.Model): with invoice_ctx._get_edi_creation() as invoice_form: message_to_log = [] - partner = self.get_partner_invoice(tree, company) + partner = self._l10n_it_get_partner_invoice(tree, company) if partner: invoice_form.partner_id = partner