ajuste na ordenacao para ser numerica e nao string

This commit is contained in:
Felipe Batista 2025-12-22 19:53:05 -03:00
parent 06c0773cfe
commit 76ab77fb51
1 changed files with 88 additions and 9 deletions

View File

@ -322,6 +322,33 @@ const TableRow = memo(
TableRow.displayName = 'TableRow';
export default function Teste() {
// Função para ordenar filiais numericamente (1, 2, 3...) ao invés de alfabeticamente (1, 10, 11...)
const ordenarFiliaisNumericamente = (filiais: string[]): string[] => {
return [...filiais].sort((a, b) => {
// Tentar converter para número
const numA = parseInt(a, 10);
const numB = parseInt(b, 10);
// Se ambos são números válidos, ordenar numericamente
if (!isNaN(numA) && !isNaN(numB)) {
return numA - numB;
}
// Se apenas A é número, vem primeiro
if (!isNaN(numA)) {
return -1;
}
// Se apenas B é número, vem primeiro
if (!isNaN(numB)) {
return 1;
}
// Se nenhum é número, ordenar alfabeticamente
return a.localeCompare(b);
});
};
const [data, setData] = useState<DREItem[]>([]);
const [loading, setLoading] = useState(false);
const [error, setError] = useState<string | null>(null);
@ -395,13 +422,13 @@ export default function Teste() {
setOpcoesGrupos(gruposUnicos);
// Extrair filiais únicas
const filiaisUnicas = [
const filiaisUnicas = ordenarFiliaisNumericamente([
...new Set(
dadosCompletos
.map((item: DREItem) => item.filial || item.codfilial)
.filter(Boolean)
),
].sort() as string[];
] as string[]);
setOpcoesFiliais(filiaisUnicas);
// Inicializar com todas as filiais selecionadas
@ -1789,6 +1816,15 @@ export default function Teste() {
const dadosCompletosExpandidos = buildHierarchicalDataCompleta();
// Determinar filiais para exportação (mesma lógica da tabela)
const filiaisParaExportacao = ordenarFiliaisNumericamente(
filtrosAplicados && filiaisSelecionadas.length > 0
? filiaisSelecionadas
: opcoesFiliais.length > 0
? opcoesFiliais
: ['']
);
const dadosExportacao = dadosCompletosExpandidos.map((row, index) => {
const linha: any = {
Linha: index + 1,
@ -1801,11 +1837,37 @@ export default function Teste() {
Total: row.total || 0,
};
// Para cada mês, adicionar colunas para cada filial e depois o totalizador
mesesDisponiveis.forEach((mes) => {
const valor = row.valoresPorMes?.[mes] || 0;
const percentual = row.percentuaisPorMes?.[mes] || 0;
linha[`Valor ${mes}`] = valor;
linha[`% ${mes}`] = percentual;
// Colunas por filial
filiaisParaExportacao.forEach((filial: string) => {
// Só incluir se a filial estiver selecionada ou se não houver filtros aplicados
if (
!filtrosAplicados ||
filiaisSelecionadas.length === 0 ||
filiaisSelecionadas.includes(filial)
) {
const valorFilial =
filial &&
row.valoresPorMesPorFilial?.[mes]?.[filial] !== undefined
? row.valoresPorMesPorFilial[mes][filial]
: 0;
const percentualFilial =
filial &&
row.percentuaisPorMesPorFilial?.[mes]?.[filial] !== undefined
? row.percentuaisPorMesPorFilial[mes][filial]
: 0;
linha[`${mes} - Filial ${filial} - Valor`] = valorFilial;
linha[`${mes} - Filial ${filial} - %`] = percentualFilial;
}
});
// Totalizador do mês
const valorTotal = row.valoresPorMes?.[mes] || 0;
const percentualTotal = row.percentuaisPorMes?.[mes] || 0;
linha[`${mes} - Total - Valor`] = valorTotal;
linha[`${mes} - Total - %`] = percentualTotal;
});
return linha;
@ -1825,9 +1887,20 @@ export default function Teste() {
{ wch: 15 }, // Total
];
// Larguras das colunas por mês (filiais + totalizador)
mesesDisponiveis.forEach(() => {
colWidths.push({ wch: 15 }); // Valor
colWidths.push({ wch: 10 }); // %
filiaisParaExportacao.forEach((filial: string) => {
if (
!filtrosAplicados ||
filiaisSelecionadas.length === 0 ||
filiaisSelecionadas.includes(filial)
) {
colWidths.push({ wch: 18 }); // Valor Filial
colWidths.push({ wch: 12 }); // % Filial
}
});
colWidths.push({ wch: 18 }); // Valor Total
colWidths.push({ wch: 12 }); // % Total
});
ws['!cols'] = colWidths;
@ -1839,7 +1912,13 @@ export default function Teste() {
Informação: 'Período',
Valor: `${filtros.periodoDe} a ${filtros.periodoAte}`,
},
{ Informação: 'Filial', Valor: filtros.filial },
{
Informação: 'Filiais',
Valor:
filiaisSelecionadas.length > 0
? filiaisSelecionadas.join(', ')
: 'Todas',
},
{
Informação: 'Total de Registros',
Valor: dadosCompletosExpandidos.length,