2025-10-21 13:08:00 +00:00
|
|
|
import { NextRequest, NextResponse } from 'next/server';
|
|
|
|
|
import { executeOracleQuery } from '@/db/oracle';
|
|
|
|
|
|
|
|
|
|
export async function GET(request: NextRequest) {
|
|
|
|
|
try {
|
|
|
|
|
console.log('🔄 Buscando dados analíticos do Oracle...');
|
2025-10-21 13:16:50 +00:00
|
|
|
console.log('📋 URL completa:', request.url);
|
|
|
|
|
console.log('🔍 Query params:', request.nextUrl.searchParams.toString());
|
|
|
|
|
console.log('📊 Headers:', Object.fromEntries(request.headers.entries()));
|
2025-10-21 13:08:00 +00:00
|
|
|
|
2025-10-21 13:16:50 +00:00
|
|
|
// 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');
|
2025-10-21 13:08:00 +00:00
|
|
|
|
2025-10-21 13:16:50 +00:00
|
|
|
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);
|
2025-10-21 13:08:00 +00:00
|
|
|
|
|
|
|
|
console.log('✅ Query executada com sucesso:', data.length, 'registros encontrados');
|
2025-10-21 13:16:50 +00:00
|
|
|
console.log('📝 Primeiros 3 registros:', data.slice(0, 3));
|
2025-10-21 13:08:00 +00:00
|
|
|
|
|
|
|
|
// Transformar os dados do Oracle para o formato esperado pelo componente
|
|
|
|
|
const transformedData = data.map((item: any) => ({
|
|
|
|
|
codigo_grupo: item.CODGRUPO || "",
|
|
|
|
|
codigo_subgrupo: "", // Não existe na tabela Oracle
|
|
|
|
|
codigo_fornecedor: item.CODFORNEC || "",
|
|
|
|
|
nome_fornecedor: item.FORNECEDOR || "",
|
|
|
|
|
id: item.NUMLANC || 0,
|
|
|
|
|
codfilial: "001", // Valor padrão
|
|
|
|
|
recnum: item.NUMLANC || 0,
|
|
|
|
|
data_competencia: item.ANOMESCOMP || "",
|
|
|
|
|
data_vencimento: item.DTVENC ? new Date(item.DTVENC).toISOString().split('T')[0] : "",
|
|
|
|
|
data_pagamento: "", // Não existe na tabela Oracle
|
|
|
|
|
data_caixa: item.DTCAIXA ? new Date(item.DTCAIXA).toISOString().split('T')[0] : "",
|
|
|
|
|
codigo_conta: item.CODCONTA || "",
|
|
|
|
|
conta: item.CONTA || "",
|
|
|
|
|
codigo_centrocusto: item.CODIGOCENTROCUSTO || "",
|
|
|
|
|
valor: item.VLREALIZADO || 0,
|
|
|
|
|
historico: item.HISTORICO || "",
|
|
|
|
|
historico2: item.HISTORICO2 || "",
|
|
|
|
|
created_at: new Date().toISOString(),
|
|
|
|
|
updated_at: new Date().toISOString(),
|
|
|
|
|
// Campos adicionais do Oracle
|
|
|
|
|
entidade: item.ENTIDADE || "",
|
|
|
|
|
tipo_parceiro: item.TIPOPARCEIRO || "",
|
|
|
|
|
valor_previsto: item.VLPREVISTO || 0,
|
|
|
|
|
valor_confirmado: item.VLCONFIRMADO || 0,
|
|
|
|
|
valor_pago: item.VLPAGO || 0,
|
|
|
|
|
numero_lancamento: item.NUMLANC || 0,
|
|
|
|
|
ano_mes_comp: item.ANOMESCOMP || "",
|
|
|
|
|
codgrupo: item.CODGRUPO || ""
|
|
|
|
|
}));
|
|
|
|
|
|
2025-10-21 13:16:50 +00:00
|
|
|
console.log('🔄 Dados transformados:', transformedData.length, 'registros');
|
|
|
|
|
console.log('📝 Primeiros 3 transformados:', transformedData.slice(0, 3));
|
|
|
|
|
|
2025-10-21 13:08:00 +00:00
|
|
|
return NextResponse.json(transformedData);
|
|
|
|
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('❌ Erro ao buscar dados analíticos do Oracle:', error);
|
|
|
|
|
|
|
|
|
|
return NextResponse.json(
|
|
|
|
|
{
|
|
|
|
|
success: false,
|
|
|
|
|
error: error instanceof Error ? error.message : 'Erro desconhecido',
|
|
|
|
|
details: error instanceof Error ? error.stack : undefined
|
|
|
|
|
},
|
|
|
|
|
{ status: 500 }
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|