vendaweb-api/src/app/api/analitico-oracle/route.ts

157 lines
5.8 KiB
TypeScript
Raw Normal View History

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...');
console.log('📋 URL completa:', request.url);
console.log('🔍 Query params:', request.nextUrl.searchParams.toString());
console.log('📊 Headers:', Object.fromEntries(request.headers.entries()));
// 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');
// Parâmetros para exclusão de valores específicos
const excluirCentroCusto = searchParams.get('excluirCentroCusto');
const excluirCodigoConta = searchParams.get('excluirCodigoConta');
console.log('🎯 Filtros recebidos:', {
dataInicio,
dataFim,
centroCusto,
codigoGrupo,
codigoConta,
excluirCentroCusto,
excluirCodigoConta
});
// 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);
}
// Exclusão de centro de custo específico (quando desmarcado)
if (excluirCentroCusto) {
sql += ` AND CODIGOCENTROCUSTO != :${paramIndex}`;
params.push(excluirCentroCusto);
paramIndex++;
console.log('🚫 Excluindo centro de custo:', excluirCentroCusto);
}
// Exclusão de código de conta específico (quando desmarcado)
if (excluirCodigoConta) {
sql += ` AND CODCONTA != :${paramIndex}`;
params.push(excluirCodigoConta);
paramIndex++;
console.log('🚫 Excluindo código de conta:', excluirCodigoConta);
}
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) => {
// Debug dos valores monetários
console.log('🔍 Item original:', {
VLREALIZADO: item.VLREALIZADO,
VLPREVISTO: item.VLPREVISTO,
VLCONFIRMADO: item.VLCONFIRMADO,
VLPAGO: item.VLPAGO,
tipo_VLREALIZADO: typeof item.VLREALIZADO
});
return {
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 !== null && item.VLREALIZADO !== undefined ? Number(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 !== null && item.VLPREVISTO !== undefined ? Number(item.VLPREVISTO) : 0,
valor_confirmado: item.VLCONFIRMADO !== null && item.VLCONFIRMADO !== undefined ? Number(item.VLCONFIRMADO) : 0,
valor_pago: item.VLPAGO !== null && item.VLPAGO !== undefined ? Number(item.VLPAGO) : 0,
numero_lancamento: item.NUMLANC || 0,
ano_mes_comp: item.ANOMESCOMP || "",
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) {
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 }
);
}
}