ajuste na ordenacao para ser numerica e nao string
This commit is contained in:
parent
06c0773cfe
commit
76ab77fb51
|
|
@ -322,6 +322,33 @@ const TableRow = memo(
|
||||||
TableRow.displayName = 'TableRow';
|
TableRow.displayName = 'TableRow';
|
||||||
|
|
||||||
export default function Teste() {
|
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 [data, setData] = useState<DREItem[]>([]);
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
const [error, setError] = useState<string | null>(null);
|
const [error, setError] = useState<string | null>(null);
|
||||||
|
|
@ -395,13 +422,13 @@ export default function Teste() {
|
||||||
setOpcoesGrupos(gruposUnicos);
|
setOpcoesGrupos(gruposUnicos);
|
||||||
|
|
||||||
// Extrair filiais únicas
|
// Extrair filiais únicas
|
||||||
const filiaisUnicas = [
|
const filiaisUnicas = ordenarFiliaisNumericamente([
|
||||||
...new Set(
|
...new Set(
|
||||||
dadosCompletos
|
dadosCompletos
|
||||||
.map((item: DREItem) => item.filial || item.codfilial)
|
.map((item: DREItem) => item.filial || item.codfilial)
|
||||||
.filter(Boolean)
|
.filter(Boolean)
|
||||||
),
|
),
|
||||||
].sort() as string[];
|
] as string[]);
|
||||||
setOpcoesFiliais(filiaisUnicas);
|
setOpcoesFiliais(filiaisUnicas);
|
||||||
|
|
||||||
// Inicializar com todas as filiais selecionadas
|
// Inicializar com todas as filiais selecionadas
|
||||||
|
|
@ -1789,6 +1816,15 @@ export default function Teste() {
|
||||||
|
|
||||||
const dadosCompletosExpandidos = buildHierarchicalDataCompleta();
|
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 dadosExportacao = dadosCompletosExpandidos.map((row, index) => {
|
||||||
const linha: any = {
|
const linha: any = {
|
||||||
Linha: index + 1,
|
Linha: index + 1,
|
||||||
|
|
@ -1801,11 +1837,37 @@ export default function Teste() {
|
||||||
Total: row.total || 0,
|
Total: row.total || 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Para cada mês, adicionar colunas para cada filial e depois o totalizador
|
||||||
mesesDisponiveis.forEach((mes) => {
|
mesesDisponiveis.forEach((mes) => {
|
||||||
const valor = row.valoresPorMes?.[mes] || 0;
|
// Colunas por filial
|
||||||
const percentual = row.percentuaisPorMes?.[mes] || 0;
|
filiaisParaExportacao.forEach((filial: string) => {
|
||||||
linha[`Valor ${mes}`] = valor;
|
// Só incluir se a filial estiver selecionada ou se não houver filtros aplicados
|
||||||
linha[`% ${mes}`] = percentual;
|
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;
|
return linha;
|
||||||
|
|
@ -1825,9 +1887,20 @@ export default function Teste() {
|
||||||
{ wch: 15 }, // Total
|
{ wch: 15 }, // Total
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// Larguras das colunas por mês (filiais + totalizador)
|
||||||
mesesDisponiveis.forEach(() => {
|
mesesDisponiveis.forEach(() => {
|
||||||
colWidths.push({ wch: 15 }); // Valor
|
filiaisParaExportacao.forEach((filial: string) => {
|
||||||
colWidths.push({ wch: 10 }); // %
|
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;
|
ws['!cols'] = colWidths;
|
||||||
|
|
@ -1839,7 +1912,13 @@ export default function Teste() {
|
||||||
Informação: 'Período',
|
Informação: 'Período',
|
||||||
Valor: `${filtros.periodoDe} a ${filtros.periodoAte}`,
|
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',
|
Informação: 'Total de Registros',
|
||||||
Valor: dadosCompletosExpandidos.length,
|
Valor: dadosCompletosExpandidos.length,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue