fix: ajustes nos filtros
This commit is contained in:
parent
64d4397847
commit
51c4b2efbd
|
|
@ -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 = () => {
|
||||||
|
|
@ -1361,25 +1441,34 @@ 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
|
||||||
// Criar conjunto de códigos esperados dos centros selecionados - APENAS CÓDIGOS
|
const centroCusto999998 = dadosCompletos.find((d: DREItem) => d.codigo_centro_custo === "999.998")?.centro_custo;
|
||||||
const codigosEsperados = new Set<string>();
|
const centrosCustoParaFiltrar = centroCusto999998 && !centrosCustoSelecionados.includes(centroCusto999998)
|
||||||
|
? [...centrosCustoSelecionados, centroCusto999998]
|
||||||
centrosCustoSelecionados.forEach(centro => {
|
: centrosCustoSelecionados;
|
||||||
// Buscar o código no mapeamento primeiro
|
|
||||||
const codigoCentro = codigosCentrosCusto[centro];
|
if (centrosCustoParaFiltrar.length > 0) {
|
||||||
if (codigoCentro) {
|
// Criar conjunto de códigos esperados dos centros selecionados - APENAS CÓDIGOS
|
||||||
codigosEsperados.add(codigoCentro);
|
const codigosEsperados = new Set<string>();
|
||||||
} else {
|
|
||||||
// Se não encontrar no mapeamento, tentar buscar nos dados carregados
|
// Sempre incluir código 999.998
|
||||||
const item = dadosCompletos.find((d: DREItem) => d.centro_custo === centro);
|
codigosEsperados.add("999.998");
|
||||||
if (item?.codigo_centro_custo) {
|
|
||||||
codigosEsperados.add(item.codigo_centro_custo);
|
centrosCustoParaFiltrar.forEach(centro => {
|
||||||
}
|
// Buscar o código no mapeamento primeiro
|
||||||
}
|
const codigoCentro = codigosCentrosCusto[centro];
|
||||||
});
|
if (codigoCentro) {
|
||||||
|
codigosEsperados.add(codigoCentro);
|
||||||
|
} else {
|
||||||
|
// Se não encontrar no mapeamento, tentar buscar nos dados carregados
|
||||||
|
const item = dadosCompletos.find((d: DREItem) => d.centro_custo === centro);
|
||||||
|
if (item?.codigo_centro_custo) {
|
||||||
|
codigosEsperados.add(item.codigo_centro_custo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Filtrar APENAS pelo código do centro de custo, ignorando o nome
|
// Filtrar APENAS pelo código do centro de custo, ignorando o nome
|
||||||
// MAS preservar grupos calculados
|
// MAS preservar grupos calculados
|
||||||
|
|
@ -1406,18 +1495,24 @@ 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
|
||||||
dadosFiltrados = dadosFiltrados.filter((item: DREItem) => {
|
const conta199 = dadosCompletos.find((d: DREItem) => d.codigo_conta?.toString() === "199")?.conta;
|
||||||
// Preservar grupos calculados
|
const contasParaFiltrar = conta199 && !contasSelecionadas.includes(conta199)
|
||||||
if (item.centro_custo === "CALCULADO" || item.isCalculado === true) {
|
? [...contasSelecionadas, conta199]
|
||||||
return true;
|
: contasSelecionadas;
|
||||||
}
|
|
||||||
// Para outros itens, verificar se a conta está selecionada
|
if (contasParaFiltrar.length > 0) {
|
||||||
return contasSelecionadas.includes(item.conta);
|
dadosFiltrados = dadosFiltrados.filter((item: DREItem) => {
|
||||||
});
|
// Preservar grupos calculados
|
||||||
}
|
if (item.centro_custo === "CALCULADO" || item.isCalculado === true) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// Para outros itens, verificar se a conta está selecionada (incluindo conta 199)
|
||||||
|
return contasParaFiltrar.includes(item.conta);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Filtro por valor mínimo
|
// Filtro por valor mínimo
|
||||||
if (filtros.valorMin) {
|
if (filtros.valorMin) {
|
||||||
|
|
@ -1446,25 +1541,38 @@ 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
|
||||||
dadosFiltrados = dadosFiltrados.filter((item: DREItem) => {
|
const entidadeFaturamentoLiquido = dadosCompletos.find((d: DREItem) =>
|
||||||
// Preservar grupos calculados
|
d.entidades && (
|
||||||
if (item.centro_custo === "CALCULADO" || item.isCalculado === true) {
|
d.entidades.toLowerCase().includes('faturamento') &&
|
||||||
return true;
|
(d.entidades.toLowerCase().includes('líquido') || d.entidades.toLowerCase().includes('liquido'))
|
||||||
}
|
)
|
||||||
// Para outros itens, verificar se a entidade está selecionada
|
)?.entidades;
|
||||||
return item.entidades && entidadesSelecionadas.includes(item.entidades);
|
|
||||||
});
|
const entidadesParaFiltrar = entidadeFaturamentoLiquido
|
||||||
|
? [...entidadesSelecionadas, entidadeFaturamentoLiquido]
|
||||||
console.log('🏢 Filtro de entidades aplicado:', {
|
: entidadesSelecionadas;
|
||||||
selecionadas: entidadesSelecionadas,
|
|
||||||
totalFiltrado: dadosFiltrados.length,
|
if (entidadesParaFiltrar.length > 0) {
|
||||||
entidadesEncontradas: [...new Set(dadosFiltrados.map((d: DREItem) => d.entidades).filter(Boolean))],
|
dadosFiltrados = dadosFiltrados.filter((item: DREItem) => {
|
||||||
gruposCalculados: dadosFiltrados.filter((d: DREItem) => d.centro_custo === "CALCULADO" || d.isCalculado === true).length
|
// Preservar grupos calculados
|
||||||
});
|
if (item.centro_custo === "CALCULADO" || item.isCalculado === true) {
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
|
// Para outros itens, verificar se a entidade está selecionada (incluindo Faturamento líquido)
|
||||||
|
return item.entidades && entidadesParaFiltrar.includes(item.entidades);
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('🏢 Filtro de entidades aplicado:', {
|
||||||
|
selecionadas: entidadesSelecionadas,
|
||||||
|
incluindoFaturamentoLiquido: entidadeFaturamentoLiquido,
|
||||||
|
totalFiltrado: dadosFiltrados.length,
|
||||||
|
entidadesEncontradas: [...new Set(dadosFiltrados.map((d: DREItem) => d.entidades).filter(Boolean))],
|
||||||
|
gruposCalculados: dadosFiltrados.filter((d: DREItem) => d.centro_custo === "CALCULADO" || d.isCalculado === true).length
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Remover grupos calculados antigos (que foram calculados com todos os dados)
|
// Remover grupos calculados antigos (que foram calculados com todos os dados)
|
||||||
// Eles serão recalculados com base apenas nos dados filtrados
|
// Eles serão recalculados com base apenas nos dados filtrados
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue