function renderTimeV1Timeline(entries) { const timeline = document.getElementById('timeTimelineColumns'); const unplaced = document.getElementById('timeUnplacedEntries'); const activeBanner = document.getElementById('timeActiveBanner'); const activeBannerText = document.getElementById('timeActiveBannerText'); if (!timeline || !unplaced) return; const active = (entries || []).find((entry) => entry.aktiv_timer && !entry.slut_tid); if (active) { activeBanner.classList.remove('d-none'); activeBannerText.textContent = `Aktiv på ${active.user_name || 'ukendt bruger'}: ${active.description || 'uden beskrivelse'}`; } else { activeBanner.classList.add('d-none'); } const unplacedEntries = (entries || []).filter((entry) => entry.ikke_placeret || (!entry.start_tid && !entry.slut_tid)); if (!unplacedEntries.length) { unplaced.innerHTML = '
Ingen entries uden tidspunkter.
'; } else { unplaced.innerHTML = unplacedEntries.map((entry) => { return `
${entry.description || 'Uden beskrivelse'}
${minutesToLabel(entry.faktisk_tid_min || Math.round((entry.original_hours || 0) * 60))}
${timeStatusBadge(entry.entry_status || 'afventer')}
`; }).join(''); } if (!entries || !entries.length) { timeline.innerHTML = '
Ingen tidsregistreringer endnu.
'; return; } const grouped = {}; (entries || []).forEach((entry) => { const key = `${entry.medarbejder_id || 0}:${entry.user_name || 'Ukendt bruger'}`; if (!grouped[key]) grouped[key] = []; grouped[key].push(entry); }); if (!entries || !entries.length) { timeline.innerHTML = '
Ingen tidsregistreringer endnu.
'; return; } timeline.innerHTML = Object.entries(grouped).map(([key, rows]) => { const userName = key.split(':')[1] || 'Ukendt bruger'; const sortedRows = [...rows].sort((a, b) => { const aDate = new Date(a.start_tid || a.slut_tid || a.worked_date || a.created_at || 0).getTime(); const bDate = new Date(b.start_tid || b.slut_tid || b.worked_date || b.created_at || 0).getTime(); return bDate - aDate; }