From 81792ec7e7ecdfae7400e3ee471bc6385c1f033f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alessandro=20Gon=C3=A7aalves?= Date: Tue, 21 Oct 2025 10:16:50 -0300 Subject: [PATCH] =?UTF-8?q?fix:=20ajuste=20na=20rela=C3=A7=C3=A3o=20analit?= =?UTF-8?q?ico=20x=20sintetico?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/DRE/analitico.tsx | 72 +++++++++++++-------------- src/app/DRE/teste.tsx | 19 +++++-- src/app/api/analitico-oracle/route.ts | 68 +++++++++++++++++++++++-- 3 files changed, 116 insertions(+), 43 deletions(-) diff --git a/src/app/DRE/analitico.tsx b/src/app/DRE/analitico.tsx index 91bc38c..3837a1a 100644 --- a/src/app/DRE/analitico.tsx +++ b/src/app/DRE/analitico.tsx @@ -85,61 +85,59 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { // Atualizar filtros externos quando os props mudarem, mas preservar filtros internos React.useEffect(() => { + console.log('🔄 Analítico - useEffect dos filtros chamado'); + console.log('📋 Filtros recebidos via props:', filtros); + console.log('📋 Filtros externos atuais:', filtrosExternos); setFiltrosExternos(filtros); }, [filtros]); const fetchData = React.useCallback(async () => { + console.log('🔄 Analítico - fetchData chamado'); + console.log('📋 Filtros externos recebidos:', filtrosExternos); + // Só faz a requisição se tiver dataInicio e dataFim nos filtros externos if (!filtrosExternos.dataInicio || !filtrosExternos.dataFim) { + console.log('⚠️ Sem dataInicio ou dataFim, limpando dados'); setData([]); return; } setLoading(true); try { - // Usar a nova API do Oracle - const response = await fetch("/api/analitico-oracle"); + // Construir URL com parâmetros de query + const params = new URLSearchParams(); + + if (filtrosExternos.dataInicio) { + params.append('dataInicio', filtrosExternos.dataInicio); + } + if (filtrosExternos.dataFim) { + params.append('dataFim', filtrosExternos.dataFim); + } + if (filtrosExternos.centroCusto) { + params.append('centroCusto', filtrosExternos.centroCusto); + } + if (filtrosExternos.codigoGrupo) { + params.append('codigoGrupo', filtrosExternos.codigoGrupo); + } + if (filtrosExternos.codigoConta) { + params.append('codigoConta', filtrosExternos.codigoConta); + } + + const url = `/api/analitico-oracle?${params.toString()}`; + console.log('🌐 Fazendo requisição para:', url); + + const response = await fetch(url); if (response.ok) { const result = await response.json(); + console.log('✅ Resposta da API recebida:', result.length, 'registros'); + console.log('📝 Primeiros 3 registros:', result.slice(0, 3)); - // Aplicar filtros externos (vindos do teste.tsx) nos dados retornados - let filteredData = result as AnaliticoItem[]; - - // Filtro por período se especificado nos filtros externos - if (filtrosExternos.dataInicio && filtrosExternos.dataFim) { - filteredData = filteredData.filter((item: AnaliticoItem) => { - const dataItem = item.data_competencia || item.ano_mes_comp; - return dataItem && dataItem >= filtrosExternos.dataInicio && dataItem <= filtrosExternos.dataFim; - }); - } - - // Filtro por centro de custo se especificado nos filtros externos - if (filtrosExternos.centroCusto) { - filteredData = filteredData.filter((item: AnaliticoItem) => - item.codigo_centrocusto === filtrosExternos.centroCusto - ); - } - - // Filtro por código do grupo se especificado nos filtros externos - if (filtrosExternos.codigoGrupo) { - filteredData = filteredData.filter((item: AnaliticoItem) => - item.codgrupo === filtrosExternos.codigoGrupo - ); - } - - // Filtro por código da conta se especificado nos filtros externos - if (filtrosExternos.codigoConta) { - filteredData = filteredData.filter((item: AnaliticoItem) => - item.codigo_conta === filtrosExternos.codigoConta - ); - } - - setData(filteredData); + setData(result as AnaliticoItem[]); } else { - console.error("Erro ao buscar dados:", await response.text()); + console.error("❌ Erro ao buscar dados:", await response.text()); } } catch (error) { - console.error("Erro ao buscar dados:", error); + console.error("❌ Erro ao buscar dados:", error); } finally { setLoading(false); } diff --git a/src/app/DRE/teste.tsx b/src/app/DRE/teste.tsx index 24945e7..32aa5be 100644 --- a/src/app/DRE/teste.tsx +++ b/src/app/DRE/teste.tsx @@ -218,7 +218,13 @@ export default function Teste() { // Função para lidar com clique nas linhas const handleRowClick = (row: HierarchicalRow, mesSelecionado?: string) => { - if (!data.length) return; + console.log('🖱️ Clique na linha:', row); + console.log('📅 Mês selecionado:', mesSelecionado); + + if (!data.length) { + console.log('⚠️ Sem dados disponíveis'); + return; + } // Pegar todas as datas disponíveis para definir o período const datas = data.map((item) => item.data_competencia); @@ -228,11 +234,15 @@ export default function Teste() { const dataInicioStr = new Date(dataInicio).toISOString().substring(0, 7); // YYYY-MM const dataFimStr = new Date(dataFim).toISOString().substring(0, 7); // YYYY-MM + console.log('📅 Datas calculadas:', { dataInicioStr, dataFimStr }); + const { codigoGrupo, codigoSubgrupo } = extractCodes( row.grupo || "", row.subgrupo ); + console.log('🔍 Códigos extraídos:', { codigoGrupo, codigoSubgrupo }); + // Criar um identificador único para a linha const linhaId = `${row.type}-${row.grupo || ""}-${row.subgrupo || ""}-${ row.centro_custo || "" @@ -243,14 +253,17 @@ export default function Teste() { const dataInicioFiltro = mesSelecionado || dataInicioStr; const dataFimFiltro = mesSelecionado || dataFimStr; - setAnaliticoFiltros({ + const novosFiltros = { dataInicio: dataInicioFiltro, dataFim: dataFimFiltro, centroCusto: row.centro_custo || "", codigoGrupo, codigoSubgrupo, codigoConta: row.codigo_conta?.toString() || "", - }); + }; + + console.log('🎯 Novos filtros para analítico:', novosFiltros); + setAnaliticoFiltros(novosFiltros); }; const toggleGroup = (grupo: string) => { diff --git a/src/app/api/analitico-oracle/route.ts b/src/app/api/analitico-oracle/route.ts index e22ddf7..2c8037a 100644 --- a/src/app/api/analitico-oracle/route.ts +++ b/src/app/api/analitico-oracle/route.ts @@ -4,13 +4,72 @@ import { executeOracleQuery } from '@/db/oracle'; export async function GET(request: NextRequest) { try { console.log('🔄 Buscando dados analíticos do Oracle...'); + console.log('📋 URL completa:', request.url); + console.log('🔍 Query params:', request.nextUrl.searchParams.toString()); + console.log('📊 Headers:', Object.fromEntries(request.headers.entries())); - // Query para buscar dados da tabela DRE_RESULTADO_ANALITICO - const sql = `SELECT * FROM DRE_RESULTADO_ANALITICO ORDER BY DTVENC, CODFORNEC, CODCONTA`; + // Extrair parâmetros de query + const searchParams = request.nextUrl.searchParams; + const dataInicio = searchParams.get('dataInicio'); + const dataFim = searchParams.get('dataFim'); + const centroCusto = searchParams.get('centroCusto'); + const codigoGrupo = searchParams.get('codigoGrupo'); + const codigoConta = searchParams.get('codigoConta'); - const data = await executeOracleQuery(sql); + console.log('🎯 Filtros recebidos:', { + dataInicio, + dataFim, + centroCusto, + codigoGrupo, + codigoConta + }); + + // Construir query SQL com filtros + let sql = `SELECT * FROM DRE_RESULTADO_ANALITICO WHERE 1=1`; + const params: any[] = []; + let paramIndex = 1; + + // Filtro por período + if (dataInicio && dataFim) { + sql += ` AND ANOMESCOMP >= :${paramIndex} AND ANOMESCOMP <= :${paramIndex + 1}`; + params.push(dataInicio, dataFim); + paramIndex += 2; + console.log('📅 Adicionando filtro de período:', dataInicio, 'a', dataFim); + } + + // Filtro por centro de custo + if (centroCusto) { + sql += ` AND CODIGOCENTROCUSTO = :${paramIndex}`; + params.push(centroCusto); + paramIndex++; + console.log('🏢 Adicionando filtro de centro:', centroCusto); + } + + // Filtro por código do grupo + if (codigoGrupo) { + sql += ` AND CODGRUPO = :${paramIndex}`; + params.push(codigoGrupo); + paramIndex++; + console.log('📊 Adicionando filtro de grupo:', codigoGrupo); + } + + // Filtro por código da conta + if (codigoConta) { + sql += ` AND CODCONTA = :${paramIndex}`; + params.push(codigoConta); + paramIndex++; + console.log('💰 Adicionando filtro de conta:', codigoConta); + } + + sql += ` ORDER BY DTVENC, CODFORNEC, CODCONTA`; + + console.log('🗄️ Query SQL final:', sql); + console.log('📋 Parâmetros:', params); + + const data = await executeOracleQuery(sql, params); console.log('✅ Query executada com sucesso:', data.length, 'registros encontrados'); + console.log('📝 Primeiros 3 registros:', data.slice(0, 3)); // Transformar os dados do Oracle para o formato esperado pelo componente const transformedData = data.map((item: any) => ({ @@ -44,6 +103,9 @@ export async function GET(request: NextRequest) { codgrupo: item.CODGRUPO || "" })); + console.log('🔄 Dados transformados:', transformedData.length, 'registros'); + console.log('📝 Primeiros 3 transformados:', transformedData.slice(0, 3)); + return NextResponse.json(transformedData); } catch (error) {