diff --git a/src/app/api/analitico-filial-oracle/route.ts b/src/app/api/analitico-filial-oracle/route.ts index 9891e47..7d415af 100644 --- a/src/app/api/analitico-filial-oracle/route.ts +++ b/src/app/api/analitico-filial-oracle/route.ts @@ -16,6 +16,7 @@ export async function GET(request: NextRequest) { const codigoGrupo = searchParams.get('codigoGrupo'); const codigoSubgrupo = searchParams.get('codigoSubgrupo'); const codigoConta = searchParams.get('codigoConta'); + const codFilial = searchParams.get('codFilial'); // Parâmetros para exclusão de valores específicos const excluirCentroCusto = searchParams.get('excluirCentroCusto'); @@ -32,6 +33,7 @@ export async function GET(request: NextRequest) { codigoGrupo, codigoSubgrupo, codigoConta, + codFilial, excluirCentroCusto, excluirCodigoConta, codigosCentrosCustoSelecionados, @@ -46,13 +48,32 @@ export async function GET(request: NextRequest) { }); // Construir query SQL com filtros usando a view VB_DRE_FILIAL_DESPESA_ANALITICO - let sql = `SELECT * FROM VB_DRE_FILIAL_DESPESA_ANALITICO WHERE 1=1`; + // Fazer JOIN com FILIAL_CC quando houver filtro por filial + let sql = ''; const params: any[] = []; let paramIndex = 1; + + // Se houver filtro por filial, fazer JOIN com FILIAL_CC + if (codFilial) { + sql = `SELECT FC.CODFILIAL, VB.* +FROM VB_DRE_FILIAL_DESPESA_ANALITICO VB +INNER JOIN FILIAL_CC FC ON FC.CC = VB.CODIGOCENTROCUSTO +WHERE 1=1`; + } else { + sql = `SELECT * FROM VB_DRE_FILIAL_DESPESA_ANALITICO WHERE 1=1`; + } + + // Filtro por filial (usando JOIN com FILIAL_CC) + if (codFilial) { + sql += ` AND FC.CODFILIAL = :${paramIndex}`; + params.push(codFilial); + paramIndex++; + console.log('🏢 Adicionando filtro de filial (CODFILIAL):', codFilial); + } // Filtro por período (usando ANOMESCOMP) if (dataInicio && dataFim) { - sql += ` AND ANOMESCOMP >= :${paramIndex} AND ANOMESCOMP <= :${paramIndex + 1}`; + sql += ` AND VB.ANOMESCOMP >= :${paramIndex} AND VB.ANOMESCOMP <= :${paramIndex + 1}`; params.push(dataInicio, dataFim); paramIndex += 2; console.log('📅 Adicionando filtro de período:', dataInicio, 'a', dataFim); @@ -60,7 +81,7 @@ export async function GET(request: NextRequest) { // Filtro por código do grupo if (codigoGrupo) { - sql += ` AND CODGRUPO = :${paramIndex}`; + sql += ` AND VB.CODGRUPO = :${paramIndex}`; params.push(codigoGrupo); paramIndex++; console.log('📊 Adicionando filtro de grupo:', codigoGrupo); @@ -68,7 +89,7 @@ export async function GET(request: NextRequest) { // Filtro por subgrupo (DIRETO, INDIRETO, SEM CC, etc.) if (codigoSubgrupo) { - sql += ` AND SUBGRUPO = :${paramIndex}`; + sql += ` AND VB.SUBGRUPO = :${paramIndex}`; params.push(codigoSubgrupo); paramIndex++; console.log('📊 Adicionando filtro de subgrupo:', codigoSubgrupo); @@ -76,7 +97,7 @@ export async function GET(request: NextRequest) { // Filtro por código da conta if (codigoConta) { - sql += ` AND CODCONTA = :${paramIndex}`; + sql += ` AND VB.CODCONTA = :${paramIndex}`; params.push(codigoConta); paramIndex++; console.log('💰 Adicionando filtro de conta:', codigoConta); @@ -98,7 +119,7 @@ export async function GET(request: NextRequest) { 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}`; + sql += ` AND VB.CODIGOCENTROCUSTO = :${paramIndex}`; params.push(centroCusto); paramIndex++; console.log('🏢 PRIORIDADE: Filtrando APENAS por centroCusto individual (clique na célula):', centroCusto); @@ -109,7 +130,7 @@ export async function GET(request: NextRequest) { const codigosArray = codigosCentrosCustoSelecionados.split(',').filter(c => c.trim() !== ''); if (codigosArray.length > 0) { const placeholders = codigosArray.map(() => `:${paramIndex++}`).join(','); - sql += ` AND CODIGOCENTROCUSTO IN (${placeholders})`; + sql += ` AND VB.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) + '...'); @@ -121,7 +142,7 @@ export async function GET(request: NextRequest) { // 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 CODIGOCENTROCUSTO != :${paramIndex}`; + sql += ` AND VB.CODIGOCENTROCUSTO != :${paramIndex}`; params.push(excluirCentroCusto); paramIndex++; console.log('🚫 Excluindo centro de custo:', excluirCentroCusto); @@ -129,7 +150,7 @@ export async function GET(request: NextRequest) { // Exclusão de código de conta específico (quando desmarcado) if (excluirCodigoConta) { - sql += ` AND CODCONTA != :${paramIndex}`; + sql += ` AND VB.CODCONTA != :${paramIndex}`; params.push(excluirCodigoConta); paramIndex++; console.log('🚫 Excluindo código de conta:', excluirCodigoConta); @@ -139,12 +160,12 @@ export async function GET(request: NextRequest) { if (codigosContasSelecionadas) { const codigosArray = codigosContasSelecionadas.split(','); const placeholders = codigosArray.map(() => `:${paramIndex++}`).join(','); - sql += ` AND CODCONTA IN (${placeholders})`; + sql += ` AND VB.CODCONTA IN (${placeholders})`; params.push(...codigosArray); console.log('💰 Filtrando por códigos de contas:', codigosArray); } - sql += ` ORDER BY DTVENC, CODFORNEC, CODCONTA`; + sql += ` ORDER BY VB.DTVENC, VB.CODFORNEC, VB.CODCONTA`; // Log detalhado da query SQL final console.log('═══════════════════════════════════════════════════════════════'); @@ -173,6 +194,8 @@ export async function GET(request: NextRequest) { codigosCentrosCustoSelecionados: codigosCentrosCustoSelecionados || 'N/A', temCodigoConta: !!codigoConta, codigoConta: codigoConta || 'N/A', + temCodFilial: !!codFilial, + codFilial: codFilial || 'N/A', temCodigosContasSelecionadas: !!codigosContasSelecionadas, codigosContasSelecionadas: codigosContasSelecionadas || 'N/A', temExcluirCentroCusto: !!excluirCentroCusto, @@ -204,7 +227,7 @@ export async function GET(request: NextRequest) { codigo_fornecedor: item.CODFORNEC || "", nome_fornecedor: item.FORNECEDOR || "", id: item.NUMLANC || 0, - codfilial: item.FILIAL || "001", // Usar FILIAL da view + codfilial: item.CODFILIAL || item.FILIAL || "001", // Usar CODFILIAL do JOIN ou FILIAL da view recnum: item.NUMLANC || 0, data_competencia: item.ANOMESCOMP || "", data_vencimento: item.DTVENC ? new Date(item.DTVENC).toISOString().split('T')[0] : "", diff --git a/src/app/dre-filial/analitico.tsx b/src/app/dre-filial/analitico.tsx index 6eee0f2..3ca8fa1 100644 --- a/src/app/dre-filial/analitico.tsx +++ b/src/app/dre-filial/analitico.tsx @@ -93,6 +93,7 @@ interface AnaliticoProps { codigoGrupo?: string; codigoSubgrupo?: string; codigoConta?: string; + codFilial?: string; linhaSelecionada?: string; excluirCentroCusto?: string; excluirCodigoConta?: string; @@ -397,6 +398,9 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { if (filtrosExternos.codigoConta) { params.append('codigoConta', filtrosExternos.codigoConta); } + if (filtrosExternos.codFilial) { + params.append('codFilial', filtrosExternos.codFilial); + } if (filtrosExternos.excluirCentroCusto) { params.append('excluirCentroCusto', filtrosExternos.excluirCentroCusto); } @@ -419,6 +423,7 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { codigoGrupo: filtrosExternos.codigoGrupo, codigoSubgrupo: filtrosExternos.codigoSubgrupo, codigoConta: filtrosExternos.codigoConta, + codFilial: filtrosExternos.codFilial, excluirCentroCusto: filtrosExternos.excluirCentroCusto, excluirCodigoConta: filtrosExternos.excluirCodigoConta, codigosCentrosCustoSelecionados: filtrosExternos.codigosCentrosCustoSelecionados, @@ -862,7 +867,7 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { return ( <> {/* Filtros Externos Ativos - Apenas quando maximizado */} - {isMaximized && (filtrosExternos.dataInicio || filtrosExternos.codigoGrupo || filtrosExternos.codigoSubgrupo || filtrosExternos.codigoConta || filtrosExternos.centroCusto) && ( + {isMaximized && (filtrosExternos.dataInicio || filtrosExternos.codigoGrupo || filtrosExternos.codigoSubgrupo || filtrosExternos.codigoConta || filtrosExternos.centroCusto || filtrosExternos.codFilial) && (