fix: ajuste no filtro por centro de custo
This commit is contained in:
parent
00a66b6249
commit
4be3965fea
|
|
@ -275,12 +275,40 @@ export default function Teste() {
|
||||||
setOpcoesCentrosCusto(centrosCustoUnicos);
|
setOpcoesCentrosCusto(centrosCustoUnicos);
|
||||||
|
|
||||||
// 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
|
||||||
const codigos: Record<string, string> = {};
|
const codigos: Record<string, string> = {};
|
||||||
|
const codigosPorNome = new Map<string, Set<string>>();
|
||||||
|
|
||||||
dadosCompletos.forEach((item: DREItem) => {
|
dadosCompletos.forEach((item: DREItem) => {
|
||||||
if (item.centro_custo && item.codigo_centro_custo) {
|
if (item.centro_custo && item.codigo_centro_custo) {
|
||||||
codigos[item.centro_custo] = item.codigo_centro_custo;
|
if (!codigosPorNome.has(item.centro_custo)) {
|
||||||
|
codigosPorNome.set(item.centro_custo, new Set());
|
||||||
|
}
|
||||||
|
codigosPorNome.get(item.centro_custo)!.add(item.codigo_centro_custo);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Para cada centro de custo, usar o código mais comum ou o primeiro encontrado
|
||||||
|
codigosPorNome.forEach((codigosSet, nome) => {
|
||||||
|
const codigosArray = Array.from(codigosSet);
|
||||||
|
// Se houver apenas um código, usar esse
|
||||||
|
if (codigosArray.length === 1) {
|
||||||
|
codigos[nome] = codigosArray[0];
|
||||||
|
} else {
|
||||||
|
// Se houver múltiplos códigos, verificar qual é mais frequente nos dados
|
||||||
|
const frequencia: Record<string, number> = {};
|
||||||
|
dadosCompletos.forEach((item: DREItem) => {
|
||||||
|
if (item.centro_custo === nome && item.codigo_centro_custo) {
|
||||||
|
frequencia[item.codigo_centro_custo] = (frequencia[item.codigo_centro_custo] || 0) + 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// Pegar o código mais frequente
|
||||||
|
const codigoMaisFrequente = Object.entries(frequencia).sort((a, b) => b[1] - a[1])[0];
|
||||||
|
codigos[nome] = codigoMaisFrequente ? codigoMaisFrequente[0] : codigosArray[0];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('🗺️ Mapeamento de códigos de centros de custo criado:', codigos);
|
||||||
setCodigosCentrosCusto(codigos);
|
setCodigosCentrosCusto(codigos);
|
||||||
|
|
||||||
// Extrair contas únicas
|
// Extrair contas únicas
|
||||||
|
|
@ -454,29 +482,60 @@ export default function Teste() {
|
||||||
let excluirCodigoConta = "";
|
let excluirCodigoConta = "";
|
||||||
|
|
||||||
// Se o centro de custo "002.003.017" não está selecionado, excluir da consulta
|
// Se o centro de custo "002.003.017" não está selecionado, excluir da consulta
|
||||||
if (!centrosCustoSelecionados.some(centro => {
|
const centroCusto002003017Selecionado = centrosCustoSelecionados.some(centro => {
|
||||||
|
// Verificar pelo código no mapeamento primeiro
|
||||||
|
const codigoCentro = codigosCentrosCusto[centro];
|
||||||
|
if (codigoCentro === "002.003.017") {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// Se não encontrar no mapeamento, buscar nos dados
|
||||||
const item = data.find((d: DREItem) => d.centro_custo === centro);
|
const item = data.find((d: DREItem) => d.centro_custo === centro);
|
||||||
return item?.codigo_centro_custo === "002.003.017";
|
return item?.codigo_centro_custo === "002.003.017";
|
||||||
})) {
|
});
|
||||||
|
|
||||||
|
if (!centroCusto002003017Selecionado) {
|
||||||
excluirCentroCusto = "002.003.017";
|
excluirCentroCusto = "002.003.017";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Se a conta "100050" não está selecionada, excluir da consulta
|
// Se a conta "100050" não está selecionada, excluir da consulta
|
||||||
if (!contasSelecionadas.some(conta => {
|
const conta100050Selecionada = contasSelecionadas.some(conta => {
|
||||||
|
// Verificar pelo código no mapeamento primeiro
|
||||||
|
const codigoConta = codigosContas[conta];
|
||||||
|
if (codigoConta === "100050") {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// Se não encontrar no mapeamento, buscar nos dados
|
||||||
const item = data.find((d: DREItem) => d.conta === conta);
|
const item = data.find((d: DREItem) => d.conta === conta);
|
||||||
return item?.codigo_conta?.toString() === "100050";
|
return item?.codigo_conta?.toString() === "100050";
|
||||||
})) {
|
});
|
||||||
|
|
||||||
|
if (!conta100050Selecionada) {
|
||||||
excluirCodigoConta = "100050";
|
excluirCodigoConta = "100050";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Obter códigos dos centros de custo selecionados no filtro
|
// Obter códigos dos centros de custo selecionados no filtro - APENAS CÓDIGOS
|
||||||
const codigosCentrosCustoSelecionados = centrosCustoSelecionados
|
const codigosCentrosCustoSelecionados = centrosCustoSelecionados
|
||||||
.map(centro => {
|
.map(centro => {
|
||||||
|
// Primeiro tentar buscar no objeto codigosCentrosCusto (mapeamento)
|
||||||
|
const codigoDoMapeamento = codigosCentrosCusto[centro];
|
||||||
|
if (codigoDoMapeamento) {
|
||||||
|
console.log(`🔍 Código encontrado no mapeamento para "${centro}": ${codigoDoMapeamento}`);
|
||||||
|
return codigoDoMapeamento;
|
||||||
|
}
|
||||||
|
// Se não encontrar no mapeamento, buscar nos dados
|
||||||
const item = data.find((d: DREItem) => d.centro_custo === centro);
|
const item = data.find((d: DREItem) => d.centro_custo === centro);
|
||||||
return item?.codigo_centro_custo;
|
const codigoEncontrado = item?.codigo_centro_custo;
|
||||||
|
if (codigoEncontrado) {
|
||||||
|
console.log(`🔍 Código encontrado nos dados para "${centro}": ${codigoEncontrado}`);
|
||||||
|
} else {
|
||||||
|
console.warn(`⚠️ Código NÃO encontrado para centro de custo "${centro}"`);
|
||||||
|
}
|
||||||
|
return codigoEncontrado;
|
||||||
})
|
})
|
||||||
.filter(codigo => codigo) // Remover undefined
|
.filter(codigo => codigo && codigo.trim() !== '') // Remover undefined e strings vazias
|
||||||
.join(',');
|
.join(',');
|
||||||
|
|
||||||
|
console.log('📋 Códigos de centros de custo selecionados:', codigosCentrosCustoSelecionados);
|
||||||
|
|
||||||
// Obter códigos das contas selecionadas no filtro
|
// Obter códigos das contas selecionadas no filtro
|
||||||
const codigosContasSelecionadas = contasSelecionadas
|
const codigosContasSelecionadas = contasSelecionadas
|
||||||
|
|
@ -1147,11 +1206,40 @@ export default function Teste() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filtro por centro de custo (multi-seleção)
|
// Filtro por centro de custo (multi-seleção) - USAR APENAS CÓDIGO
|
||||||
if (centrosCustoSelecionados.length > 0) {
|
if (centrosCustoSelecionados.length > 0) {
|
||||||
dadosFiltrados = dadosFiltrados.filter((item: DREItem) =>
|
// Criar conjunto de códigos esperados dos centros selecionados - APENAS CÓDIGOS
|
||||||
centrosCustoSelecionados.includes(item.centro_custo)
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Filtrar APENAS pelo código do centro de custo, ignorando o nome
|
||||||
|
dadosFiltrados = dadosFiltrados.filter((item: DREItem) => {
|
||||||
|
if (!item.codigo_centro_custo) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return codigosEsperados.has(item.codigo_centro_custo);
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('🏢 Filtro de centros de custo aplicado (APENAS CÓDIGO):', {
|
||||||
|
selecionados: centrosCustoSelecionados,
|
||||||
|
codigosEsperados: Array.from(codigosEsperados),
|
||||||
|
totalFiltrado: dadosFiltrados.length,
|
||||||
|
centrosEncontrados: [...new Set(dadosFiltrados.map((d: DREItem) => d.centro_custo))],
|
||||||
|
codigosEncontrados: [...new Set(dadosFiltrados.map((d: DREItem) => d.codigo_centro_custo).filter(Boolean))]
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filtro por conta (multi-seleção)
|
// Filtro por conta (multi-seleção)
|
||||||
|
|
|
||||||
|
|
@ -49,14 +49,6 @@ export async function GET(request: NextRequest) {
|
||||||
console.log('📅 Adicionando filtro de período:', dataInicio, 'a', dataFim);
|
console.log('📅 Adicionando filtro de período:', dataInicio, 'a', dataFim);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filtro por centro de custo
|
|
||||||
if (centroCusto) {
|
|
||||||
sql += ` AND CODIGOCENTROCUSTO = :${paramIndex}`;
|
|
||||||
params.push(centroCusto);
|
|
||||||
paramIndex++;
|
|
||||||
console.log('🏢 Adicionando filtro de centro:', centroCusto);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Filtro por código do grupo
|
// Filtro por código do grupo
|
||||||
if (codigoGrupo) {
|
if (codigoGrupo) {
|
||||||
sql += ` AND CODGRUPO = :${paramIndex}`;
|
sql += ` AND CODGRUPO = :${paramIndex}`;
|
||||||
|
|
@ -73,8 +65,26 @@ export async function GET(request: NextRequest) {
|
||||||
console.log('💰 Adicionando filtro de conta:', codigoConta);
|
console.log('💰 Adicionando filtro de conta:', codigoConta);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Filtro por códigos de centros de custo selecionados no filtro (tem prioridade sobre centroCusto individual)
|
||||||
|
if (codigosCentrosCustoSelecionados) {
|
||||||
|
const codigosArray = codigosCentrosCustoSelecionados.split(',').filter(c => c.trim() !== '');
|
||||||
|
if (codigosArray.length > 0) {
|
||||||
|
const placeholders = codigosArray.map(() => `:${paramIndex++}`).join(',');
|
||||||
|
sql += ` AND CODIGOCENTROCUSTO IN (${placeholders})`;
|
||||||
|
params.push(...codigosArray);
|
||||||
|
console.log('🏢 Filtrando por códigos de centros de custo selecionados:', codigosArray);
|
||||||
|
}
|
||||||
|
} else if (centroCusto) {
|
||||||
|
// Só usar filtro individual de centroCusto se não houver codigosCentrosCustoSelecionados
|
||||||
|
sql += ` AND CODIGOCENTROCUSTO = :${paramIndex}`;
|
||||||
|
params.push(centroCusto);
|
||||||
|
paramIndex++;
|
||||||
|
console.log('🏢 Adicionando filtro de centro individual:', centroCusto);
|
||||||
|
}
|
||||||
|
|
||||||
// Exclusão de centro de custo específico (quando desmarcado)
|
// Exclusão de centro de custo específico (quando desmarcado)
|
||||||
if (excluirCentroCusto) {
|
// Só aplicar se não houver codigosCentrosCustoSelecionados, para evitar conflito
|
||||||
|
if (excluirCentroCusto && !codigosCentrosCustoSelecionados) {
|
||||||
sql += ` AND CODIGOCENTROCUSTO != :${paramIndex}`;
|
sql += ` AND CODIGOCENTROCUSTO != :${paramIndex}`;
|
||||||
params.push(excluirCentroCusto);
|
params.push(excluirCentroCusto);
|
||||||
paramIndex++;
|
paramIndex++;
|
||||||
|
|
@ -89,15 +99,6 @@ export async function GET(request: NextRequest) {
|
||||||
console.log('🚫 Excluindo código de conta:', excluirCodigoConta);
|
console.log('🚫 Excluindo código de conta:', excluirCodigoConta);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filtro por códigos de centros de custo selecionados no filtro
|
|
||||||
if (codigosCentrosCustoSelecionados) {
|
|
||||||
const codigosArray = codigosCentrosCustoSelecionados.split(',');
|
|
||||||
const placeholders = codigosArray.map(() => `:${paramIndex++}`).join(',');
|
|
||||||
sql += ` AND CODIGOCENTROCUSTO IN (${placeholders})`;
|
|
||||||
params.push(...codigosArray);
|
|
||||||
console.log('🏢 Filtrando por códigos de centros de custo:', codigosArray);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Filtro por códigos de contas selecionadas no filtro
|
// Filtro por códigos de contas selecionadas no filtro
|
||||||
if (codigosContasSelecionadas) {
|
if (codigosContasSelecionadas) {
|
||||||
const codigosArray = codigosContasSelecionadas.split(',');
|
const codigosArray = codigosContasSelecionadas.split(',');
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue