/* tkpurchase-partner-history.js - Partner work history */ let historyPage = 1; const historyLimit = 20; function initPartnerHistory() { if (!initAuth()) return; const token = getToken(); const decoded = decodeToken(token); if (!decoded || !decoded.partner_company_id) { location.href = '/'; return; } // 기본 날짜: 최근 30일 const today = new Date(); const thirtyDaysAgo = new Date(today); thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30); document.getElementById('filterDateTo').value = today.toISOString().substring(0, 10); document.getElementById('filterDateFrom').value = thirtyDaysAgo.toISOString().substring(0, 10); loadHistory(); } async function loadHistory(page) { historyPage = page || 1; const dateFrom = document.getElementById('filterDateFrom').value; const dateTo = document.getElementById('filterDateTo').value; const params = new URLSearchParams(); if (dateFrom) params.set('date_from', dateFrom); if (dateTo) params.set('date_to', dateTo); params.set('page', historyPage); params.set('limit', historyLimit); const container = document.getElementById('historyList'); container.innerHTML = '

로딩 중...

'; try { const r = await api('/checkins/my-history?' + params.toString()); const checkins = r.data || []; const total = r.total || 0; renderHistoryList(checkins); renderPagination(total); } catch(e) { container.innerHTML = '

데이터를 불러올 수 없습니다.

'; } } function renderHistoryList(checkins) { const container = document.getElementById('historyList'); if (!checkins.length) { container.innerHTML = `

조회 기간에 작업 이력이 없습니다.

`; return; } container.innerHTML = checkins.map(c => { const checkinDate = formatDate(c.check_in_time); const checkinTime = formatTime(c.check_in_time); const checkoutTime = c.check_out_time ? formatTime(c.check_out_time) : null; const reports = c.reports || []; // 상태 배지 let statusHtml = ''; if (!c.check_out_time) { statusHtml = '진행중'; } else { statusHtml = '완료'; } // 보고 정보 let reportHtml = ''; if (reports.length > 0) { reportHtml = reports.map(r => { const rWorkers = r.workers || []; const totalHours = rWorkers.reduce((sum, w) => sum + Number(w.hours_worked || 0), 0); const isConfirmed = !!r.confirmed_by; const isRejected = !!r.rejected_by; const rStatus = isConfirmed ? ' 확인완료' : isRejected ? ' 반려' : '미확인'; const workersDetail = rWorkers.length > 0 ? `
${rWorkers.map(w => escapeHtml(w.worker_name) + ' ' + w.hours_worked + 'h').join(', ')}
` : ''; return `
${escapeHtml((r.work_content || '').substring(0, 60))}${(r.work_content || '').length > 60 ? '...' : ''} ${rStatus}
${rWorkers.length}명 · ${totalHours}h
${workersDetail}
`; }).join(''); } return `
${checkinDate} ${statusHtml}
${escapeHtml(c.workplace_name || '')}
${c.work_description ? `

${escapeHtml(c.work_description)}

` : ''}
${checkinTime}${checkoutTime ? ' ~ ' + checkoutTime : ' ~'} ${c.actual_worker_count || 0}명
${reportHtml ? `
${reportHtml}
` : ''}
`; }).join(''); } function renderPagination(total) { const container = document.getElementById('historyPagination'); const totalPages = Math.ceil(total / historyLimit); if (totalPages <= 1) { container.innerHTML = ''; return; } let html = ''; for (let i = 1; i <= totalPages; i++) { const active = i === historyPage; html += ``; } container.innerHTML = html; }