Modificar reportes existentes mediante la interface de usuario

Gustavo Orrillo
- 14/05/2022 - 2 min. de lectura

Muchas veces se necesitan hacer modificaciones menores a los reportes existentes. Por ejemplo modificar una dirección, o agregar un campo o reemplazar un campo por otro. Frente a esa necesidad, se pueden hacer dos cosas. La primera es crear un módulo que extienda el template del reporte ya existente (lo cual puede ser algo no factible para muchos administradores). La segunda es modificar el reporte ya existente de una factura, reemplazando en las lineas el campo (más facil y más veloz de implementar, menos sustentable porque los cambios se perderían si se actualizan los módulos). 

EN este caso vamos a modificar el reporte de las facturas para que en el campo Description, aparezca el nombre del producto en lugar del valor del campo name de la línea de la factura (lo que puede llevar a errores).


Lo primero que se debe hacer es, en modo desarrollador buscar el reporte que se está imprimiendo (en este caso de la Factura, el reporte Facturas)


Luego en lista de los reportes se debe buscar el reporte Facturas:



En el formulario de los Informes, podemos ver un botón que dice "Vistas QWeb". Debemos clickear ahí para acceder a la vista Q-Web que es al fin y al cabo lo que se imprime.


Como se puede ver en el campo estructura está la definición de la vista. En este caso se está llamando a otra vista, account.report_invoice_document. Acto seguido, debemos buscar dicha vista ya que es la vista que se imprime:



Seguidamente debemos localizar en la vista, cuales son las líneas a modificar. En este caso hay una línea que imprime el contenido de line.name

<td name="account_invoice_line_name"><span t-field="line.name" t-options="{'widget': 'text'}"/></td>

Que es la que debe modificarse. Se debe modificar line.name por line.product_id.display_name

<td name="account_invoice_line_name"><span t-field="line.product_id.display_name" t-options="{'widget': 'text'}"/></td>

Ahora, teniendo en cuenta que a veces el usuario no ingresa el producto y directamente ingresa la descripción; en ese caso podríamos modificar la línea a:

<td name="account_invoice_line_name"><span t-esc="line.product_id and line.product_id.display_name or line.name"
     t-options="{'widget': 'text'}"/></td>

En la cual si el producto esta presente en la línea, se imprime su nombre. Caso contrario se imprime la descripción de la línea.


Conclusiones

Se podría modificar los reportes de otra manera. Por ejemplo se podría crear otra vista que herede la vista account.report_invoice_document y por medio de xpath reemplace el campo line.name por lo que necesitamos imprimir. Lo mismo podemos hacer creando un módulo que haga lo mismo (la solución más sustentable). Pero la forma "quick and dirty" es la que acabo de mostrar. Que se necesita para implementarla? Entender los rudimentos de XML, de Bootstrap y un conocimiento básico del modelo de datos de Odoo.

Acerca de:

Gustavo Orrillo

Apasionado de la programación, implementa Odoo para distintos tipos de negocios desde el año 2010. En Moldeo Interactive es Socio fundador y Programador; además de escribir en el Blog sobre distintos temas relacionados a los desarrollos que realiza.