Modificando reportes en Odoo

18 de julio de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

Modificar reportes existentes en Odoo es una tarea común. Siempre se necesita algo; achicar el tamaño de los productos listados, reducir la cantidad de decimales que se imprimen, remover la fecha y la hora en las fechas que muestra el reporte, etc. 

Los reportes de Odoo son vistas q-web y para modificarlos solo debemos extender dichas vistas (utilizando xpath, cada modificación de un reporte es un festival de sentencias xpath). Para ilustrar esto desarrollamos un módulo con un ejemplo. Este ejemplo agrega la lista de materiales origen en las transferencias internas generadas por las ordenes de producción.

En el módulo primero extendemos el modelo de stock.picking (transferencias) y le agregamos dos campos computados: source_product_id y source_bom_id. El método que computa los campos busca la orden de producción que origina la transferencia, y actualiza los campos de lista de materiales y de producto

    def _compute_source_data(self):
for rec in self:
res_bom_id = None
res_product_id = None
if rec.origin:
manuf_id = self.env['mrp.production'].search(\
​[('name','=',rec.origin)])
if manuf_id:
res_bom_id = manuf_id.bom_id.id
res_product_id = manuf_id.product_id.id
rec.source_bom_id = res_bom_id
rec.source_product_id = res_product_id

source_bom_id = fields.Many2one('mrp.bom','LdM Origen',\
​compute=_compute_source_data)
source_product_id = fields.Many2one('product.product','Producto Origen',\
​compute=_compute_source_data)

Y agregamos al formulario de la transferencia los dos campos creados:

    <record id="manuf_order_report_stock_picking_form" model="ir.ui.view">
<field name="name">manuf.order.report.stock.picking.form</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_form"></field>
<field name="arch" type="xml">
<field name="origin" position="after">
<field name="source_bom_id" />
<field name="source_product_id" />
</field>
</field>
</record>

Bien. Ahora vamos a extender el reporte de los pickings. Si observamos la definición del reporte, ahí tenemos que en las vistas relacionadas tenemos la vista stock.report_picking (que es la vista que tenemos que extender y modificar)


Ahora, tenemos que extender la vista q-web stock.report_picking. En este punto debemos analizar la estructura del reporte que se encuenta en las vistas q-web. Ahí podremos analizar de que nodo del reporte (al fin y al cabo un reporte de Odoo es una página HTML) que queremos extender/modificar.


En nuestro caso decidimos agregar una línea despues del nombre de la transferencia, eso lo hacemos mediante xpath. Luego una vez ubicado el nodo, agregamos una línea solo si, los campos computados tienen datos. El template con el que extendemos el reporte es el siguiente, donde codificamos lo indicado en este párrafo

	<template id="manuf_report_delivery" inherit_id="stock.report_picking">
<xpath expr="//h1[@t-field='o.name']" position="after">
<div class="row mt48 mb32" t-if="o.source_bom_id">
<div t-if="o.source_bom_id" class="col-auto" name="div_source_bom_id">
<strong>LdM Origen:</strong>
<p t-field="o.source_bom_id.display_name"/>
</div>
<div class="col-auto" name="div_source_product_id">
<strong>Producto Origen:</strong>
<p t-field="o.source_product_id.display_name"/>
</div>
</div>
<br />
</xpath>
</template>

Recapitulando, para modificar reportes debemos extender las vistas q-web de los mismos. Y para ello necesitamos no solo saber usar q-web sino también tener los conocimientos básicos de xpath para poder identificar los nodos que precisan ser extendidos. Es fundamental manejar estos conceptos para ser productivo modificando reportes.

Gustavo Orrillo 18 de julio de 2023
Compartir
Categorías
Archivar
Identificarse dejar un comentario