¿Cómo modificar el widget "contact" que aparece en todos los informes?

651 views
Skip to first unread message

Juan Formoso Vasco

unread,
Jan 5, 2016, 5:35:11 AM1/5/16
to Usuarios Odoo / OpenERP en España
Hola a todos:

El widget contact se llama en la gran mayoría de los informes de Odoo (v8). Lo que hace este widget es mostrar los datos del partner de forma "bonita" en el informe, por ejemplo:

Empresa
Dirección
CP Provincia
País
Teléfono
NIF

El caso es que si los datos son de un partner que es contacto de una empresa (empleado, es decir, con el atributo parent_id rellenado), los datos se muestran así:

Empresa, Contacto
Dirección
CP Provincia
País
Teléfono
NIF

Me gustaría cambiar la línea resaltada por las siguientes:

Empresa
Contacto
Dirección
CP Provincia
País
Teléfono
NIF

Estoy intentando realizarlo sobreescribiendo la función record_to_html, de la clase Contact. Esta función está en el módulo base, carpeta ir, archivo ir_qweb.py.

El caso es que llevo varios intentos y no consigo modificarla como quiero. ¿Puede alguien echarme una mano por favor?

Gracias por adelantado.

cubells

unread,
Jan 5, 2016, 5:40:23 AM1/5/16
to openerp-s...@googlegroups.com
El 05/01/16 a les 11:35, Juan Formoso Vasco ha escrit:
> Hola a todos:
>
> El widget /contact/ se llama en la gran mayoría de los informes de Odoo
> (v8). Lo que hace este widget es mostrar los datos del partner de forma
> "bonita" en el informe, por ejemplo:
>
> Empresa
> Dirección
> CP Provincia
> País
> Teléfono
> NIF
>
> El caso es que si los datos son de un partner que es contacto de una
> empresa (empleado, es decir, con el atributo /parent_id/ rellenado), los
> datos se muestran así:
>
> *Empresa, Contacto*
> Dirección
> CP Provincia
> País
> Teléfono
> NIF
>
> Me gustaría cambiar la línea resaltada por las siguientes:
>
> *Empresa*
> *Contacto*
> Dirección
> CP Provincia
> País
> Teléfono
> NIF
>
> Estoy intentando realizarlo sobreescribiendo la función
> /record_to_html/, de la clase /Contact/. Esta función está en el módulo
> *base*,**carpeta *ir*, archivo *ir_qweb.py*.
>
> El caso es que llevo varios intentos y no consigo modificarla como
> quiero. ¿Puede alguien echarme una mano por favor?
>
> Gracias por adelantado.
>


porque no modificas con herencia la clase que pone los datos en el
widget en lugar del widget.

Creo que està en la classe res_partner


--
Atentament, cubells.
--

Juan Formoso Vasco

unread,
Jan 5, 2016, 6:02:09 AM1/5/16
to Usuarios Odoo / OpenERP en España
Gracias Cubells.

¿Te suena si es ésta la función de res_partner a la que te refieres? 
def _display_name_compute(self, cr, uid, ids, name, args, context=None):
        context = dict(context or {})
        context.pop('show_address', None)
        context.pop('show_address_only', None)
        context.pop('show_email', None)
        return dict(self.name_get(cr, uid, ids, context=context))
Para lograr mi objetivo, ¿debería sustituir la línea que he resaltado, y devolver un diccionario similar al que devuelve name_get pero con un retorno de carro entre los valores que quiero en vez de una coma?

Un saludo.

Juan Formoso Vasco

unread,
Jan 7, 2016, 5:00:43 AM1/7/16
to Usuarios Odoo / OpenERP en España
Bueno, al final me he encontrado una buena manera para cambiar esto, porque al fin y al cabo lo que quiero es poder modificar una simple función y no tener que andar heredando y modificando todos los informes en los que salgan datos de clientes en la cabecera.

Por tanto, he modificado la función record_to_html que mencionaba en un principio, de la siguiente manera:

def record_to_html(self, cr, uid, field_name, record, options=None,
                   context
=None):
   
if context is None:
        context
= {}


   
if options is None:
        options
= {}
    opf
= options.get('fields') or ["name", "address", "phone", "mobile",
                                   
"fax", "email"]


    value_rec
= record[field_name]
   
if not value_rec:
       
return None
    value_rec
= value_rec.sudo().with_context(show_address=True)
    value
