diff --git a/src/app/api/analitico-filial-oracle/route.ts b/src/app/api/analitico-filial-oracle/route.ts index 8b1fecc..6dae070 100644 --- a/src/app/api/analitico-filial-oracle/route.ts +++ b/src/app/api/analitico-filial-oracle/route.ts @@ -52,11 +52,14 @@ export async function GET(request: NextRequest) { let sql = ''; const params: any[] = []; let paramIndex = 1; - const temJoin = !!codFilial; + + // Verificar se há múltiplas filiais (separadas por vírgula) + const filiaisArray = codFilial ? codFilial.split(',').map(f => f.trim()).filter(f => f !== '') : []; + const temJoin = filiaisArray.length > 0; const prefixo = temJoin ? 'VB.' : ''; // Usar prefixo apenas quando há JOIN // Se houver filtro por filial, fazer JOIN com FILIAL_CC - if (codFilial) { + if (temJoin) { sql = `SELECT FC.CODFILIAL, VB.* FROM VB_DRE_FILIAL_DESPESA_ANALITICO VB INNER JOIN FILIAL_CC FC ON FC.CC = VB.CODIGOCENTROCUSTO @@ -66,11 +69,21 @@ 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); + // Se houver múltiplas filiais, usar IN; caso contrário, usar = + if (temJoin) { + if (filiaisArray.length === 1) { + // Uma única filial - usar = + sql += ` AND FC.CODFILIAL = :${paramIndex}`; + params.push(filiaisArray[0]); + paramIndex++; + console.log('🏢 Adicionando filtro de filial única (CODFILIAL):', filiaisArray[0]); + } else { + // Múltiplas filiais - usar IN + const placeholders = filiaisArray.map(() => `:${paramIndex++}`).join(','); + sql += ` AND FC.CODFILIAL IN (${placeholders})`; + params.push(...filiaisArray); + console.log('🏢 Adicionando filtro de múltiplas filiais (CODFILIAL IN):', filiaisArray); + } } // Filtro por período (usando ANOMESCOMP) diff --git a/src/app/dre-filial/teste.tsx b/src/app/dre-filial/teste.tsx index e0ab44d..c95f67e 100644 --- a/src/app/dre-filial/teste.tsx +++ b/src/app/dre-filial/teste.tsx @@ -485,7 +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 + // Se é um totalizador (mesSelecionado presente mas filialSelecionada não), incluir todas as filiais selecionadas let codFilialFiltro = ""; if (filialSelecionada) { // Se a filial selecionada já é um código numérico, usar diretamente @@ -505,9 +505,30 @@ export default function Teste() { codFilialFiltro = filialSelecionada; } } + } else if (mesSelecionado) { + // Se mesSelecionado está presente mas filialSelecionada não, é um totalizador + // Incluir todas as filiais selecionadas (ou todas disponíveis se nenhuma estiver selecionada) + const filiaisParaTotalizador = filiaisSelecionadas.length > 0 + ? filiaisSelecionadas + : opcoesFiliais; + + // Converter nomes de filiais para códigos CODFILIAL + const codigosFiliais = filiaisParaTotalizador.map(filial => { + if (/^\d+$/.test(filial)) { + return filial; + } else { + const itemComFilial = data.find((item: DREItem) => { + const itemFilial = item.filial || item.codfilial || ""; + return itemFilial === filial; + }); + return itemComFilial?.codfilial || filial; + } + }).filter(Boolean); + + // Passar como string separada por vírgula para a API processar com IN + codFilialFiltro = codigosFiliais.join(','); + console.log('📊 Totalizador: incluindo todas as filiais selecionadas:', codigosFiliais); } - // 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, @@ -527,7 +548,7 @@ export default function Teste() { console.log('🎯 Novos filtros para analítico:', novosFiltros); console.log('📊 É totalizador?', mesSelecionado && !filialSelecionada ? 'SIM' : 'NÃO'); setAnaliticoFiltros(novosFiltros); - }, [data]); + }, [data, filiaisSelecionadas, opcoesFiliais]); const toggleGrupo = useCallback((codigoGrupo: string) => { setExpandedGrupos(prev => {