En este tutorial, aprenderá a heredar informes QWeb ya existentes en un módulo personalizado. Después de este tutorial, podrá heredar y modificar cualquier informe QWeb ya existente en Odoo.
En este ejemplo, modificaré el informe de presupuesto/pedido (quotation/order ) predeterminado mediante herencia y eliminaré algunos elementos del informe.

1. Creación de un módulo nuevo

El primer paso es crear un nuevo módulo. El comportamiento correcto en Odoo es heredar siempre, nunca modificar archivos existentes. Empiece por crearse usted mismo un nuevo módulo.

Podemos usar el comando scaffold de Odoo como se muestra a continuación:

Esto creará un nuevo módulo desde cero y la estructura predeterminada de su módulo ya está allí.

2. Creación de nuestro archivo XML

El siguiente paso es abrir su archivo XML (en mi ejemplo templates.xml) y crear un nuevo registro para heredar el informe. Para heredar un informe, debe saber en qué módulo se encuentra y cuál es el ID XML original del informe. Entonces, ¿cómo encuentras esto?
La forma más sencilla es ir a ‘Configuración’> ‘Informes’> ‘Informes’ y buscar el informe que desea modificar. En este tutorial, este será el informe de quotatio/order, así que buscaré ‘Pedido’:

ahora que ha encontrado su informe, haga clic en él. ¡Esto abrirá una nueva vista donde encontrará toda la información técnica que necesita! Por ejemplo con el informe de cotización:

 

Por lo general, esto le muestra dos registros XML. ¿Cómo sabes cuál necesitas? El que termina con _document es el registro XML correcto que necesita heredar. Debajo de la columna ‘ID externa’, verá que hay un nombre único, en este ejemplo sale.report_saleorder_document. La primera parte de este texto (venta) es el módulo de donde proviene el informe, la segunda parte (report_saleorder_document) es el nombre del informe que desea heredar y modificar.

Recuerde este valor y ahora abra su archivo XML. Para heredar un informe de QWeb, necesita dos cosas: una identificación de plantilla única y la id de herencia. La identificación de la plantilla puede ser elegida por usted mismo, solo asegúrese de que sea única. Hereit_id debe contener el valor que acaba de encontrar en su informe (sale.report_saleorder_document).

<!-- Inherit quotation report (from module sale) -->
<template id="report_quotation_inherit_demo" inherit_id="sale.report_saleorder_document">
</template>

Ahora ya está en el informe correcto y lo está heredando. Entonces, ¿cómo agregas o eliminas elementos ahora? 

Para hacer esto, necesitará expresiones Xpath para buscar, modificar, reemplazar o agregar elementos.

Para este ejemplo, eliminaré las columnas que muestran el monto, el impuesto y el precio por artículo.

El primer paso es modificar el encabezado de la tabla:

<!-- Finds the first table with as class table table-condensed and gives the ability to modify it
This will replace everything withing tr (including tr)-->
<xpath expr="//table[@class='table table-condensed']//thead//tr" position="replace">
    <tr style="background-color:lightgray;">
        <th>Description</th>
        <th class="text-right">Price</th>
    </tr>
</xpath>

Después de modificar el encabezado de la tabla, el contenido de la tabla también debe modificarse.

<xpath expr="//tbody[@class='sale_tbody']//tr//td[4]" position="replace">
</xpath>
<xpath expr="//tbody[@class='sale_tbody']//tr//td[3]" position="replace">
</xpath>
<xpath expr="//tbody[@class='sale_tbody']//tr//td[2]" position="replace">
</xpath>

Este código eliminará el cuarto, tercer y segundo elemento td y todo su contenido, pero solo para el tbody con la clase ‘sale_tbody’ y dentro del tr.
Esto reemplazará el encabezado y el contenido de la tabla de este informe. Eche un vistazo al código completo para heredar y modificar su informe QWeb:

<openerp>
    <data>
        <!-- Inherit quotation report (from module sale) -->
        <template id="report_quotation_inherit_demo" inherit_id="sale.report_saleorder_document">
        <!-- Finds the first table with as class table table-condensed and gives the ability to modify it
         This will replace everything withing tr (including tr)-->
        <xpath expr="//table[@class='table table-condensed']//thead//tr" position="replace">
                    <tr style="background-color:lightgray;">
                        <th>Description</th>
                        <th class="text-right">Price</th>
                    </tr>
        </xpath>
        <xpath expr="//tbody[@class='sale_tbody']//tr//td[4]" position="replace">
        </xpath>
        <xpath expr="//tbody[@class='sale_tbody']//tr//td[3]" position="replace">
        </xpath>
        <xpath expr="//tbody[@class='sale_tbody']//tr//td[2]" position="replace">
        </xpath>
        </template>
    </data>
</openerp>

Si ahora imprimiera el informe, obtendría esto como resultado:

 

 

3. Agregar la dependencia para el informe QWeb externo

El siguiente y último paso es agregar una dependencia.

Debido a que este informe de QWeb está dentro de otro módulo, Odoo tiene que conocer este módulo y su contenido, por lo que debe agregar una dependencia. Sin esto, su módulo no funcionará y obtendrá errores.

Abra su archivo __openerp__.py en su módulo personalizado y busque la línea con depende.
Ahora recupere esa ‘ID externa’ del informe QWeb y tome la primera parte de la identificación externa (antes del punto).

Esto le dice qué módulo debe agregar como dependencia:

En este ejemplo, mi QWeb proviene del módulo de venta, así que lo agregaré como dependencia.

# any module necessary for this one to work correctly
'depends': ['sale'],

4. Conclusión

¡Eso es todo! Terminó de heredar y modificar el informe QWeb. Cuando instale este módulo en su Odoo, verá el informe modificado.
¿Quieres probar un módulo de demostración y ver el código fuente de este tutorial? Puede ver en mi cuenta de Github .
¿Te ha ayudado este tutorial? ¿Tienes algún comentario o pregunta? ¡Publica lejos!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A la derecha verá un enlace en el que se puede hacer clic llamado ‘Buscar vistas QWeb asociadas’. Haz click en eso. Esto le mostrará una lista de todos los registros asociados a este informe específico. En el ejemplo del informe de cotización: