0% encontró este documento útil (0 votos)
657 vistas26 páginas

Reportes en Odoo: QWeb y SQL

Este documento describe los diferentes tipos de reportes que se pueden generar en Odoo, incluyendo reportes estáticos con plantillas QWeb, reportes dinámicos utilizando vistas SQL personalizadas, y las ventajas de cada método. Explica el proceso de creación de un reporte estático con QWeb declarando la acción, plantilla, y parser requeridos. También resume cómo crear reportes dinámicos mediante la definición de un modelo y vista basados en una consulta SQL personalizada.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
657 vistas26 páginas

Reportes en Odoo: QWeb y SQL

Este documento describe los diferentes tipos de reportes que se pueden generar en Odoo, incluyendo reportes estáticos con plantillas QWeb, reportes dinámicos utilizando vistas SQL personalizadas, y las ventajas de cada método. Explica el proceso de creación de un reporte estático con QWeb declarando la acción, plantilla, y parser requeridos. También resume cómo crear reportes dinámicos mediante la definición de un modelo y vista basados en una consulta SQL personalizada.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Generación de reportes estáticos y

dinámicos en Odoo.
MSc. Ismel Rabaza Andino (irabaza@hlg.desoft.cu)

Ing. Liber Matos Martín (liber@hlg.desoft.cu)

Informatizamos para la Sociedad Cubana


Odoo

Odoo (anteriormente OpenERP) es un sistema de código


abierto y multiplataforma para la planificación de los
recursos empresariales (ERP).

Informatizamos para la Sociedad Cubana


Reportes en Odoo

 Informes PDF, SXW, XLS


 Vistas personalizadas
 Dashboards (Tableros)

Informatizamos para la Sociedad Cubana


Reportes QWeb

Odoo introduce una vía nueva para la generación de


informes basada en QWeb que brinda mayor comodidad y
agiliza el proceso. QWeb es el motor de plantillas XML
usado por Odoo para generar fragmentos y páginas
HTML. Tiene la ventaja que su mecanismo de herencia es
bastante similar al usado por el framework de Odoo.

Odoo también soporta el sistema de reportes con


integración con OpenOffice / RML y WebKit para mantener
la compatibilidad con las versiones anteriores.

Informatizamos para la Sociedad Cubana


QWeb

Las directivas de la plantilla son especificadas como


atributos XML con el prefijo t-
Condicionales (t-if)
<t t-if="condition"> <div t-if="condition">

<p>Test</p> <p>Test</p>
</t> </div>

Salida de datos (t-esc , t-raw)


<p><t t-esc="value"/></p>
Ciclos (t-foreach)
<t t-foreach="[1, 2, 3]" t-as="i">
<p><t t-esc="i"/></p>
</t>
Informatizamos para la Sociedad Cubana
QWeb

Asignación de Variables (t-set)


<div t-foreach=“widget.get_products()" t-as=“p">
<t t-set=“location" t-value=“p.location"/>
<t t-if=“location“>
<span><t t-esc=“location.name"/></span>
</t>
</div>
Atributos (t-att- , t-attf-)
t-att-$name (Un atributo llamado $name se crea y se
renderea con el valor resultado)
<img t-att-src=“widget.product_icon_url(p.id)"/>
<div t-attf-class=“products #{p.checked ? '' :
'display_none'}" > ... </div>

Informatizamos para la Sociedad Cubana


QWeb

Llamando sub-plantillas (t-call)


<t t-name=“ProductDetails">
<tr t-att-data-id=„product.id'>
<td><t t-esc=„product.name' /></td>
<td><t t-esc=„product.unit_price' /></td>
<td><t t-esc=„product.code' /></td>
</tr>
</t>
<div t-foreach=“widget.get_products()" t-as=“product">
<t t-call="ProductDetails"/>
</div>

Informatizamos para la Sociedad Cubana


Creando un reporte estático con QWeb

1. Un reporte debe ser declarado como una acción de


reporte (ir.actions.report.xml). Para simplicidad el
framework proporciona la etiqueta <report>

<report
id="account_invoices“
model="account.invoice"
string="Invoices"
report_type="qweb-pdf"
name="account.report_invoice"
file="account.report_invoice“ />
Informatizamos para la Sociedad Cubana
Creando un reporte estático con QWeb

2. Plantilla QWeb.
<template id="report_invoice">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="report.external_layout">
<div class="page">
<h2>Report title</h2>
<p>This object's name is <span t-
field="o.name"/></p>
</div>
</t>
</t>
</t>
</template>

Informatizamos para la Sociedad Cubana


Creando un reporte estático con QWeb

Variables accesibles en el contexto de la plantilla QWeb del


reporte.
docs records a los cuales se le está realizando el reporte
doc_ids lista de IDs de los docs records
doc_model modelo de los records seleccionados (docs)
time referencia al módulo estándar time de Python
user record res.user del usuario que imprime el reporte
res_company record res.company de la compañía del
usuario logueado

Informatizamos para la Sociedad Cubana


Creando un reporte estático con QWeb

3. Creación del Parser para reportes personalizados.

Para crear el Parser se debe definir una clase que herede de


report_sxw.rml_parse. Los métodos a los que se quiere
acceder desde la plantilla QWeb deben ser declarados en el
localcontext de la clase definida. Crear otra clase que hereda
de osv.AbstractModel para establecer el vínculo entre el Parser
y la plantilla Qweb.

class report_invoices(osv.AbstractModel):
_name = „report.<module_name>.<report_name>‟
_inherit = „report.abstract_report‟
_template = „<module_name>.<report_name>‟
_wrapped_report_class = <parser_class_name>
Informatizamos para la Sociedad Cubana
Creando un reporte estático con QWeb

4. Declarar un formato de hoja si se desea que el reporte


siempre use dicho formato.
<record id="paperformat_invoice" model="report.paperformat“>
<field name="name">French Bank Check</field>
<field name="default" eval="True"/>
<field name="format">custom</field>
<field name="page_height">80</field>
<field name="page_width">175</field>
<field name="orientation">Portrait</field>
<field name="margin_top">3</field>
<field name="margin_bottom">3</field>
<field name="margin_left">3</field>
<field name="margin_right">3</field>
<field name="header_line" eval="False"/>
<field name="header_spacing">3</field>
<field name="dpi">80</field>
</record>

Informatizamos para la Sociedad Cubana


Creando un reporte estático con QWeb

Informatizamos para la Sociedad Cubana


Observaciones Reportes QWeb

• Los reportes Qweb son generados en HTML y se


convierten a PDF (si report_type es qweb-pdf) por lo
que se pueden acceder a los mismos directamente vía
URL, ya sea al reporte HTML como al PDF.

• El uso de CSS para los estilos del reporte varía según la


versión de wkhtml2pdf. Se recomienda instalar
exactamente la misma versión de wkhtml2pdf en entorno
de despliegue que la que se usó en entorno de desarrollo.

• Los reportes son más sencillos de lograr que usando


OpenOffice / RML
Informatizamos para la Sociedad Cubana
Reportes dinámicos con Vistas SQL

Odoo introduce un nuevo método de presentación de


informes creados a partir de vistas SQL, pero que
permiten al usuario visualizar la información como se
desee (referencias cruzadas).

Permite conformar una tabla según los datos escogidos


(medidas), visualizar gráficas de barras y de pastel,
exportar a excel.

Informatizamos para la Sociedad Cubana


Reportes dinámicos con Vistas SQL

1. Crear un modelo que se llena a partir de una vista


SQL.
class sale_report(osv.osv):
_name = "sale.report"
_auto = False
_columns = {
„date': fields.datetime('Date Order',
readonly=True),
„name': fields.char(„Name', readonly=True),
...
}
def init(self, cr):
cr.execute(“”” consulta SQL “””)

Informatizamos para la Sociedad Cubana


Reportes dinámicos con Vistas SQL

2. Creación de la vista XML.


<record id="view_order_product_graph"
model="ir.ui.view">
<field name="name">sale.report.graph</field>
<field name="model">sale.report</field>
<field name="arch" type="xml">
<graph string="Sales Analysis" type="pivot"
stacked="True">
<field name="section_id" type="row"/>
<field name="date" interval="month"
type="col"/>
<field name="price_total"
type="measure"/>
</graph>
</field>
</record> Informatizamos para la Sociedad Cubana
Reportes dinámicos con Vistas SQL

Columnas

Filas Medidas

Informatizamos para la Sociedad Cubana


Reportes dinámicos con Vistas SQL

Modificando los indicadores a mostrar (medidas).

Informatizamos para la Sociedad Cubana


Reportes dinámicos con Vistas SQL

Agrupando según otros criterios.

Informatizamos para la Sociedad Cubana


Reportes dinámicos con Vistas SQL

Las gráficas muestran la información obtenida en la tabla de


datos.

Informatizamos para la Sociedad Cubana


Reportes dinámicos con Vistas SQL

Gráfico de pastel.

Informatizamos para la Sociedad Cubana


Reportes dinámicos con Vistas SQL

Filtros personalizados (Favoritos)

Odoo permite definir informes pre-definidos para cada


reporte dinámico (información que usualmente es muy
consultada). Esto se logra creando records en el modelo
ir.filter
<record id="filter_sale_report_salespersons"
model="ir.filters">
<field name="name">By Salespersons</field>
<field name="model_id">sale.report</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by':
['date:month', 'user_id']}</field>
</record>
Informatizamos para la Sociedad Cubana
Reportes dinámicos con Vistas SQL

Informatizamos para la Sociedad Cubana


Observaciones Reportes Dinámicos

• Permiten que el usuario obtenga la información deseada


al añadir o eliminar medidas. Un reporte puede servir
para obtener varios reportes de un cliente específico.

• La complejidad radica en declarar en el modelo todos los


campos que pueden constituir medidas, filas y columnas
en el reporte y obtener la información a partir de una
consulta SQL como única alternativa.

• Permite exportar a excel la tabla resultante con la


información deseada (aunque no indica si en ese
momento se estaba realizando una búsqueda).
Informatizamos para la Sociedad Cubana
Generación de reportes estáticos y
dinámicos en Odoo.
MSc. Ismel Rabaza Andino (irabaza@hlg.desoft.cu)

Ing. Liber Matos Martín (liber@hlg.desoft.cu)

Informatizamos para la Sociedad Cubana

Generación de reportes estáticos y 
dinámicos en Odoo. 
 
MSc. Ismel Rabaza Andino (irabaza@hlg.desoft.cu (mailto:irabaza@hlg
Informatizamos para la Sociedad Cubana 
Odoo (anteriormente OpenERP) es un sistema de código 
abierto y multiplataforma para
Informatizamos para la Sociedad Cubana 
Informes PDF, SXW, XLS 
Vistas personalizadas 
Dashboards (Tableros) Reportes en O
Informatizamos para la Sociedad Cubana 
Odoo introduce una vía nueva para la generación de 
informes basada en QWeb que brind
Informatizamos para la Sociedad Cubana 
Las directivas de la plantilla son especificadas como 
atributos XML con el prefijo t
Informatizamos para la Sociedad Cubana 
Asignación de Variables (t-set) 
<div t-foreach=“widget.get_products()" t-as=“p">
Informatizamos para la Sociedad Cubana 
Llamando sub-plantillas (t-call) 
<t t-name=“ProductDetails"> 
 <tr t-att-data-id=„pr
Informatizamos para la Sociedad Cubana 
1. Un reporte debe ser declarado como una acción de 
reporte (ir.actions.report.xml).
Informatizamos para la Sociedad Cubana 
2. Plantilla QWeb. 
<template id="report_invoice">  
 
<t t-call="report.html_contain
Informatizamos para la Sociedad Cubana 
 
Variables accesibles en el contexto de la plantilla QWeb del 
reporte. 
docs record

También podría gustarte