fix: correção filtro analitico centro custro
This commit is contained in:
parent
5c97a7911e
commit
2808b6a25c
|
|
@ -25,7 +25,7 @@ export async function GET(request: NextRequest) {
|
|||
const codigosCentrosCustoSelecionados = searchParams.get('codigosCentrosCustoSelecionados');
|
||||
const codigosContasSelecionadas = searchParams.get('codigosContasSelecionadas');
|
||||
|
||||
console.log('🎯 Filtros recebidos:', {
|
||||
console.log('🎯 Filtros recebidos na API:', {
|
||||
dataInicio,
|
||||
dataFim,
|
||||
centroCusto,
|
||||
|
|
@ -37,6 +37,13 @@ export async function GET(request: NextRequest) {
|
|||
codigosCentrosCustoSelecionados,
|
||||
codigosContasSelecionadas
|
||||
});
|
||||
console.log('🔍 Verificação específica de centroCusto:', {
|
||||
centroCusto,
|
||||
tipo: typeof centroCusto,
|
||||
vazio: centroCusto === null || centroCusto === undefined || centroCusto === '',
|
||||
codigosCentrosCustoSelecionados,
|
||||
codigosCentrosCustoSelecionadosVazio: !codigosCentrosCustoSelecionados || codigosCentrosCustoSelecionados === ''
|
||||
});
|
||||
|
||||
// Construir query SQL com filtros usando a view DESPESA_ENTIDADE_ANALITICO
|
||||
let sql = `SELECT * FROM DESPESA_ENTIDADE_ANALITICO WHERE 1=1`;
|
||||
|
|
@ -75,21 +82,40 @@ export async function GET(request: NextRequest) {
|
|||
console.log('💰 Adicionando filtro de conta:', codigoConta);
|
||||
}
|
||||
|
||||
// Filtro por códigos de centros de custo selecionados no filtro (tem prioridade sobre centroCusto individual)
|
||||
if (codigosCentrosCustoSelecionados) {
|
||||
// Filtro por códigos de centros de custo selecionados no filtro
|
||||
// Se houver codigosCentrosCustoSelecionados E centroCusto individual, incluir ambos
|
||||
console.log('🔍 Antes de aplicar filtro de centro de custo:', {
|
||||
codigosCentrosCustoSelecionados,
|
||||
centroCusto,
|
||||
codigosCentrosCustoSelecionadosVazio: !codigosCentrosCustoSelecionados || codigosCentrosCustoSelecionados.trim() === '',
|
||||
centroCustoVazio: !centroCusto || centroCusto.trim() === '',
|
||||
centroCustoLength: centroCusto?.length,
|
||||
codigosCentrosCustoSelecionadosLength: codigosCentrosCustoSelecionados?.length
|
||||
});
|
||||
|
||||
// IMPORTANTE: Quando centroCusto individual é fornecido (clique na célula), ele tem PRIORIDADE ABSOLUTA
|
||||
// e deve filtrar APENAS por ele, ignorando codigosCentrosCustoSelecionados do filtro geral
|
||||
if (centroCusto && centroCusto.trim() !== '') {
|
||||
// Quando há centroCusto individual (clique na célula), usar APENAS ele
|
||||
// Ignorar codigosCentrosCustoSelecionados do filtro geral para garantir filtro preciso
|
||||
sql += ` AND CODIGOCENTROCUSTO = :${paramIndex}`;
|
||||
params.push(centroCusto);
|
||||
paramIndex++;
|
||||
console.log('🏢 PRIORIDADE: Filtrando APENAS por centroCusto individual (clique na célula):', centroCusto);
|
||||
console.log('⚠️ Ignorando codigosCentrosCustoSelecionados do filtro geral quando há centroCusto individual');
|
||||
console.log('📝 SQL após adicionar filtro =:', sql.substring(0, 200) + '...');
|
||||
} else if (codigosCentrosCustoSelecionados && codigosCentrosCustoSelecionados.trim() !== '') {
|
||||
// Se só codigosCentrosCustoSelecionados existe (sem clique na célula), usar ele
|
||||
const codigosArray = codigosCentrosCustoSelecionados.split(',').filter(c => c.trim() !== '');
|
||||
if (codigosArray.length > 0) {
|
||||
const placeholders = codigosArray.map(() => `:${paramIndex++}`).join(',');
|
||||
sql += ` AND CODIGOCENTROCUSTO IN (${placeholders})`;
|
||||
params.push(...codigosArray);
|
||||
console.log('🏢 Filtrando por códigos de centros de custo selecionados:', codigosArray);
|
||||
console.log('🏢 Filtrando por códigos de centros de custo selecionados (filtro geral):', codigosArray);
|
||||
console.log('📝 SQL após adicionar filtro IN:', sql.substring(0, 200) + '...');
|
||||
}
|
||||
} else if (centroCusto) {
|
||||
// Só usar filtro individual de centroCusto se não houver codigosCentrosCustoSelecionados
|
||||
sql += ` AND CODIGOCENTROCUSTO = :${paramIndex}`;
|
||||
params.push(centroCusto);
|
||||
paramIndex++;
|
||||
console.log('🏢 Adicionando filtro de centro individual:', centroCusto);
|
||||
} else {
|
||||
console.log('⚠️ Nenhum filtro de centro de custo aplicado - ambos estão vazios');
|
||||
}
|
||||
|
||||
// Exclusão de centro de custo específico (quando desmarcado)
|
||||
|
|
@ -120,8 +146,49 @@ export async function GET(request: NextRequest) {
|
|||
|
||||
sql += ` ORDER BY DTVENC, CODFORNEC, CODCONTA`;
|
||||
|
||||
console.log('🗄️ Query SQL final:', sql);
|
||||
console.log('📋 Parâmetros:', params);
|
||||
// Log detalhado da query SQL final
|
||||
console.log('═══════════════════════════════════════════════════════════════');
|
||||
console.log('🗄️ QUERY SQL FINAL:');
|
||||
console.log('═══════════════════════════════════════════════════════════════');
|
||||
console.log(sql);
|
||||
console.log('═══════════════════════════════════════════════════════════════');
|
||||
console.log('📋 PARÂMETROS FINAIS (na ordem dos placeholders :1, :2, :3, ...):');
|
||||
console.log('═══════════════════════════════════════════════════════════════');
|
||||
params.forEach((param, index) => {
|
||||
console.log(` :${index + 1} = ${param} (${typeof param})`);
|
||||
});
|
||||
console.log('═══════════════════════════════════════════════════════════════');
|
||||
console.log('📊 RESUMO DOS FILTROS APLICADOS:');
|
||||
console.log('═══════════════════════════════════════════════════════════════');
|
||||
console.log({
|
||||
temPeriodo: dataInicio && dataFim,
|
||||
periodo: dataInicio && dataFim ? `${dataInicio} a ${dataFim}` : 'N/A',
|
||||
temCodigoGrupo: !!codigoGrupo,
|
||||
codigoGrupo: codigoGrupo || 'N/A',
|
||||
temCodigoSubgrupo: !!codigoSubgrupo,
|
||||
codigoSubgrupo: codigoSubgrupo || 'N/A',
|
||||
temCentroCusto: !!centroCusto,
|
||||
centroCusto: centroCusto || 'N/A',
|
||||
temCodigosCentrosCustoSelecionados: !!codigosCentrosCustoSelecionados,
|
||||
codigosCentrosCustoSelecionados: codigosCentrosCustoSelecionados || 'N/A',
|
||||
temCodigoConta: !!codigoConta,
|
||||
codigoConta: codigoConta || 'N/A',
|
||||
temCodigosContasSelecionadas: !!codigosContasSelecionadas,
|
||||
codigosContasSelecionadas: codigosContasSelecionadas || 'N/A',
|
||||
temExcluirCentroCusto: !!excluirCentroCusto,
|
||||
excluirCentroCusto: excluirCentroCusto || 'N/A',
|
||||
temExcluirCodigoConta: !!excluirCodigoConta,
|
||||
excluirCodigoConta: excluirCodigoConta || 'N/A'
|
||||
});
|
||||
console.log('═══════════════════════════════════════════════════════════════');
|
||||
|
||||
// Se há centroCusto individual, destacar especialmente
|
||||
if (centroCusto && centroCusto.trim() !== '') {
|
||||
console.log('🎯 FILTRO INDIVIDUAL DE CENTRO DE CUSTO ATIVO (clique na célula)');
|
||||
console.log(` Centro de Custo: ${centroCusto}`);
|
||||
console.log(' ⚠️ Este filtro tem PRIORIDADE sobre codigosCentrosCustoSelecionados');
|
||||
}
|
||||
console.log('═══════════════════════════════════════════════════════════════');
|
||||
|
||||
const data = await executeOracleQuery(sql, params);
|
||||
|
||||
|
|
|
|||
|
|
@ -384,6 +384,9 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) {
|
|||
}
|
||||
if (filtrosExternos.centroCusto) {
|
||||
params.append('centroCusto', filtrosExternos.centroCusto);
|
||||
console.log('🏢 Analítico - Adicionando parâmetro centroCusto:', filtrosExternos.centroCusto);
|
||||
} else {
|
||||
console.log('⚠️ Analítico - centroCusto não está presente nos filtros externos');
|
||||
}
|
||||
if (filtrosExternos.codigoGrupo) {
|
||||
params.append('codigoGrupo', filtrosExternos.codigoGrupo);
|
||||
|
|
@ -409,6 +412,16 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) {
|
|||
|
||||
const url = `/api/analitico-entidade-oracle?${params.toString()}`;
|
||||
console.log('🌐 Fazendo requisição para:', url);
|
||||
console.log('📋 Parâmetros enviados:', {
|
||||
dataInicio: filtrosExternos.dataInicio,
|
||||
dataFim: filtrosExternos.dataFim,
|
||||
centroCusto: filtrosExternos.centroCusto,
|
||||
codigoGrupo: filtrosExternos.codigoGrupo,
|
||||
codigoSubgrupo: filtrosExternos.codigoSubgrupo,
|
||||
codigoConta: filtrosExternos.codigoConta,
|
||||
codigosCentrosCustoSelecionados: filtrosExternos.codigosCentrosCustoSelecionados,
|
||||
codigosContasSelecionadas: filtrosExternos.codigosContasSelecionadas
|
||||
});
|
||||
|
||||
const response = await fetch(url);
|
||||
if (response.ok) {
|
||||
|
|
|
|||
|
|
@ -482,22 +482,26 @@ export default function Teste() {
|
|||
const dataFimFiltro = mesSelecionado || dataFimStr;
|
||||
|
||||
// Determinar filtros baseado na nova hierarquia [entidade, direto/indireto, cc, conta]
|
||||
// IMPORTANTE: Quando clicar em um nível abaixo, manter os filtros dos níveis anteriores
|
||||
let centroCustoFiltro = "";
|
||||
let codigoContaFiltro = "";
|
||||
let codigoGrupoFiltro = "";
|
||||
let entidadeFiltro = "";
|
||||
let diretoIndiretoFiltro = "";
|
||||
|
||||
// Sempre filtrar por entidade se disponível
|
||||
// Sempre filtrar por entidade se disponível (mantém em todos os níveis)
|
||||
// Quando clicar em centro_custo ou conta, manter a entidade do nível anterior
|
||||
entidadeFiltro = row.entidade || "";
|
||||
|
||||
// Filtrar por direto/indireto se disponível
|
||||
// Quando clicar em uma célula de valor de uma linha "direto_indireto" (DIRETO, INDIRETO ou SEM CC),
|
||||
// adicionar o SUBGRUPO como filtro adicional
|
||||
// Quando clicar em centro_custo ou conta, manter o direto_indireto do nível anterior
|
||||
diretoIndiretoFiltro = row.direto_indireto || "";
|
||||
|
||||
// Verificar se a linha é do tipo "direto_indireto" e se a entidade pai está expandida (drill aberto)
|
||||
// Se sim, usar o direto_indireto como codigoSubgrupo no filtro
|
||||
// Determinar codigoSubgrupo baseado na hierarquia
|
||||
// Quando clicar em qualquer nível abaixo de direto_indireto, deve manter o filtro do nível anterior
|
||||
let codigoSubgrupoFiltro = "";
|
||||
if (row.type === "direto_indireto" && row.direto_indireto) {
|
||||
// Verificar se a entidade pai está expandida
|
||||
|
|
@ -507,6 +511,44 @@ export default function Teste() {
|
|||
codigoSubgrupoFiltro = row.direto_indireto;
|
||||
console.log('📊 Drill aberto - Adicionando filtro de subgrupo:', codigoSubgrupoFiltro);
|
||||
}
|
||||
} else if (row.type === "centro_custo" && row.direto_indireto) {
|
||||
// Quando clicar em centro de custo, manter o filtro do nível anterior (direto_indireto)
|
||||
codigoSubgrupoFiltro = row.direto_indireto;
|
||||
console.log('📊 Mantendo filtro de subgrupo do nível anterior (centro_custo):', codigoSubgrupoFiltro);
|
||||
} else if (row.type === "conta" && row.direto_indireto) {
|
||||
// Quando clicar em conta, manter o filtro do nível anterior (direto_indireto)
|
||||
codigoSubgrupoFiltro = row.direto_indireto;
|
||||
console.log('📊 Mantendo filtro de subgrupo do nível anterior (conta):', codigoSubgrupoFiltro);
|
||||
}
|
||||
|
||||
// Quando clicar em uma célula de valor de um centro de custo, sempre adicionar o CODIGOCENTROCUSTO ao filtro
|
||||
// Sempre adicionar o CODIGOCENTROCUSTO quando clicar em uma célula de valor de centro de custo
|
||||
let codigoCentroCustoFiltroAdicional = "";
|
||||
if (row.type === "centro_custo") {
|
||||
// Sempre adicionar o CODIGOCENTROCUSTO quando clicar em uma célula de valor de centro de custo
|
||||
// Tentar obter o código do centro de custo de diferentes formas
|
||||
codigoCentroCustoFiltroAdicional = row.codigo_centro_custo || "";
|
||||
|
||||
// Se não tiver codigo_centro_custo na row, tentar buscar nos dados originais
|
||||
if (!codigoCentroCustoFiltroAdicional && row.centro_custo) {
|
||||
const itemCentro = data.find((item: DREItem) =>
|
||||
item.centro_custo === row.centro_custo &&
|
||||
item.entidades === row.entidade &&
|
||||
item.subgrupo === row.direto_indireto
|
||||
);
|
||||
if (itemCentro?.codigo_centro_custo) {
|
||||
codigoCentroCustoFiltroAdicional = itemCentro.codigo_centro_custo;
|
||||
}
|
||||
}
|
||||
|
||||
console.log('📊 Adicionando filtro de centro de custo (sempre):', {
|
||||
codigoCentroCustoFiltroAdicional,
|
||||
tipoLinha: row.type,
|
||||
codigo_centro_custo: row.codigo_centro_custo,
|
||||
centro_custo: row.centro_custo,
|
||||
entidade: row.entidade,
|
||||
direto_indireto: row.direto_indireto
|
||||
});
|
||||
}
|
||||
|
||||
// Buscar CODGRUPO dos dados originais baseado na hierarquia selecionada
|
||||
|
|
@ -567,8 +609,48 @@ export default function Teste() {
|
|||
}
|
||||
|
||||
// Filtrar por centro de custo se for nível centro_custo ou conta
|
||||
if (row.type === "centro_custo" || row.type === "conta") {
|
||||
// IMPORTANTE: Quando clicar em um nível abaixo, manter os filtros dos níveis anteriores
|
||||
if (row.type === "centro_custo") {
|
||||
// Sempre usar o codigo_centro_custo quando clicar em uma célula de valor
|
||||
// Priorizar o filtro adicional se existir, senão usar o codigo_centro_custo da linha
|
||||
if (codigoCentroCustoFiltroAdicional) {
|
||||
centroCustoFiltro = codigoCentroCustoFiltroAdicional;
|
||||
} else if (row.codigo_centro_custo) {
|
||||
centroCustoFiltro = row.codigo_centro_custo;
|
||||
} else {
|
||||
// Se não tiver na row, buscar nos dados originais
|
||||
const itemCentro = data.find((item: DREItem) =>
|
||||
item.centro_custo === row.centro_custo &&
|
||||
item.entidades === row.entidade &&
|
||||
item.subgrupo === row.direto_indireto
|
||||
);
|
||||
centroCustoFiltro = itemCentro?.codigo_centro_custo || "";
|
||||
}
|
||||
// Manter filtros dos níveis anteriores (entidade e subgrupo já estão definidos acima)
|
||||
console.log('📊 Adicionando filtro de centro de custo (mantendo níveis anteriores):', {
|
||||
centroCustoFiltro,
|
||||
codigoCentroCustoFiltroAdicional,
|
||||
codigo_centro_custo: row.codigo_centro_custo,
|
||||
tipoLinha: row.type,
|
||||
entidadeFiltro: entidadeFiltro, // Mantido do nível anterior
|
||||
codigoSubgrupoFiltro: codigoSubgrupoFiltro, // Mantido do nível anterior
|
||||
rowData: {
|
||||
centro_custo: row.centro_custo,
|
||||
entidade: row.entidade,
|
||||
direto_indireto: row.direto_indireto
|
||||
}
|
||||
});
|
||||
} else if (row.type === "conta") {
|
||||
// Para conta, adicionar o centro de custo E manter os filtros dos níveis anteriores
|
||||
centroCustoFiltro = row.codigo_centro_custo || "";
|
||||
// Manter filtros dos níveis anteriores (entidade e subgrupo já estão definidos acima)
|
||||
console.log('📊 Adicionando filtro de conta (mantendo níveis anteriores):', {
|
||||
codigoContaFiltro: row.codigo_conta?.toString() || "",
|
||||
centroCustoFiltro,
|
||||
entidadeFiltro: entidadeFiltro, // Mantido do nível anterior
|
||||
codigoSubgrupoFiltro: codigoSubgrupoFiltro, // Mantido do nível anterior
|
||||
tipoLinha: row.type
|
||||
});
|
||||
}
|
||||
|
||||
// Filtrar por conta se for nível conta
|
||||
|
|
@ -647,12 +729,22 @@ export default function Teste() {
|
|||
.filter(codigo => codigo)
|
||||
.join(',');
|
||||
|
||||
// Garantir que centroCustoFiltro está definido quando for tipo centro_custo
|
||||
if (row.type === "centro_custo" && !centroCustoFiltro && row.codigo_centro_custo) {
|
||||
centroCustoFiltro = row.codigo_centro_custo;
|
||||
console.log('⚠️ Centro de custo filtro estava vazio, definindo agora:', centroCustoFiltro);
|
||||
}
|
||||
|
||||
// Garantir que codigoSubgrupo seja mantido quando clicar em níveis abaixo
|
||||
// Se codigoSubgrupoFiltro estiver vazio mas diretoIndiretoFiltro existir, usar diretoIndiretoFiltro
|
||||
const codigoSubgrupoFinal = codigoSubgrupoFiltro || diretoIndiretoFiltro || "";
|
||||
|
||||
const novosFiltros = {
|
||||
dataInicio: dataInicioFiltro,
|
||||
dataFim: dataFimFiltro,
|
||||
centroCusto: centroCustoFiltro,
|
||||
codigoGrupo: codigoGrupoFiltro, // CODGRUPO da entidade/linha selecionada
|
||||
codigoSubgrupo: codigoSubgrupoFiltro || diretoIndiretoFiltro, // SUBGRUPO quando drill aberto (DIRETO, INDIRETO ou SEM CC)
|
||||
codigoSubgrupo: codigoSubgrupoFinal, // SUBGRUPO mantido dos níveis anteriores quando clicar em centro_custo ou conta
|
||||
codigoConta: codigoContaFiltro,
|
||||
linhaSelecionada: row.entidade || row.direto_indireto || row.centro_custo || row.conta || "",
|
||||
excluirCentroCusto,
|
||||
|
|
@ -661,7 +753,25 @@ export default function Teste() {
|
|||
codigosContasSelecionadas,
|
||||
};
|
||||
|
||||
console.log('🔍 Verificação de filtros mantidos:', {
|
||||
tipoLinha: row.type,
|
||||
codigoSubgrupoFiltro,
|
||||
diretoIndiretoFiltro,
|
||||
codigoSubgrupoFinal,
|
||||
entidadeFiltro,
|
||||
centroCustoFiltro,
|
||||
codigoGrupoFiltro
|
||||
});
|
||||
|
||||
console.log('🎯 Novos filtros para analítico:', novosFiltros);
|
||||
console.log('🔍 Verificação específica de centro de custo:', {
|
||||
centroCustoFiltro,
|
||||
tipoLinha: row.type,
|
||||
codigo_centro_custo: row.codigo_centro_custo,
|
||||
codigoCentroCustoFiltroAdicional,
|
||||
centro_custo: row.centro_custo,
|
||||
novosFiltrosCentroCusto: novosFiltros.centroCusto
|
||||
});
|
||||
setAnaliticoFiltros(novosFiltros);
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue