Curso odoo (Módulos)
8.1. Tipos de reportes
Odoo proporciona varios tipos de reportes que puedes generar según tus necesidades:
-
Reportes QWeb (HTML/PDF)
- Basados en plantillas HTML que se convierten en PDF con la herramienta wkhtmltopdf (instalada en el servidor).
- Permiten flexibilidad en el diseño, uso de estilos CSS y posibilidad de añadir tablas, gráficos y otros elementos visuales.
-
Reportes basados en PDF
- Utilizan la misma estructura QWeb, pero se enfocan en exportar directamente a PDF para impresión o envío por correo.
-
Reportes basados en otras vistas (Pivot, Graph, etc.)
- Odoo también ofrece vistas pivot, gráficas y otras maneras de presentar la información. Sin embargo, las más comunes para la personalización son los reportes QWeb.
8.2. Creación de un reporte personalizado
Para generar un reporte en Odoo, sueles seguir estos pasos:
-
Definir la plantilla QWeb
- Se hace en un archivo XML, habitualmente dentro de la carpeta
report/de tu módulo. - Utilizarás etiquetas propias de QWeb como
<t>,t-foreach,t-if, etc.
- Se hace en un archivo XML, habitualmente dentro de la carpeta
-
Configurar la acción de reporte
- Creas un registro en el modelo
ir.actions.reportque indique a Odoo cuál plantilla usar y cómo generar el PDF.
- Creas un registro en el modelo
-
Asociar el reporte al modelo
- Indicas sobre qué modelo aplicará el reporte y en qué situaciones puede ejecutarse (por ejemplo, desde un botón “Imprimir” en el formulario).
Ejemplo paso a paso
1) Definir la plantilla QWeb (archivo XML en report/mi_reporte_template.xml):
1<odoo> 2 <template id="report_library_book_document"> 3 <t t-call="web.external_layout"> 4 <div class="page"> 5 <h2>Library Book Report</h2> 6 <t t-foreach="docs" t-as="book"> 7 <p> 8 <strong>Title:</strong> <span t-esc="book.name"/> 9 </p> 10 <p> 11 <strong>Author:</strong> <span t-esc="book.author"/> 12 </p> 13 <p> 14 <strong>Publication Date:</strong> <span t-esc="book.publication_date"/> 15 </p> 16 <hr/> 17 </t> 18 </div> 19 </t> 20 </template> 21</odoo>
<t t-call="web.external_layout">: Llama a la plantilla base que Odoo utiliza para el layout general (encabezados, pies de página, etc.).docs: Representa el conjunto de registros que estás imprimiendo. Generalmente se pasa desde el método de reporte.
2) Configurar la acción de reporte (en un archivo XML, por ejemplo report/mi_reporte_action.xml):
1<odoo> 2 <report 3 id="action_report_library_book" 4 model="library.book" 5 string="Library Book Report" 6 report_type="qweb-pdf" 7 file="my_module.report_library_book_document" 8 name="my_module.report_library_book_document" 9 /> 10</odoo>
id="action_report_library_book": identificador único para el reporte.model="library.book": indica sobre qué modelo se aplica.report_type="qweb-pdf": especifica que queremos generar un PDF.file="my_module.report_library_book_document"yname="my_module.report_library_book_document": hacen referencia al template definido anteriormente (se usa el formatomimodulo.report_id_plantilla).
3) (Opcional) Añadir un botón para llamar al reporte
-
Si lo deseas, puedes añadir un botón en la vista formulario de
library.bookpara permitir la impresión directa:1<record id="view_library_book_form" model="ir.ui.view"> 2 <field name="name">library.book.form</field> 3 <field name="model">library.book</field> 4 <field name="arch" type="xml"> 5 <form string="Library Book"> 6 <header> 7 <button name="%(action_report_library_book)d" 8 string="Print Book Report" 9 type="action" 10 class="oe_highlight"/> 11 </header> 12 <sheet> 13 <!-- Campos del formulario... --> 14 </sheet> 15 </form> 16 </field> 17</record>- Aquí,
name="%(action_report_library_book)d"hace referencia al id del reporte que creamos antes.
- Aquí,
Con esto, al hacer clic en “Print Book Report”, Odoo generará el PDF utilizando el template QWeb definido.
8.3. Personalización de reportes existentes
A veces no necesitas crear un reporte desde cero, sino modificar uno existente (por ejemplo, la factura estándar de Odoo).
Para ello, utilizas la herencia de plantillas QWeb y el tag <xpath> de forma similar a como se hace con las vistas:
1<odoo> 2 <template id="report_invoice_inherit" inherit_id="account.report_invoice_document"> 3 <xpath expr="//div[@class='page']/h2" position="after"> 4 <h3>Custom message or field</h3> 5 </xpath> 6 </template> 7</odoo>
inherit_id="account.report_invoice_document"indica que estamos ampliando la plantilla base de la factura.- El
<xpath>localiza el lugar donde insertar el nuevo contenido.
8.4. Parámetros para formateo y estilo
Con reportes QWeb, puedes usar CSS para dar formato. Puedes incrustar el CSS dentro de tu plantilla o en un archivo separado referenciado. Por ejemplo:
1<template id="report_library_book_document"> 2 <t t-call="web.external_layout"> 3 <style> 4 .title { 5 color: #0055a5; 6 font-weight: bold; 7 } 8 </style> 9 <div class="page"> 10 <h2 class="title">Library Book Report</h2> 11 ... 12 </div> 13 </t> 14</template>
También es posible usar clases de Bootstrap que Odoo ya integra por defecto.
Además, puedes formatear números, fechas y monedas siguiendo la configuración regional de cada usuario (por ejemplo, t-esc="formatLang(book.price, digits=2)" para precios).
Conclusión de la Parte 8
- Reportes QWeb (HTML/PDF) son el método más común para generar documentos y presentaciones personalizadas en Odoo.
- Se necesita una plantilla (archivo XML) y una acción de reporte (
ir.actions.report) que vincule esa plantilla con el modelo. - Modificación de reportes existentes se hace con herencia de QWeb y el uso de
<xpath>para insertar o alterar contenido. - El CSS y las funciones de formateo te permiten ajustar el estilo y la apariencia de tus reportes al detalle.
Con esto, ya podrás crear tus reportes profesionales en PDF o adaptarlos a tus necesidades de diseño. En la siguiente parte del curso, abordaremos Web controllers y APIs externas, donde verás cómo integrar Odoo con servicios externos y exponer tu aplicación para que otros sistemas la consuman. ¡Continuemos!
- Loading...