Saltar al contenido

Tipos personalizados de reportes

🐍 ODOO · REPORTES PERSONALIZADOS · CSV

Tipos personalizados de reportes en Odoo

Más allá del PDF y HTML estándar, Odoo permite declarar tipos de reportes personalizados con sus propios handlers en JavaScript que invocan a controladores Python — útil para CSV, Excel u otros formatos que requieran lógica especial.

1¿Qué es ir.actions.report?

Es el modelo que define acciones de reporte. Cuando creas un reporte (factura PDF, cotización, etc.) se representa como un registro en ir.actions.report.

2¿Qué son los handlers?

Son los controladores que renderizan el contenido final del reporte. Según el report_type:

qweb-pdf
Convierte plantilla QWeb en PDF.
qweb-html
Renderiza HTML para el navegador.
controller
URL + controlador HTTP para contenido dinámico.
py / report_py
Llama a un método Python personalizado.

3Caso práctico: tipo de reporte CSV personalizado

Vamos a crear un nuevo tipo “csv_test”. Heredamos la vista lista de cotizaciones y añadimos un botón en el header:

Vista heredada con el botón Imprimir reporte CSV

El botón llama a la función action_csv_test en sale.order:

Función Python que retorna ir.actions.report con type csv_test
💡 LO QUE DEVUELVE LA FUNCIÓN
Un dict tipo ir.actions.report con: nombre del modelo, opciones con IDs de registros, output_format = “csv_test” (identificador) y nombre del archivo. El campo report_type = “csv_test” es el nuevo tipo que vamos a declarar.

4Declarar el handler en JavaScript

Desde JS declaramos el nuevo tipo de reportes — al disparar uno de tipo csv_test, llama a la URL /csv_test_report de un controlador y descarga el resultado:

Código JS que registra el handler csv_test en assets_backend

5Crear el controlador Python

El controlador en CSVTestController con URL /csv_test_report recibe modelo + IDs y genera un CSV con columnas ID, orden, partner:

Controlador Python que genera el CSV

6Probar el reporte

Seleccionamos varias ventas, aparece el botón Imprimir reporte CSV y al pulsarlo se descarga:

Ventas seleccionadas con botón Imprimir CSV visible

El archivo descargado, abierto en LibreOffice y editor de texto:

CSV abierto en LibreOffice
CSV abierto en editor de texto plano

7Consejos rápidos

✅ Define el tipo correcto
Usa qweb-pdf para PDFs estándar, controller para casos con lógica especial.
✅ Hereda solo lo necesario
Si solo cambias parte del rendering, hereda ir.actions.report y redefine solo lo que toca.
💡 Otros usos de los handlers
Módulos como iot y pos_iot los usan para llamar métodos JS y extender funcionalidad.

📌 En resumen

Los tipos de reportes personalizados son la herramienta correcta cuando QWeb-PDF no alcanza. Tres piezas: el dict que retorna la acción Python, el handler JS que enrutaa, y el controlador Python que genera el contenido. En Exdoo los implementamos para CSVs específicos, archivos XML para SAT u otras integraciones.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

¿Te gustaría implementar Odoo en tu empresa?

12 años de experiencia · +60 implementaciones exitosas · Partner Gold de Odoo en México

Hablemos por WhatsApp