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
|
||||
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
|
||||
// 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
|
||||
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
|
||||
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[];
|
||||
console.log('🏢 Entidades únicas encontradas:', entidadesUnicas);
|
||||
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
|
||||
// Mas sempre incluir centro de custo 999.998 e conta 199
|
||||
const centrosCustoIniciaisSelecionados = centrosCustoUnicos.filter(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";
|
||||
});
|
||||
|
||||
const contasIniciaisSelecionadas = contasUnicas.filter(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";
|
||||
});
|
||||
|
||||
setCentrosCustoSelecionados(centrosCustoIniciaisSelecionados);
|
||||
setContasSelecionadas(contasIniciaisSelecionadas);
|
||||
|
||||
// Inicializar com todas as entidades selecionadas
|
||||
// Inicializar com todas as entidades selecionadas (incluindo Faturamento líquido)
|
||||
setEntidadesSelecionadas(entidadesUnicas);
|
||||
|
||||
} catch (error) {
|
||||
|
|
@ -603,6 +636,13 @@ export default function Teste() {
|
|||
|
||||
// Funções para multi-seleção
|
||||
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 => {
|
||||
if (prev.includes(centro)) {
|
||||
return prev.filter(c => c !== centro);
|
||||
|
|
@ -613,6 +653,13 @@ export default function Teste() {
|
|||
};
|
||||
|
||||
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 => {
|
||||
if (prev.includes(conta)) {
|
||||
return prev.filter(c => c !== conta);
|
||||
|
|
@ -623,7 +670,13 @@ export default function Teste() {
|
|||
};
|
||||
|
||||
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 = () => {
|
||||
|
|
@ -631,7 +684,13 @@ export default function Teste() {
|
|||
};
|
||||
|
||||
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 = () => {
|
||||
|
|
@ -639,6 +698,15 @@ export default function Teste() {
|
|||
};
|
||||
|
||||
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 => {
|
||||
if (prev.includes(entidade)) {
|
||||
return prev.filter(e => e !== entidade);
|
||||
|
|
@ -649,7 +717,19 @@ export default function Teste() {
|
|||
};
|
||||
|
||||
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 = () => {
|
||||
|
|
@ -1361,25 +1441,34 @@ export default function Teste() {
|
|||
);
|
||||
}
|
||||
|
||||
// Filtro por centro de custo (multi-seleção) - USAR APENAS CÓDIGO
|
||||
// IMPORTANTE: Preservar grupos calculados (isCalculado ou centro_custo === "CALCULADO")
|
||||
if (centrosCustoSelecionados.length > 0) {
|
||||
// Criar conjunto de códigos esperados dos centros selecionados - APENAS CÓDIGOS
|
||||
const codigosEsperados = new Set<string>();
|
||||
|
||||
centrosCustoSelecionados.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);
|
||||
}
|
||||
}
|
||||
});
|
||||
// Filtro por centro de custo (multi-seleção) - USAR APENAS CÓDIGO
|
||||
// IMPORTANTE: Preservar grupos calculados (isCalculado ou centro_custo === "CALCULADO")
|
||||
// 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
|
||||
const codigosEsperados = new Set<string>();
|
||||
|
||||
// Sempre incluir código 999.998
|
||||
codigosEsperados.add("999.998");
|
||||
|
||||
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
|
||||
// MAS preservar grupos calculados
|
||||
|
|
@ -1406,18 +1495,24 @@ export default function Teste() {
|
|||
});
|
||||
}
|
||||
|
||||
// Filtro por conta (multi-seleção)
|
||||
// IMPORTANTE: Preservar grupos calculados (isCalculado ou centro_custo === "CALCULADO")
|
||||
if (contasSelecionadas.length > 0) {
|
||||
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
|
||||
return contasSelecionadas.includes(item.conta);
|
||||
});
|
||||
}
|
||||
// Filtro por conta (multi-seleção)
|
||||
// IMPORTANTE: Preservar grupos calculados (isCalculado ou centro_custo === "CALCULADO")
|
||||
// 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) => {
|
||||
// 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
|
||||
if (filtros.valorMin) {
|
||||
|
|
@ -1446,25 +1541,38 @@ export default function Teste() {
|
|||
);
|
||||
}
|
||||
|
||||
// Filtro por entidades (multi-seleção)
|
||||
// IMPORTANTE: Preservar grupos calculados (isCalculado ou centro_custo === "CALCULADO")
|
||||
if (entidadesSelecionadas.length > 0) {
|
||||
dadosFiltrados = dadosFiltrados.filter((item: DREItem) => {
|
||||
// Preservar grupos calculados
|
||||
if (item.centro_custo === "CALCULADO" || item.isCalculado === true) {
|
||||
return true;
|
||||
}
|
||||
// Para outros itens, verificar se a entidade está selecionada
|
||||
return item.entidades && entidadesSelecionadas.includes(item.entidades);
|
||||
});
|
||||
|
||||
console.log('🏢 Filtro de entidades aplicado:', {
|
||||
selecionadas: entidadesSelecionadas,
|
||||
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
|
||||
});
|
||||
}
|
||||
// Filtro por entidades (multi-seleção)
|
||||
// IMPORTANTE: Preservar grupos calculados (isCalculado ou centro_custo === "CALCULADO")
|
||||
// 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) => {
|
||||
// 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)
|
||||
// Eles serão recalculados com base apenas nos dados filtrados
|
||||
|
|
|
|||
Loading…
Reference in New Issue