fix: ajuste na relação analitico x sintetico
This commit is contained in:
parent
241141f794
commit
81792ec7e7
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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) => {
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue