43 lines
1.7 KiB
Python
43 lines
1.7 KiB
Python
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,
|
|
} |