= value_rec.name_get()[0][1]


   
name = value.split("\n")[0]
    parent_name
= value_rec.parent_id.name if value_rec.parent_id \
       
else False
   
if parent_name:
        partner_name
= name.replace(parent_name + ', ', '')
        report_display_name
= parent_name + '\n' + partner_name
   
else:
        report_display_name
=
name


    val
= {
       
'name': escape(report_display_name),
       
'address': escape("\n".join(value.split("\n")[1:])),
       
'phone': value_rec.phone,
       
'mobile': value_rec.mobile,
       
'fax': value_rec.fax,
       
'city': value_rec.city,
       
'country_id': value_rec.country_id.display_name,
       
'website': value_rec.website,
       
'email': value_rec.email,
       
'fields': opf,
       
'object': value_rec,
       
'options': options
   
}


    html
= self.pool["ir.ui.view"].render(
        cr
, uid, "base.contact", val, engine='ir.qweb',
        context
=context).decode('utf8')


   
return HTMLSafe(html)

He cambiado la parte resaltada en negrita, básicamente lo que hago es pasar al diccionario val un valor para name diferente: Nombre de partner si es una empresa o un partner que no pertenece a ninguna empresa, o Nombre de empresa\nNombre de partner si se trata de un partner que pertenece a una empresa.

El resultado es bueno, salvo que al imprimir el informe, el retorno de carro lo muestra como un espacio en blanco en vez de un salto de línea. He probado ya mil cosas, pero no consigo que se reconozca un salto de línea en ese campo (a pesar de tener la función escape).

Por favor, ¿alguien me echa una mano? Estoy muy cerca de conseguirlo y me fastidiaría mucho quedarme así.

Un saludo.

Pedro Manuel Baeza Romero

unread,
Jan 7, 2016, 8:56:54 AM1/7/16
to Usuarios Odoo / OpenERP en España
text.replace('\n', '<br>')

Un saludo.

--
Has recibido este mensaje porque estás suscrito al grupo "Usuarios Odoo / OpenERP en España" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a openerp-spain-u...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Juan Formoso Vasco

unread,
Jan 11, 2016, 4:30:25 AM1/11/16
to openerp-s...@googlegroups.com
Muchas gracias por la respuesta Pedro, aunque no entiendo muy bien dónde debo colocar ese replace. Si se lo pongo a report_display_name, en el diccionario val le envío como name lo siguiente: parent_name<br>partner_name, que en el informe se muestra tal cual (no interpreta el <br> como un cambio de línea).

--
Has recibido este mensaje porque estás suscrito a un tema del grupo "Usuarios Odoo / OpenERP en España" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/openerp-spain-users/uzcGMlNIWGU/unsubscribe.
Para anular la suscripción a este grupo y a todos sus temas, envía un correo electrónico a openerp-spain-u...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.



--

--
Juan Formoso Vasco
· · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

ANUBÍA, soluciones en la nube, S.L.

Colón 26, planta 3, oficina 1

36201, Vigo (Pontevedra)

www.anubia.es


anubía_logo_2014_i_o_140x140.pngodoo_logo_odoo_ready_140x140.png

Pedro Manuel Baeza Romero

unread,
Jan 11, 2016, 6:12:24 AM1/11/16
to Usuarios Odoo / OpenERP en España
No tengo los detalles del informe y estoy fuera, por lo que no puedo mirarlo, pero normalmente es así como consigo los saltos de línea.

Un saludo.

cubells

unread,
Jan 11, 2016, 8:08:22 AM1/11/16
to openerp-s...@googlegroups.com
El 11/01/16 a les 10:30, Juan Formoso Vasco ha escrit:
> Muchas gracias por la respuesta Pedro, aunque no entiendo muy bien dónde
> debo colocar ese /replace/. Si se lo pongo a /report_display_name/, en
> el diccionario val le envío como /name/ lo siguiente:
> *parent_name<br>partner_name*, que en el informe se muestra tal cual (no
> interpreta el <br> como un cambio de línea).
>
> El 7 de enero de 2016, 14:56, Pedro Manuel Baeza Romero
> <pedro...@gmail.com <mailto:pedro...@gmail.com>> escribió:
>
> text.replace('\n', '<br>')
>


creo recordar que es <br />, no?


--
Atentament, cubells.
--

Juan Formoso Vasco

