/* ===== tkuser 협력업체 조회 (읽기 전용) ===== */ let partnersLoaded = false; let partnersList = []; let selectedPartnerIdTkuser = null; async function loadPartnersTab() { if (partnersLoaded) return; partnersLoaded = true; await loadPartnersList(); } async function loadPartnersList() { try { const isActive = document.getElementById('partnerFilterActiveTkuser')?.value; const search = document.getElementById('partnerSearchTkuser')?.value?.trim() || ''; const params = new URLSearchParams(); if (isActive !== '' && isActive !== undefined) params.set('is_active', isActive); if (search) params.set('search', search); const r = await api('/partners?' + params.toString()); partnersList = r.data || []; renderPartnersListTkuser(); } catch (e) { document.getElementById('partnersListTkuser').innerHTML = `

${e.message}

`; } } function renderPartnersListTkuser() { const c = document.getElementById('partnersListTkuser'); if (!partnersList.length) { c.innerHTML = '

등록된 협력업체가 없습니다.

'; return; } c.innerHTML = partnersList.map(p => { const types = tryParseJsonTkuser(p.business_type) || []; const typeStr = types.map(t => `${escHtml(t)}`).join(' '); const insuranceWarn = isInsuranceExpiringSoonTkuser(p.insurance_expiry); return `
${escHtml(p.company_name)} ${!p.is_active ? '비활성' : ''} ${insuranceWarn ? '보험만료' : ''}
${p.business_number ? `${p.business_number}` : ''} ${p.representative ? `${escHtml(p.representative)}` : ''} ${typeStr}
`; }).join(''); } async function selectPartnerTkuser(id) { selectedPartnerIdTkuser = id; renderPartnersListTkuser(); try { const r = await api(`/partners/${id}`); const p = r.data; renderPartnerDetailTkuser(p); document.getElementById('partnerDetailTkuser').classList.remove('hidden'); document.getElementById('partnerEmptyTkuser').classList.add('hidden'); } catch (e) { showToast('상세 조회 실패: ' + e.message, 'error'); } } function renderPartnerDetailTkuser(p) { const types = tryParseJsonTkuser(p.business_type) || []; const workers = p.workers || []; document.getElementById('partnerDetailTkuser').innerHTML = `

${escHtml(p.company_name)}

사업자번호: ${escHtml(p.business_number) || '-'}
대표자: ${escHtml(p.representative) || '-'}
담당자: ${escHtml(p.contact_name) || '-'}
연락처: ${escHtml(p.contact_phone) || '-'}
주소: ${escHtml(p.address) || '-'}
업종: ${types.map(t => `${escHtml(t)}`).join(' ') || '-'}
산재보험: ${escHtml(p.insurance_number) || '-'} ${p.insurance_expiry ? `(만료: ${formatDate(p.insurance_expiry)})` : ''}
${p.notes ? `
비고: ${escHtml(p.notes)}
` : ''}

소속 작업자 (${workers.length}명)

${workers.length ? workers.map(w => `
${escHtml(w.worker_name)} ${w.is_team_leader ? '팀장' : ''} ${!w.is_active ? '비활성' : ''}
${w.position ? `${escHtml(w.position)}` : ''} ${w.phone ? `${escHtml(w.phone)}` : ''} ${w.safety_training_date ? `안전교육: ${formatDate(w.safety_training_date)}` : ''}
`).join('') : '

등록된 작업자가 없습니다

'}
협력업체 등록/수정은 tkpurchase에서 관리합니다.
`; } function tryParseJsonTkuser(val) { if (!val) return null; if (Array.isArray(val)) return val; try { return JSON.parse(val); } catch { return null; } } function isInsuranceExpiringSoonTkuser(expiry) { if (!expiry) return false; const exp = new Date(expiry); const now = new Date(); const diff = (exp - now) / (1000 * 60 * 60 * 24); return diff <= 30 && diff >= 0; } // 검색/필터 이벤트 document.addEventListener('DOMContentLoaded', () => { let searchTimeout; const searchEl = document.getElementById('partnerSearchTkuser'); if (searchEl) searchEl.addEventListener('input', () => { clearTimeout(searchTimeout); searchTimeout = setTimeout(loadPartnersList, 300); }); const filterEl = document.getElementById('partnerFilterActiveTkuser'); if (filterEl) filterEl.addEventListener('change', loadPartnersList); });