diff --git a/src/app/api/analitico-filial-oracle/route.ts b/src/app/api/analitico-filial-oracle/route.ts index 7d415af..8b1fecc 100644 --- a/src/app/api/analitico-filial-oracle/route.ts +++ b/src/app/api/analitico-filial-oracle/route.ts @@ -52,6 +52,8 @@ export async function GET(request: NextRequest) { let sql = ''; const params: any[] = []; let paramIndex = 1; + const temJoin = !!codFilial; + const prefixo = temJoin ? 'VB.' : ''; // Usar prefixo apenas quando há JOIN // Se houver filtro por filial, fazer JOIN com FILIAL_CC if (codFilial) { @@ -73,7 +75,7 @@ WHERE 1=1`; // Filtro por período (usando ANOMESCOMP) if (dataInicio && dataFim) { - sql += ` AND VB.ANOMESCOMP >= :${paramIndex} AND VB.ANOMESCOMP <= :${paramIndex + 1}`; + sql += ` AND ${prefixo}ANOMESCOMP >= :${paramIndex} AND ${prefixo}ANOMESCOMP <= :${paramIndex + 1}`; params.push(dataInicio, dataFim); paramIndex += 2; console.log('📅 Adicionando filtro de período:', dataInicio, 'a', dataFim); @@ -81,7 +83,7 @@ WHERE 1=1`; // Filtro por código do grupo if (codigoGrupo) { - sql += ` AND VB.CODGRUPO = :${paramIndex}`; + sql += ` AND ${prefixo}CODGRUPO = :${paramIndex}`; params.push(codigoGrupo); paramIndex++; console.log('📊 Adicionando filtro de grupo:', codigoGrupo); @@ -89,7 +91,7 @@ WHERE 1=1`; // Filtro por subgrupo (DIRETO, INDIRETO, SEM CC, etc.) if (codigoSubgrupo) { - sql += ` AND VB.SUBGRUPO = :${paramIndex}`; + sql += ` AND ${prefixo}SUBGRUPO = :${paramIndex}`; params.push(codigoSubgrupo); paramIndex++; console.log('📊 Adicionando filtro de subgrupo:', codigoSubgrupo); @@ -97,11 +99,11 @@ WHERE 1=1`; // Filtro por código da conta if (codigoConta) { - sql += ` AND VB.CODCONTA = :${paramIndex}`; + sql += ` AND ${prefixo}CODCONTA = :${paramIndex}`; params.push(codigoConta); paramIndex++; console.log('💰 Adicionando filtro de conta:', codigoConta); - } + } // Filtro por códigos de centros de custo selecionados no filtro // Se houver codigosCentrosCustoSelecionados E centroCusto individual, incluir ambos @@ -119,7 +121,7 @@ WHERE 1=1`; 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 VB.CODIGOCENTROCUSTO = :${paramIndex}`; + sql += ` AND ${prefixo}CODIGOCENTROCUSTO = :${paramIndex}`; params.push(centroCusto); paramIndex++; console.log('🏢 PRIORIDADE: Filtrando APENAS por centroCusto individual (clique na célula):', centroCusto); @@ -130,7 +132,7 @@ WHERE 1=1`; const codigosArray = codigosCentrosCustoSelecionados.split(',').filter(c => c.trim() !== ''); if (codigosArray.length > 0) { const placeholders = codigosArray.map(() => `:${paramIndex++}`).join(','); - sql += ` AND VB.CODIGOCENTROCUSTO IN (${placeholders})`; + sql += ` AND ${prefixo}CODIGOCENTROCUSTO IN (${placeholders})`; params.push(...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) + '...'); @@ -142,7 +144,7 @@ WHERE 1=1`; // Exclusão de centro de custo específico (quando desmarcado) // Só aplicar se não houver codigosCentrosCustoSelecionados, para evitar conflito if (excluirCentroCusto && !codigosCentrosCustoSelecionados) { - sql += ` AND VB.CODIGOCENTROCUSTO != :${paramIndex}`; + sql += ` AND ${prefixo}CODIGOCENTROCUSTO != :${paramIndex}`; params.push(excluirCentroCusto); paramIndex++; console.log('🚫 Excluindo centro de custo:', excluirCentroCusto); @@ -150,7 +152,7 @@ WHERE 1=1`; // Exclusão de código de conta específico (quando desmarcado) if (excluirCodigoConta) { - sql += ` AND VB.CODCONTA != :${paramIndex}`; + sql += ` AND ${prefixo}CODCONTA != :${paramIndex}`; params.push(excluirCodigoConta); paramIndex++; console.log('🚫 Excluindo código de conta:', excluirCodigoConta); @@ -160,12 +162,12 @@ WHERE 1=1`; if (codigosContasSelecionadas) { const codigosArray = codigosContasSelecionadas.split(','); const placeholders = codigosArray.map(() => `:${paramIndex++}`).join(','); - sql += ` AND VB.CODCONTA IN (${placeholders})`; + sql += ` AND ${prefixo}CODCONTA IN (${placeholders})`; params.push(...codigosArray); console.log('💰 Filtrando por códigos de contas:', codigosArray); } - sql += ` ORDER BY VB.DTVENC, VB.CODFORNEC, VB.CODCONTA`; + sql += ` ORDER BY ${prefixo}DTVENC, ${prefixo}CODFORNEC, ${prefixo}CODCONTA`; // Log detalhado da query SQL final console.log('═══════════════════════════════════════════════════════════════'); diff --git a/src/app/dre-filial/teste.tsx b/src/app/dre-filial/teste.tsx index 30b6780..e0ab44d 100644 --- a/src/app/dre-filial/teste.tsx +++ b/src/app/dre-filial/teste.tsx @@ -417,6 +417,7 @@ export default function Teste() { const handleRowClick = React.useCallback((row: HierarchicalRow, mesSelecionado?: string, filialSelecionada?: string) => { console.log('🖱️ Clique na linha:', row); console.log('📅 Mês selecionado:', mesSelecionado); + console.log('🏢 Filial selecionada:', filialSelecionada); // Linhas calculadas não devem abrir o componente analítico if (row.type === "calculado") { @@ -453,6 +454,15 @@ export default function Teste() { return false; } + // Se é um totalizador (mesSelecionado presente mas filialSelecionada não), não filtrar por filial + // Caso contrário, filtrar por filial se especificada + if (filialSelecionada) { + const itemFilial = item.filial || item.codfilial || ""; + if (itemFilial !== filialSelecionada) { + return false; + } + } + if (row.type === "grupo") { return item.codigo_grupo === row.codigo_grupo || item.codgrupo === row.codigo_grupo; } else if (row.type === "conta") { @@ -475,6 +485,7 @@ export default function Teste() { } // Determinar CODFILIAL baseado na filial selecionada + // Se é um totalizador (mesSelecionado presente mas filialSelecionada não), deixar vazio para incluir todas as filiais let codFilialFiltro = ""; if (filialSelecionada) { // Se a filial selecionada já é um código numérico, usar diretamente @@ -495,6 +506,8 @@ export default function Teste() { } } } + // Se mesSelecionado está presente mas filialSelecionada não, é um totalizador + // Deixar codFilialFiltro vazio para incluir todas as filiais daquele mês const novosFiltros = { dataInicio: dataInicioFiltro, @@ -503,7 +516,7 @@ export default function Teste() { codigoGrupo: codigoGrupoFiltro, codigoSubgrupo: "", // Não aplicável na hierarquia filial codigoConta: codigoContaFiltro, - codFilial: codFilialFiltro, + codFilial: codFilialFiltro, // Vazio para totalizador = todas as filiais do mês linhaSelecionada: row.grupo || row.conta || "", excluirCentroCusto: "", excluirCodigoConta: "", @@ -512,6 +525,7 @@ export default function Teste() { }; console.log('🎯 Novos filtros para analítico:', novosFiltros); + console.log('📊 É totalizador?', mesSelecionado && !filialSelecionada ? 'SIM' : 'NÃO'); setAnaliticoFiltros(novosFiltros); }, [data]);