diff --git a/src/app/dre-filial/teste.tsx b/src/app/dre-filial/teste.tsx index 844c345..5424875 100644 --- a/src/app/dre-filial/teste.tsx +++ b/src/app/dre-filial/teste.tsx @@ -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([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(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,