feat(excel): group entries by date, join names with ' & '
This commit is contained in:
1 parent
ad680ae1f6
commit
69e424519d
3 files changed
+90
-8
No files matched your search
+22
-7
@@ -8,16 +8,31 @@ export function readEmployeeNames(arrayBuffer) {
|
||||
.filter(name => name.length > 0);
|
||||
}
|
||||
|
||||
// Pure helper: returns { names: [...], dates: [...] } columns for a schedule.
|
||||
// Multiple employees per date are joined alphabetically with " & ".
|
||||
export function buildScheduleColumns(assignments, employees) {
|
||||
const nameById = Object.fromEntries(employees.map(e => [e.id, e.name]));
|
||||
const byDate = new Map();
|
||||
for (const a of assignments) {
|
||||
if (!byDate.has(a.date)) byDate.set(a.date, []);
|
||||
byDate.get(a.date).push(nameById[a.employeeId] ?? '');
|
||||
}
|
||||
const sortedDates = [...byDate.keys()].sort();
|
||||
const names = sortedDates.map(d =>
|
||||
byDate.get(d).slice().sort((x, y) => x.localeCompare(y, 'de')).join(' & ')
|
||||
);
|
||||
const dates = sortedDates.map(d => {
|
||||
const [y, m, day] = d.split('-');
|
||||
return day + '.' + m + '.' + y;
|
||||
});
|
||||
return { names, dates };
|
||||
}
|
||||
|
||||
// Exports schedule as xlsx blob
|
||||
// assignments: [{ date: "2026-04-01", employeeId }]
|
||||
// assignments: [{ date: "2026-04-01", employeeId }] — multiple entries per date allowed
|
||||
// employees: [{ id, name }]
|
||||
export function exportSchedule(assignments, employees) {
|
||||
const nameById = Object.fromEntries(employees.map(e => [e.id, e.name]));
|
||||
const names = assignments.map(a => nameById[a.employeeId] ?? '');
|
||||
const dates = assignments.map(a => {
|
||||
const [y, m, d] = a.date.split('-');
|
||||
return d + '.' + m + '.' + y;
|
||||
});
|
||||
const { names, dates } = buildScheduleColumns(assignments, employees);
|
||||
const ws = XLSX.utils.aoa_to_sheet([names, dates]);
|
||||
const wb = XLSX.utils.book_new();
|
||||
XLSX.utils.book_append_sheet(wb, ws, 'Moderationsplan');
|
||||
|
||||
Reference in new issue
Block a user