diff --git a/src/app/api/analitico-entidade-oracle/route.ts b/src/app/api/analitico-entidade-oracle/route.ts index 079a480..4302eef 100644 --- a/src/app/api/analitico-entidade-oracle/route.ts +++ b/src/app/api/analitico-entidade-oracle/route.ts @@ -36,12 +36,12 @@ export async function GET(request: NextRequest) { codigosContasSelecionadas }); - // Construir query SQL com filtros - let sql = `SELECT * FROM DRE_RESULTADO_ANALITICO WHERE 1=1`; + // Construir query SQL com filtros usando a view DESPESA_ENTIDADE_ANALITICO + let sql = `SELECT * FROM DESPESA_ENTIDADE_ANALITICO WHERE 1=1`; const params: any[] = []; let paramIndex = 1; - // Filtro por período + // Filtro por período (usando ANOMESCOMP) if (dataInicio && dataFim) { sql += ` AND ANOMESCOMP >= :${paramIndex} AND ANOMESCOMP <= :${paramIndex + 1}`; params.push(dataInicio, dataFim); @@ -119,10 +119,11 @@ export async function GET(request: NextRequest) { console.log('📝 Primeiros 3 registros:', data.slice(0, 3)); // Transformar os dados do Oracle para o formato esperado pelo componente + // Usando a view DESPESA_ENTIDADE_ANALITICO const transformedData = data.map((item: any) => { return { codigo_grupo: item.CODGRUPO || "", - codigo_subgrupo: "", // Não existe na tabela Oracle + codigo_subgrupo: item.SUBGRUPO || "", // SUBGRUPO existe na nova view codigo_fornecedor: item.CODFORNEC || "", nome_fornecedor: item.FORNECEDOR || "", id: item.NUMLANC || 0, diff --git a/src/app/dre-entidade/teste.tsx b/src/app/dre-entidade/teste.tsx index 53ce958..15f2d0c 100644 --- a/src/app/dre-entidade/teste.tsx +++ b/src/app/dre-entidade/teste.tsx @@ -484,6 +484,7 @@ export default function Teste() { // Determinar filtros baseado na nova hierarquia [entidade, direto/indireto, cc, conta] let centroCustoFiltro = ""; let codigoContaFiltro = ""; + let codigoGrupoFiltro = ""; let entidadeFiltro = ""; let diretoIndiretoFiltro = ""; @@ -493,6 +494,63 @@ export default function Teste() { // Filtrar por direto/indireto se disponível diretoIndiretoFiltro = row.direto_indireto || ""; + // Buscar CODGRUPO dos dados originais baseado na hierarquia selecionada + // Quando clicar em qualquer nível (entidade, direto/indireto, centro de custo ou conta), deve filtrar por CODGRUPO + if (row.type === "entidade" || row.type === "direto_indireto" || row.type === "centro_custo" || row.type === "conta") { + // Buscar o CODGRUPO dos dados originais que correspondem a esta linha + // Filtrar também pelo período selecionado se houver + const itemsCorrespondentes = data.filter((item: DREItem) => { + // Filtrar por período se um mês específico foi selecionado + if (mesSelecionado && item.data_competencia !== mesSelecionado) { + return false; + } + + if (row.type === "entidade") { + return item.entidades === row.entidade; + } else if (row.type === "direto_indireto") { + return item.entidades === row.entidade && item.subgrupo === row.direto_indireto; + } else if (row.type === "centro_custo") { + return item.entidades === row.entidade && + item.subgrupo === row.direto_indireto && + item.codigo_centro_custo === row.codigo_centro_custo; + } else if (row.type === "conta") { + return item.entidades === row.entidade && + item.subgrupo === row.direto_indireto && + item.codigo_centro_custo === row.codigo_centro_custo && + item.codigo_conta === row.codigo_conta; + } + return false; + }); + + // Pegar o CODGRUPO do primeiro item encontrado (todos devem ter o mesmo CODGRUPO) + if (itemsCorrespondentes.length > 0) { + const primeiroItem = itemsCorrespondentes[0]; + // Priorizar codgrupo direto, depois tentar extrair do campo grupo + codigoGrupoFiltro = primeiroItem.codgrupo || + (primeiroItem.grupo ? primeiroItem.grupo.split(' ')[0]?.trim() : "") || + ""; + + console.log('📊 CODGRUPO encontrado para a linha:', { + codigoGrupoFiltro, + codgrupo: primeiroItem.codgrupo, + grupo: primeiroItem.grupo, + itemsEncontrados: itemsCorrespondentes.length, + tipoLinha: row.type, + mesSelecionado: mesSelecionado + }); + } else { + console.warn('⚠️ Nenhum item correspondente encontrado para extrair CODGRUPO:', { + tipoLinha: row.type, + entidade: row.entidade, + direto_indireto: row.direto_indireto, + centro_custo: row.centro_custo, + codigo_centro_custo: row.codigo_centro_custo, + codigo_conta: row.codigo_conta, + mesSelecionado: mesSelecionado + }); + } + } + // Filtrar por centro de custo se for nível centro_custo ou conta if (row.type === "centro_custo" || row.type === "conta") { centroCustoFiltro = row.codigo_centro_custo || ""; @@ -506,6 +564,7 @@ export default function Teste() { console.log('🎯 Filtros determinados (nova hierarquia):', { entidadeFiltro, diretoIndiretoFiltro, + codigoGrupoFiltro, centroCustoFiltro, codigoContaFiltro, tipoLinha: row.type, @@ -577,7 +636,7 @@ export default function Teste() { dataInicio: dataInicioFiltro, dataFim: dataFimFiltro, centroCusto: centroCustoFiltro, - codigoGrupo: "", // Não usado na nova hierarquia + codigoGrupo: codigoGrupoFiltro, // CODGRUPO da entidade/linha selecionada codigoSubgrupo: diretoIndiretoFiltro, // Usar direto/indireto como subgrupo codigoConta: codigoContaFiltro, linhaSelecionada: row.entidade || row.direto_indireto || row.centro_custo || row.conta || "",