from odoo import models, api class RelatorioFinanceiroParser(models.AbstractModel): _name = 'report.plugin_recre.template_financeiro_mensal' _description = 'Lógica do Relatório Financeiro' @api.model def _get_report_values(self, docids, data=None): # 1. Recupera o Wizard para poder usar "docs" no template # Isso corrige o erro KeyError: 'docs' docs = self.env['recreacao.financeiro.wizard'].browse(docids) # Se os dados não vierem no 'data', pega do wizard (docs) start = data.get('data_inicio') or docs.data_inicio end = data.get('data_fim') or docs.data_fim # 2. Busca os movimentos no banco de dados movimentos = self.env['recreacao.financeiro'].search([ ('data_vencimento', '>=', start), ('data_vencimento', '<=', end), ('status', '!=', 'cancelado') # Ignora cancelados ], order='data_vencimento asc') # 3. Separa e Calcula entradas = movimentos.filtered(lambda r: r.tipo == 'receita') saidas = movimentos.filtered(lambda r: r.tipo == 'despesa') total_entradas = sum(entradas.mapped('valor')) total_saidas = sum(saidas.mapped('valor')) # 4. Retorna o dicionário completo para o XML return { 'doc_ids': docids, 'doc_model': 'recreacao.financeiro.wizard', 'docs': docs, # <--- AQUI ESTAVA FALTANDO! 'data_inicio': start, 'data_fim': end, 'entradas': entradas, 'saidas': saidas, 'total_entradas': total_entradas, 'total_saidas': total_saidas, 'saldo_final': total_entradas - total_saidas, }