attakatara

El sitio del código de todos python, sql, xml …

Archivo para la etiqueta “reports”

Estructura de Reportes en Odoo

Construir una estructura básica para la generación de reportes en Odoo puede ser una tarea cuesta arriba, toda vez que la documentación oficial existente al respecto no es muy clara. Es por ello que desde esté blog haremos el esfuerzo en simplificar una receta tan válida como sencilla, un Hola Mundo!!! Reportes Odoo.

Una dependencia necesaria en esté módulo será el Motor de informes Webkit o report_webkit, el mismo se vale de wkhtmltopdf que es una libreria que ofrece capacidades de diseño basadas en html + css y a partir de el convertir a pdf. En Odoo podemos instalar el webkit tanto desde la interfaz gráfica módulos locales y seleccionar la opción instalar o como dependencia de nuestro módulo, lo cual recomendamos.

Entonces es necesario instalar la librería wkhtmltopdf en su versión 0.12.0 para lo cual dejamos enlace oficial para su descarga e instrucciones de instalación en tu sistema pulsa AQUí.

webkit

Módulko WebKit desde la interfaz gráfica de Odoo

Para agregarlo como dependencia vamos al descriptor del módulo __openerp__.py, y agregamos: “depends” : [‘report_webkit’].

Receta para el Hola Mundo Reportes:

Estructura:

  1. Carpeta reportes
  2. Carpeta views

en 1 tres archivos:

  1. __init__.py
  2. report.py
  3. report.xml

en 2 el template del reporte:  template_report.xml   Nuestra estructura debe quedar algo como esto:

estructurareport

para construir el modelo del reporte primero exportamos las librerias necesarias:

from openerp.report import report_sxw
from openerp.osv import osv

Luego declaramos la clase mandatoria (debe ir en todas las construcciones de módulos de reportes que diseñemos):

class report_nombre(report_sxw.rml_parse):
    def __init__(self,cr,uid,name,context):
        super(report_nombre,self).__init__(cr,uid,name,context)

Ahora si definimos la clase del reporte como tal:

class report_nombre_des(osv.AbstractModel):
    _name = "report.carpetamodulo.nomrep"
    _inherit = "report.abstract_report"
    _template = "carpetamodulo.nombre_des"
    _wrapped_report_class = report_nombre

Definición del reporte:

Los reportes son escritos en Html/Qweb como una vista regular en Odoo, ya recordaras que las vistas son definidas por archivos del tipo XML. En este punto es importante decir que necesitamos definir el reporte y el template del mismo.

Los reportes son definidos por una acción reporte que en XML se representa mediante la etiqueta <report  />, lo q corresponde en la estructura arriba expuesta al archivo reportes_cp.py, catun ejemplo de definición de reportes:

<?xml version="1.0"?>
    <openerp>
        <data>
            <report 
                id = "cpinv_report" 
                string = "Reporte de Inventarios" 
                model = "cp.inventario" 
                report_type = "qweb-pdf" 
                file = "cpinv_rep.cp_inv" 
                name = "cpinv_rep.cp_inv" 
                menu = "True" 
            />  
       </data>
</openerp>

Luego debemos llamar al mismo desde el archivo __init__.py : import reportes_cp, es importante recordar llamar a la carpeta reportes luego desde el __init__.py del módulo con: import reportes.

Hasta aquí tenemos los tres archivos escenciales que necesitamos en la carpeta reportes ahora debemos definir el template, que define la estructura visual de nuestro reporte, en: /modulo/views/template_report.xml:

<?xml version="1.0"?>
    <openerp>
        <data>
            <template id="cpinv_rep.cp_inv" name="Reporte de Inventarios">
                <t t-call="report.html_container">
                    <t t-foreach="docs" t-as="o">
                        <t t-call="report.external_layout">
                            <div class="page">
                                <h1>Hola Mundo Reportes </h1>
                            </div>
                        </t>
                    </t>
                 </t>
            </template>
       </data>
</openerp>

las etiquetas <t t-call>, <t t-foreach>, son propias de Qweb, en posteriores entregas profundizaremos su sintaxis y uso.

Una vez hecho esto tenemos todo para correr nuestro módulo y ver en funcionamiento el motor de generación de reportes Odoo, en posteriores publicaciones profundizaremos en el diseño, por ahora esperamos que te quede claro y de practica este “Hola Mundo!!! Reportes Odoo”, para conseguir el código usado puedes acceder:

 https://github.com/jorgescalona/cpinv_rep   

También te queremos dejar este vídeo tutorial de la gente de juventud productiva:

nota: Los reportes son generados de forma dinámica por su respectivo módulo de reportes y pueden ser accesados vía URL, por ejemplo se puede acceder un reporte Sale Order en su versión Html visitando: http://<server-address>/report/html/sale.report_saleorder/38

nota: Todos los ejemplos aplican y fueron hechos en un equipo 4.5.0-2-amd64 #1 SMP Debian 4.5.4-1 (2016-05-16) x86_64 GNU/Linux corriendo la versión 8 de Odoo.

Enlaces de Interés:

Documentación Oficial Odoo Sobre Reportes

Documentación Oficial Odoo sobre Qweb

Sitio de Wkhtmltopdf

Github con el código de ejemplo

Vídeo reporte .pdf parte 1

 

 

 

Navegador de artículos