Relatórios Dinâmicos no Odoo: Criar Módulos e Somar Valores em Tempo Real
Publicado por OpenCloud · Optimizado para Odoo em Portugal
Descubra como construir um módulo Odoo do zero que apresenta relatórios dinâmicos com somas automáticas de valores em células. Este guia prático vai ajudá-lo a potenciar a sua gestão empresarial, apresentar dados consolidados aos decisores e reforçar a eficiência dos seus processos.
Índice
- Porquê Relatórios Dinâmicos?
- 1. Scaffolding do Módulo
- 2. Modelo com Campo Calculado
- 3. Vista em Árvore com Sumário
- 4. Relatório QWeb com Agregação
- 5. Testes e Deploy
- Conclusão e Próximos Passos
Porquê Relatórios Dinâmicos?
- Visão instantânea de KPIs financeiros
- Automação de cálculos que reduz erros manuais
- Flexibilidade para personalizar somatórios e filtros
- Aumenta a agilidade na tomada de decisão
1. Scaffolding do Módulo
Use o comando scaffold
para criar a estrutura base:
bash
$ cd /caminho/para/addons
$ odoo-bin scaffold dynamic_report_opencloud .
Irá gerar pastas e ficheiros essenciais como __init__.py
, __manifest__.py
e subpastas models
, views
.
2. Modelo com Campo Calculado
No ficheiro models/report_line.py
, defina o modelo com um campo que agregue valores:
```python from odoo import models, fields, api
class ReportLine(models.Model): _name = 'dynamic.report.line' _description = 'Linha do Relatório Dinâmico'
name = fields.Char(string='Descrição')
unit_price = fields.Float(string='Preço Unitário')
quantity = fields.Integer(string='Quantidade')
total_line = fields.Float(string='Total Linha', compute='_compute_total_line', store=True)
@api.depends('unit_price', 'quantity')
def _compute_total_line(self):
for rec in self:
rec.total_line = rec.unit_price * rec.quantity
```
Pontos-chave
- @api.depends
garante que o campo é recalculado sempre que unit_price
ou quantity
mudam.
- store=True
permite usar o campo em filtros e ordenações.
3. Vista em Árvore com Sumário
Para exibir a lista com uma linha de soma, edite views/report_line_views.xml
:
xml
<odoo>
<record id="view_report_line_tree" model="ir.ui.view">
<field name="name">dynamic.report.line.tree</field>
<field name="model">dynamic.report.line</field>
<field name="arch" type="xml">
<tree string="Relatório Dinâmico" editable="bottom" sum="sum">
<field name="name"/>
<field name="unit_price"/>
<field name="quantity"/>
<field name="total_line" sum="Total Geral"/>
</tree>
</field>
</record>
</odoo>
Atributo sum
- Adiciona automaticamente o rodapé com a soma dos valores da coluna.
- O texto dentro de sum="Total Geral"
define o rótulo do total.
4. Relatório QWeb com Agregação
Para imprimir um PDF ou HTML, utilize QWeb:
xml
<template id="report_dynamic_document">
<t t-call="web.external_layout">
<div class="page">
<h2>Relatório Dinâmico OpenCloud</h2>
<table class="table table-sm">
<thead>
<tr>
<th>Descrição</th>
<th>Preço Unitário</th>
<th>Quantidade</th>
<th>Total Linha</th>
</tr>
</thead>
<tbody>
<t t-foreach="docs" t-as="o">
<tr>
<td><span t-esc="o.name"/></td>
<td><span t-esc="o.unit_price"/></td>
<td><span t-esc="o.quantity"/></td>
<td><span t-esc="o.total_line"/></td>
</tr>
</t>
</tbody>
<tfoot>
<tr>
<th colspan="3" class="text-right">Total Global:</th>
<th>
<span t-esc="sum([o.total_line for o in docs])"/>
</th>
</tr>
</tfoot>
</table>
</div>
</t>
</template>
Dica Avançada: utilize t-set
para pré-calcular valores e evitar loops desnecessários.
5. Testes e Deploy
- Reinicie o servidor Odoo e actualize a lista de módulos.
- Instale
dynamic_report_opencloud
a partir do Apps. - Insira registos de teste em Relatório Dinâmico e confirme que o sumário aparece correctamente.
Para ambientes de produção, certifique-se de ter backups e de testar no ambiente de staging.
Conclusão e Próximos Passos
Com estas técnicas, já pode criar relatórios interativos e com somatórios em tempo real dentro do Odoo, potenciando:
- Decisões mais rápidas com dados consolidados.
- Personalização conforme necessidades específicas da sua empresa.
Precisa de ajuda a implementar esta e outras funcionalidades avançadas no seu Odoo? Visite-nos em www.opencloud.pro ou torne-se cliente Odoo através do nosso perfil oficial:
https://www.odoo.com/partners/opencloud-unipessoal-lda-12774
Impulsione a sua transformação digital com a OpenCloud!