Blog Post - April 2025

April 23, 2025 by
Blog Post - April 2025
Opencloud - 509851380, Ricardo Martins

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 consolidado­s aos decisores e reforçar a eficiência dos seus processos.


Índice

  1. Porquê Relatórios Dinâmicos?
  2. 1. Scaffolding do Módulo
  3. 2. Modelo com Campo Calculado
  4. 3. Vista em Árvore com Sumário
  5. 4. Relatório QWeb com Agregação
  6. 5. Testes e Deploy
  7. 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

  1. Reinicie o servidor Odoo e actualize a lista de módulos.
  2. Instale dynamic_report_opencloud a partir do Apps.
  3. 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!