Italy mailing list archives

italy@odoo-community.org

Avatar

Re: installazione l10n_it_fatturapa con molti partners

by
Marco Beri
- 22/12/2018 15:00:50
On Fri, Dec 21, 2018 at 9:37 PM Lorenzo Battistini <lorenzo.battistini@agilebg.com> wrote:
Secondo me è meglio aggiustare partner_firstname. Marco, avresti già la fix da proporre, giusto?
partner_firstname è abbastanza consolidato e siamo a conoscenza solo di questo problema di performance, che io sappia.
Inoltre l10n_it_fatturapa è rilasciato sui branch stabili e si porta la dipendenza di partner_firstname. Rimuoverla sarebbe piuttosto complicato.


Lorenzo,
la mia patch è quella qui sotto. Purtroppo non ho proprio tempo di fare una PR (mi sa che mi sparo anche la vigilia se va avanti così).

E poi non sono sicuro di dover lasciare quel "with api.Environment.manage()" piuttosto che metterci un "with closing(conn.cursor()) as cr: ".

Se tu pensi di metterci poco, be my guest, te la regalo :-)

Altrimenti aspetteremo l'anno prossimo.

Ciao.
Marco.

diff --git a/partner_firstname/hooks.py b/partner_firstname/hooks.py
index 1ea80d0c..9a49d1f1 100644
--- a/partner_firstname/hooks.py
+++ b/partner_firstname/hooks.py
@@ -6,5 +6,19 @@ from odoo import api, SUPERUSER_ID
 
 def post_init_hook(cr, _):
     with api.Environment.manage():
-        env = api.Environment(cr, SUPERUSER_ID, {})
-        env['res.partner']._install_partner_firstname()
+        cr.execute("""
+            update res_partner set
+                firstname = case when trim(name) like '% %'
+                    then split_part(trim(regexp_replace(name, '\s+', ' ', 'g')), ' ', 1)
+                    else '' end,
+                lastname = case when trim(name) like '% %'
+                    then right(trim(regexp_replace(name, '\s+', ' ', 'g')),
+                               -strpos(trim(regexp_replace(name, '\s+', ' ', 'g')), ' '))
+                    else trim(regexp_replace(name, '\s+', ' ', 'g')) end
+            where not is_company;
+
+            update res_partner
+                set firstname = '',
+                lastname = name
+            where is_company;
+        """)



 

Reference