fix: ajustes nos filtros

This commit is contained in:
Alessandro Gonçaalves 2025-11-19 18:08:03 -03:00
parent 64d4397847
commit 51c4b2efbd
1 changed files with 165 additions and 57 deletions

View File

@ -292,7 +292,13 @@ export default function Teste() {
// Extrair centros de custo únicos com nome e código // Extrair centros de custo únicos com nome e código
const centrosCustoUnicos = [...new Set(dadosCompletos.map((item: DREItem) => item.centro_custo))].sort() as string[]; const centrosCustoUnicos = [...new Set(dadosCompletos.map((item: DREItem) => item.centro_custo))].sort() as string[];
setOpcoesCentrosCusto(centrosCustoUnicos); // Filtrar centro de custo 999.998 da lista de opções (mas sempre manter selecionado)
const centrosCustoParaExibir = centrosCustoUnicos.filter(centro => {
const item = dadosCompletos.find((d: DREItem) => d.centro_custo === centro);
return item?.codigo_centro_custo !== "999.998";
});
setOpcoesCentrosCusto(centrosCustoParaExibir);
// Criar objeto de códigos dos centros de custo // Criar objeto de códigos dos centros de custo
// Usar um Map para garantir que pegamos o código correto mesmo com duplicatas // Usar um Map para garantir que pegamos o código correto mesmo com duplicatas
@ -333,7 +339,14 @@ export default function Teste() {
// Extrair contas únicas // Extrair contas únicas
const contasUnicas = [...new Set(dadosCompletos.map((item: DREItem) => item.conta))].sort() as string[]; const contasUnicas = [...new Set(dadosCompletos.map((item: DREItem) => item.conta))].sort() as string[];
setOpcoesContas(contasUnicas);
// Filtrar conta 199 da lista de opções (mas sempre manter selecionada)
const contasParaExibir = contasUnicas.filter(conta => {
const item = dadosCompletos.find((d: DREItem) => d.conta === conta);
return item?.codigo_conta?.toString() !== "199";
});
setOpcoesContas(contasParaExibir);
// Criar objeto de códigos das contas // Criar objeto de códigos das contas
const codigosContasObj: Record<string, string> = {}; const codigosContasObj: Record<string, string> = {};
@ -348,23 +361,43 @@ export default function Teste() {
const entidadesUnicas = [...new Set(dadosCompletos.map((item: DREItem) => item.entidades).filter(Boolean))].sort() as string[]; const entidadesUnicas = [...new Set(dadosCompletos.map((item: DREItem) => item.entidades).filter(Boolean))].sort() as string[];
console.log('🏢 Entidades únicas encontradas:', entidadesUnicas); console.log('🏢 Entidades únicas encontradas:', entidadesUnicas);
console.log('📊 Total de entidades:', entidadesUnicas.length); console.log('📊 Total de entidades:', entidadesUnicas.length);
setOpcoesEntidades(entidadesUnicas);
// Filtrar "Faturamento líquido" da lista de opções (mas sempre manter selecionado)
const entidadeFaturamentoLiquido = entidadesUnicas.find(ent =>
ent.toLowerCase().includes('faturamento') && ent.toLowerCase().includes('líquido')
) || entidadesUnicas.find(ent =>
ent.toLowerCase().includes('faturamento liquido')
);
const entidadesParaExibir = entidadesUnicas.filter(ent => ent !== entidadeFaturamentoLiquido);
setOpcoesEntidades(entidadesParaExibir);
// Inicializar com todos os itens selecionados, exceto o centro de custo 002.003.017 e conta 100050 // Inicializar com todos os itens selecionados, exceto o centro de custo 002.003.017 e conta 100050
// Mas sempre incluir centro de custo 999.998 e conta 199
const centrosCustoIniciaisSelecionados = centrosCustoUnicos.filter(centro => { const centrosCustoIniciaisSelecionados = centrosCustoUnicos.filter(centro => {
const item = dadosCompletos.find((d: DREItem) => d.centro_custo === centro); const item = dadosCompletos.find((d: DREItem) => d.centro_custo === centro);
// Sempre incluir centro de custo com código 999.998
if (item?.codigo_centro_custo === "999.998") {
return true;
}
// Excluir centro de custo 002.003.017
return item?.codigo_centro_custo !== "002.003.017"; return item?.codigo_centro_custo !== "002.003.017";
}); });
const contasIniciaisSelecionadas = contasUnicas.filter(conta => { const contasIniciaisSelecionadas = contasUnicas.filter(conta => {
const item = dadosCompletos.find((d: DREItem) => d.conta === conta); const item = dadosCompletos.find((d: DREItem) => d.conta === conta);
// Sempre incluir conta com código 199
if (item?.codigo_conta?.toString() === "199") {
return true;
}
// Excluir conta 100050
return item?.codigo_conta?.toString() !== "100050"; return item?.codigo_conta?.toString() !== "100050";
}); });
setCentrosCustoSelecionados(centrosCustoIniciaisSelecionados); setCentrosCustoSelecionados(centrosCustoIniciaisSelecionados);
setContasSelecionadas(contasIniciaisSelecionadas); setContasSelecionadas(contasIniciaisSelecionadas);
// Inicializar com todas as entidades selecionadas // Inicializar com todas as entidades selecionadas (incluindo Faturamento líquido)
setEntidadesSelecionadas(entidadesUnicas); setEntidadesSelecionadas(entidadesUnicas);
} catch (error) { } catch (error) {
@ -603,6 +636,13 @@ export default function Teste() {
// Funções para multi-seleção // Funções para multi-seleção
const toggleCentroCusto = (centro: string) => { const toggleCentroCusto = (centro: string) => {
// Verificar se é centro de custo 999.998 (não pode ser desmarcado)
const item = data.find((d: DREItem) => d.centro_custo === centro);
if (item?.codigo_centro_custo === "999.998") {
// Não permitir desmarcar centro de custo 999.998
return;
}
setCentrosCustoSelecionados(prev => { setCentrosCustoSelecionados(prev => {
if (prev.includes(centro)) { if (prev.includes(centro)) {
return prev.filter(c => c !== centro); return prev.filter(c => c !== centro);
@ -613,6 +653,13 @@ export default function Teste() {
}; };
const toggleConta = (conta: string) => { const toggleConta = (conta: string) => {
// Verificar se é conta 199 (não pode ser desmarcada)
const item = data.find((d: DREItem) => d.conta === conta);
if (item?.codigo_conta?.toString() === "199") {
// Não permitir desmarcar conta 199
return;
}
setContasSelecionadas(prev => { setContasSelecionadas(prev => {
if (prev.includes(conta)) { if (prev.includes(conta)) {
return prev.filter(c => c !== conta); return prev.filter(c => c !== conta);
@ -623,7 +670,13 @@ export default function Teste() {
}; };
const selecionarTodosCentros = () => { const selecionarTodosCentros = () => {
setCentrosCustoSelecionados(opcoesCentrosCusto); // Sempre incluir centro de custo 999.998 mesmo que não esteja nas opções
const centroCusto999998 = data.find((d: DREItem) => d.codigo_centro_custo === "999.998")?.centro_custo;
const todosCentros = centroCusto999998 && !opcoesCentrosCusto.includes(centroCusto999998)
? [...opcoesCentrosCusto, centroCusto999998]
: opcoesCentrosCusto;
setCentrosCustoSelecionados(todosCentros);
}; };
const limparCentros = () => { const limparCentros = () => {
@ -631,7 +684,13 @@ export default function Teste() {
}; };
const selecionarTodasContas = () => { const selecionarTodasContas = () => {
setContasSelecionadas(opcoesContas); // Sempre incluir conta 199 mesmo que não esteja nas opções
const conta199 = data.find((d: DREItem) => d.codigo_conta?.toString() === "199")?.conta;
const todasContas = conta199 && !opcoesContas.includes(conta199)
? [...opcoesContas, conta199]
: opcoesContas;
setContasSelecionadas(todasContas);
}; };
const limparContas = () => { const limparContas = () => {
@ -639,6 +698,15 @@ export default function Teste() {
}; };
const toggleEntidadeFiltro = (entidade: string) => { const toggleEntidadeFiltro = (entidade: string) => {
// Verificar se é "Faturamento líquido" (não pode ser desmarcado)
const isFaturamentoLiquido = entidade.toLowerCase().includes('faturamento') &&
(entidade.toLowerCase().includes('líquido') || entidade.toLowerCase().includes('liquido'));
if (isFaturamentoLiquido) {
// Não permitir desmarcar Faturamento líquido
return;
}
setEntidadesSelecionadas(prev => { setEntidadesSelecionadas(prev => {
if (prev.includes(entidade)) { if (prev.includes(entidade)) {
return prev.filter(e => e !== entidade); return prev.filter(e => e !== entidade);
@ -649,7 +717,19 @@ export default function Teste() {
}; };
const selecionarTodasEntidades = () => { const selecionarTodasEntidades = () => {
setEntidadesSelecionadas(opcoesEntidades); // Sempre incluir "Faturamento líquido" mesmo que não esteja nas opções
const entidadeFaturamentoLiquido = data.find((d: DREItem) =>
d.entidades && (
d.entidades.toLowerCase().includes('faturamento') &&
(d.entidades.toLowerCase().includes('líquido') || d.entidades.toLowerCase().includes('liquido'))
)
)?.entidades;
const todasEntidades = entidadeFaturamentoLiquido && !opcoesEntidades.includes(entidadeFaturamentoLiquido)
? [...opcoesEntidades, entidadeFaturamentoLiquido]
: opcoesEntidades;
setEntidadesSelecionadas(todasEntidades);
}; };
const limparEntidades = () => { const limparEntidades = () => {
@ -1363,11 +1443,20 @@ export default function Teste() {
// Filtro por centro de custo (multi-seleção) - USAR APENAS CÓDIGO // Filtro por centro de custo (multi-seleção) - USAR APENAS CÓDIGO
// IMPORTANTE: Preservar grupos calculados (isCalculado ou centro_custo === "CALCULADO") // IMPORTANTE: Preservar grupos calculados (isCalculado ou centro_custo === "CALCULADO")
if (centrosCustoSelecionados.length > 0) { // Sempre incluir centro de custo 999.998 mesmo que não esteja na lista de selecionados
const centroCusto999998 = dadosCompletos.find((d: DREItem) => d.codigo_centro_custo === "999.998")?.centro_custo;
const centrosCustoParaFiltrar = centroCusto999998 && !centrosCustoSelecionados.includes(centroCusto999998)
? [...centrosCustoSelecionados, centroCusto999998]
: centrosCustoSelecionados;
if (centrosCustoParaFiltrar.length > 0) {
// Criar conjunto de códigos esperados dos centros selecionados - APENAS CÓDIGOS // Criar conjunto de códigos esperados dos centros selecionados - APENAS CÓDIGOS
const codigosEsperados = new Set<string>(); const codigosEsperados = new Set<string>();
centrosCustoSelecionados.forEach(centro => { // Sempre incluir código 999.998
codigosEsperados.add("999.998");
centrosCustoParaFiltrar.forEach(centro => {
// Buscar o código no mapeamento primeiro // Buscar o código no mapeamento primeiro
const codigoCentro = codigosCentrosCusto[centro]; const codigoCentro = codigosCentrosCusto[centro];
if (codigoCentro) { if (codigoCentro) {
@ -1408,14 +1497,20 @@ export default function Teste() {
// Filtro por conta (multi-seleção) // Filtro por conta (multi-seleção)
// IMPORTANTE: Preservar grupos calculados (isCalculado ou centro_custo === "CALCULADO") // IMPORTANTE: Preservar grupos calculados (isCalculado ou centro_custo === "CALCULADO")
if (contasSelecionadas.length > 0) { // Sempre incluir conta 199 mesmo que não esteja na lista de selecionadas
const conta199 = dadosCompletos.find((d: DREItem) => d.codigo_conta?.toString() === "199")?.conta;
const contasParaFiltrar = conta199 && !contasSelecionadas.includes(conta199)
? [...contasSelecionadas, conta199]
: contasSelecionadas;
if (contasParaFiltrar.length > 0) {
dadosFiltrados = dadosFiltrados.filter((item: DREItem) => { dadosFiltrados = dadosFiltrados.filter((item: DREItem) => {
// Preservar grupos calculados // Preservar grupos calculados
if (item.centro_custo === "CALCULADO" || item.isCalculado === true) { if (item.centro_custo === "CALCULADO" || item.isCalculado === true) {
return true; return true;
} }
// Para outros itens, verificar se a conta está selecionada // Para outros itens, verificar se a conta está selecionada (incluindo conta 199)
return contasSelecionadas.includes(item.conta); return contasParaFiltrar.includes(item.conta);
}); });
} }
@ -1448,18 +1543,31 @@ export default function Teste() {
// Filtro por entidades (multi-seleção) // Filtro por entidades (multi-seleção)
// IMPORTANTE: Preservar grupos calculados (isCalculado ou centro_custo === "CALCULADO") // IMPORTANTE: Preservar grupos calculados (isCalculado ou centro_custo === "CALCULADO")
if (entidadesSelecionadas.length > 0) { // Sempre incluir "Faturamento líquido" mesmo que não esteja na lista de selecionadas
const entidadeFaturamentoLiquido = dadosCompletos.find((d: DREItem) =>
d.entidades && (
d.entidades.toLowerCase().includes('faturamento') &&
(d.entidades.toLowerCase().includes('líquido') || d.entidades.toLowerCase().includes('liquido'))
)
)?.entidades;
const entidadesParaFiltrar = entidadeFaturamentoLiquido
? [...entidadesSelecionadas, entidadeFaturamentoLiquido]
: entidadesSelecionadas;
if (entidadesParaFiltrar.length > 0) {
dadosFiltrados = dadosFiltrados.filter((item: DREItem) => { dadosFiltrados = dadosFiltrados.filter((item: DREItem) => {
// Preservar grupos calculados // Preservar grupos calculados
if (item.centro_custo === "CALCULADO" || item.isCalculado === true) { if (item.centro_custo === "CALCULADO" || item.isCalculado === true) {
return true; return true;
} }
// Para outros itens, verificar se a entidade está selecionada // Para outros itens, verificar se a entidade está selecionada (incluindo Faturamento líquido)
return item.entidades && entidadesSelecionadas.includes(item.entidades); return item.entidades && entidadesParaFiltrar.includes(item.entidades);
}); });
console.log('🏢 Filtro de entidades aplicado:', { console.log('🏢 Filtro de entidades aplicado:', {
selecionadas: entidadesSelecionadas, selecionadas: entidadesSelecionadas,
incluindoFaturamentoLiquido: entidadeFaturamentoLiquido,
totalFiltrado: dadosFiltrados.length, totalFiltrado: dadosFiltrados.length,
entidadesEncontradas: [...new Set(dadosFiltrados.map((d: DREItem) => d.entidades).filter(Boolean))], entidadesEncontradas: [...new Set(dadosFiltrados.map((d: DREItem) => d.entidades).filter(Boolean))],
gruposCalculados: dadosFiltrados.filter((d: DREItem) => d.centro_custo === "CALCULADO" || d.isCalculado === true).length gruposCalculados: dadosFiltrados.filter((d: DREItem) => d.centro_custo === "CALCULADO" || d.isCalculado === true).length