unread,
Jan 11, 2016, 10:05:31 AM1/11/16
to openerp-s...@googlegroups.com
Sí, creo que si se quiere emplear en XML, tiene que ser <br/>, pero bueno, probé con ambas y tanto si pongo <br/> como <br>, en el informe aparece escrito tal cual, sin convertirse en un salto de línea.




--
Atentament, cubells.
--

--
Has recibido este mensaje porque estás suscrito a un tema del grupo "Usuarios Odoo / OpenERP en España" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/openerp-spain-users/uzcGMlNIWGU/unsubscribe.
Para anular la suscripción a este grupo y a todos sus temas, envía un correo electrónico a openerp-spain-u...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.

Diego Morales

unread,
Apr 22, 2016, 3:08:18 PM4/22/16
to Usuarios Odoo / OpenERP en España
Hola,

¿Pudiste resolver tu problema de alguna forma?


El lunes, 11 de enero de 2016, 9:05:31 (UTC-6), Juan Formoso Vasco escribió:
Sí, creo que si se quiere emplear en XML, tiene que ser <br/>, pero bueno, probé con ambas y tanto si pongo <br/> como <br>, en el informe aparece escrito tal cual, sin convertirse en un salto de línea.
El 11 de enero de 2016, 14:08, cubells <vic...@vcubells.net> escribió:
El 11/01/16 a les 10:30, Juan Formoso Vasco ha escrit:
Muchas gracias por la respuesta Pedro, aunque no entiendo muy bien dónde
debo colocar ese /replace/. Si se lo pongo a /report_display_name/, en
el diccionario val le envío como /name/ lo siguiente:
*parent_name<br>partner_name*, que en el informe se muestra tal cual (no
interpreta el <br> como un cambio de línea).

El 7 de enero de 2016, 14:56, Pedro Manuel Baeza Romero
<pedro...@gmail.com <mailto:pedro...@gmail.com>> escribió:

    text.replace('\n', '<br>')



creo recordar que es <br />, no?



--
Atentament, cubells.
--

--
Has recibido este mensaje porque estás suscrito a un tema del grupo "Usuarios Odoo / OpenERP en España" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/openerp-spain-users/uzcGMlNIWGU/unsubscribe.
Para anular la suscripción a este grupo y a todos sus temas, envía un correo electrónico a openerp-spain-users+unsub...@googlegroups.com.

Para obtener más opciones, visita https://groups.google.com/d/optout.

Juan Formoso Vasco

unread,
Apr 25, 2016, 3:39:34 AM4/25/16
to Usuarios Odoo / OpenERP en España
Hola Diego:

Pues no, no lo había hecho de esa manera, con las prisas al final había cambiado directamente los informes que me interesaban mediante herencia en XML.

Es una pena porque seguramente sea posible hacerlo así, y sería mucho más rápido, pero yo no fui capaz.

Saludos.

Diego Morales

unread,
Jan 25, 2017, 2:39:43 PM1/25/17
to Usuarios Odoo / OpenERP en España
Abandoné este cambio pues tuve otras prioridades, lo retomé el día de hoy y hoy lo vi con más claridad y lo he logrado.
Dejo las modificaciones por si alguien busca algo similar:

ir_qweb.py (gracias Juan Formoso Vasco)


    name = value.split("\n")[0]
    parent_name
= value_rec.parent_id.name if value_rec.parent_id \
       
else False
   
if parent_name:
        partner_name
= name.replace(parent_name + ', ', '')
        report_display_name
= parent_name + '\n' + partner_name
   
else:
        report_display_name
=
name


    val
= {
       
'name': escape(report_display_name),

Dentro de la misma carpeta hay otro archivo con el nombre ir_qweb.xml

En mi primer intento hice una modificación ahí sin lograr ningún resultado.

Hoy revisando directamente el apartado técnico de odoo, me percaté que hay un archivo identico  y entonces realicé la modificación a través del mismo odoo y ahora funciona todo como esperaba.

La ruta es Técnico->Interfaz de Usuario->Vistas->contact (El usuario debe tener habilitado "Técnico" para ver estas opciones)

Localizar el renglón que dice

<span itemprop="name" t-esc="name"/>

y reemplazarlo por

<span itemprop="name" t-esc="name" t-raw="name.replace('\n', (options.get('no_tag_br')) or '&lt;br/&gt;')"/>

Espero esto aclare un poco el panorama a quien aun busque hacer cambios de este tipo.

Saludos!

Reply all
Reply to author
Forward
0 new messages