registerPage('courses', async (content, params = {}) => { document.getElementById('topbar-title').textContent = 'Courses & Certificates'; let activeTab = 'courses'; function tabHtml() { return `
${['courses','certificates'].map(t => ` `).join('')}
`; } async function renderCourses(search = '') { const r = await api('courses.php', { action: 'list', search }); if (!r.success) { document.getElementById('tab-content').innerHTML = emptyHTML(); return; } const rows = r.courses; document.getElementById('tab-content').innerHTML = `
${rows.length === 0 ? emptyHTML('No courses found') : `
${rows.map(c => ``).join('')}
NameUnit StdValid ForCert PrefixActions
${c.courses_name} ${c.unit_standard_number || '—'} ${c.valid_for || '—'} ${c.certificate_no_prefix || '—'}
`}`; document.getElementById('course-search')?.addEventListener('input', e => renderCourses(e.target.value)); } async function renderCertificates() { const r = await api('courses.php', { action: 'list_certificates' }); if (!r.success) { document.getElementById('tab-content').innerHTML = emptyHTML(); return; } const rows = r.certificates; document.getElementById('tab-content').innerHTML = rows.length === 0 ? emptyHTML('No certificates found') : `
${rows.map(c => ``).join('')}
Cert #PrefixEmployeeCourseIssuedExpiry
${c.prefix}-${c.certificate_number} ${c.prefix} ${c.client_employees_name || ''} ${c.surname || ''} ${c.courses_name || '—'} ${c.date_time_of_certification || '—'} ${c.expiry_date || '—'}
`; } function buildPage() { content.innerHTML = `
${tabHtml()}
${loadingHTML()}
`; if (activeTab === 'courses') renderCourses(); else renderCertificates(); } buildPage(); window.switchTab = (tab) => { activeTab = tab; buildPage(); }; window.courseAdd = () => { document.getElementById('course-modal-title').textContent = 'New Course'; document.getElementById('cof-id').value = ''; ['cof-name','cof-valid','cof-unit','cof-prefix','cof-capacity','cof-code','cof-expiry-heading','cof-restrictions','cof-assessor-name','cof-assessor-reg','cof-facilitator','cof-client-info','cof-template'].forEach(id => { const el = document.getElementById(id); if (el) el.value = ''; }); openModal('course-modal'); }; window.courseEdit = async (id) => { const r = await api('courses.php', { action: 'get', id }); if (!r.success) { toast('Failed', 'error'); return; } const c = r.course; document.getElementById('course-modal-title').textContent = 'Edit Course'; document.getElementById('cof-id').value = c.record_id; document.getElementById('cof-name').value = c.courses_name || ''; document.getElementById('cof-valid').value = c.valid_for || ''; document.getElementById('cof-unit').value = c.unit_standard_number || ''; document.getElementById('cof-prefix').value = c.certificate_no_prefix || ''; document.getElementById('cof-capacity').value = c.capacity || ''; document.getElementById('cof-code').value = c.code || ''; document.getElementById('cof-cards').value = c.produce_cards || '0'; document.getElementById('cof-iscc').value = c.is_a_code_capacity_type_course || '0'; document.getElementById('cof-expiry-heading').value = c.expiry_refresher_heading || ''; document.getElementById('cof-restrictions').value = c.restricitions || ''; document.getElementById('cof-assessor-name').value = c.assesor_name || ''; document.getElementById('cof-assessor-reg').value = c.assesor_reg_no || ''; document.getElementById('cof-facilitator').value = c.facilitator_hod_names || ''; document.getElementById('cof-client-info').value = c.client_other_info || ''; document.getElementById('cof-template').value = c.company_specific_template_name || ''; openModal('course-modal'); }; window.courseSave = async () => { const id = document.getElementById('cof-id').value; const params = { action: id ? 'update' : 'create', id, courses_name: document.getElementById('cof-name').value, valid_for: document.getElementById('cof-valid').value, unit_standard_number: document.getElementById('cof-unit').value, certificate_no_prefix: document.getElementById('cof-prefix').value, capacity: document.getElementById('cof-capacity').value, code: document.getElementById('cof-code').value, produce_cards: document.getElementById('cof-cards').value, is_a_code_capacity_type_course: document.getElementById('cof-iscc').value, expiry_refresher_heading: document.getElementById('cof-expiry-heading').value, restricitions: document.getElementById('cof-restrictions').value, assesor_name: document.getElementById('cof-assessor-name').value, assesor_reg_no: document.getElementById('cof-assessor-reg').value, facilitator_hod_names: document.getElementById('cof-facilitator').value, client_other_info: document.getElementById('cof-client-info').value, company_specific_template_name: document.getElementById('cof-template').value, attachement: '', moderator_number: '', }; const r = await api('courses.php', params, 'POST'); if (r.success) { toast(r.message, 'success'); closeModal('course-modal'); renderCourses(); } else toast(r.error, 'error'); }; window.courseDelete = async (id) => { if (!confirm('Delete this course?')) return; const r = await api('courses.php', { action: 'delete', id }, 'POST'); if (r.success) { toast('Deleted', 'success'); renderCourses(); } else toast(r.error, 'error'); }; });