fix: ajuste na relação analitico x sintetico

This commit is contained in:
Alessandro Gonçaalves 2025-10-21 10:16:50 -03:00
parent 241141f794
commit 81792ec7e7
3 changed files with 116 additions and 43 deletions

View File

@ -85,61 +85,59 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) {
// Atualizar filtros externos quando os props mudarem, mas preservar filtros internos // Atualizar filtros externos quando os props mudarem, mas preservar filtros internos
React.useEffect(() => { 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); setFiltrosExternos(filtros);
}, [filtros]); }, [filtros]);
const fetchData = React.useCallback(async () => { 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 // Só faz a requisição se tiver dataInicio e dataFim nos filtros externos
if (!filtrosExternos.dataInicio || !filtrosExternos.dataFim) { if (!filtrosExternos.dataInicio || !filtrosExternos.dataFim) {
console.log('⚠️ Sem dataInicio ou dataFim, limpando dados');
setData([]); setData([]);
return; return;
} }
setLoading(true); setLoading(true);
try { try {
// Usar a nova API do Oracle // Construir URL com parâmetros de query
const response = await fetch("/api/analitico-oracle"); 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) { if (response.ok) {
const result = await response.json(); 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 setData(result as AnaliticoItem[]);
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);
} else { } else {
console.error("Erro ao buscar dados:", await response.text()); console.error("❌ Erro ao buscar dados:", await response.text());
} }
} catch (error) { } catch (error) {
console.error("Erro ao buscar dados:", error); console.error("❌ Erro ao buscar dados:", error);
} finally { } finally {
setLoading(false); setLoading(false);
} }

View File

@ -218,7 +218,13 @@ export default function Teste() {
// Função para lidar com clique nas linhas // Função para lidar com clique nas linhas
const handleRowClick = (row: HierarchicalRow, mesSelecionado?: string) => { 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 // Pegar todas as datas disponíveis para definir o período
const datas = data.map((item) => item.data_competencia); 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 dataInicioStr = new Date(dataInicio).toISOString().substring(0, 7); // YYYY-MM
const dataFimStr = new Date(dataFim).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( const { codigoGrupo, codigoSubgrupo } = extractCodes(
row.grupo || "", row.grupo || "",
row.subgrupo row.subgrupo
); );
console.log('🔍 Códigos extraídos:', { codigoGrupo, codigoSubgrupo });
// Criar um identificador único para a linha // Criar um identificador único para a linha
const linhaId = `${row.type}-${row.grupo || ""}-${row.subgrupo || ""}-${ const linhaId = `${row.type}-${row.grupo || ""}-${row.subgrupo || ""}-${
row.centro_custo || "" row.centro_custo || ""
@ -243,14 +253,17 @@ export default function Teste() {
const dataInicioFiltro = mesSelecionado || dataInicioStr; const dataInicioFiltro = mesSelecionado || dataInicioStr;
const dataFimFiltro = mesSelecionado || dataFimStr; const dataFimFiltro = mesSelecionado || dataFimStr;
setAnaliticoFiltros({ const novosFiltros = {
dataInicio: dataInicioFiltro, dataInicio: dataInicioFiltro,
dataFim: dataFimFiltro, dataFim: dataFimFiltro,
centroCusto: row.centro_custo || "", centroCusto: row.centro_custo || "",
codigoGrupo, codigoGrupo,
codigoSubgrupo, codigoSubgrupo,
codigoConta: row.codigo_conta?.toString() || "", codigoConta: row.codigo_conta?.toString() || "",
}); };
console.log('🎯 Novos filtros para analítico:', novosFiltros);
setAnaliticoFiltros(novosFiltros);
}; };
const toggleGroup = (grupo: string) => { const toggleGroup = (grupo: string) => {

View File

@ -4,13 +4,72 @@ import { executeOracleQuery } from '@/db/oracle';
export async function GET(request: NextRequest) { export async function GET(request: NextRequest) {
try { try {
console.log('🔄 Buscando dados analíticos do Oracle...'); 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 // Extrair parâmetros de query
const sql = `SELECT * FROM DRE_RESULTADO_ANALITICO ORDER BY DTVENC, CODFORNEC, CODCONTA`; 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('✅ 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 // Transformar os dados do Oracle para o formato esperado pelo componente
const transformedData = data.map((item: any) => ({ const transformedData = data.map((item: any) => ({
@ -44,6 +103,9 @@ export async function GET(request: NextRequest) {
codgrupo: item.CODGRUPO || "" codgrupo: item.CODGRUPO || ""
})); }));
console.log('🔄 Dados transformados:', transformedData.length, 'registros');
console.log('📝 Primeiros 3 transformados:', transformedData.slice(0, 3));
return NextResponse.json(transformedData); return NextResponse.json(transformedData);
} catch (error) { } catch (error) {