${p.kop_laporan}

LAPORAN JURNAL MENGAJAR GURU

${rows}
NoTanggalKelasMapelJamTP/ATPRingkasan Materi
`); win.document.close(); } async function cetakLaporanAbsen() { let kId = document.getElementById('c_kelas').value; let resP = await apiFetch('get_pengaturan'); let resA = await apiFetch(`get_rekap_absensi&kelas_id=${kId}`); let p = resP.data || { kop_laporan: "PEMERINTAH KOTA MOJOKERTO\nDINAS PENDIDIKAN" }; let rows = resA.data ? resA.data.map((a, i) => ` ${i + 1} ${a.nis} ${a.nama_siswa} ${a.total_h || 0} ${a.total_s || 0} ${a.total_i || 0} ${a.total_a || 0} `).join('') : 'Tidak ada data.'; let win = window.open('', '_blank'); win.document.write(` Cetak Rekap Presensi
${p.kop_laporan}

REKAPITULASI PRESENSI SISWA

${rows}
NoNISNama SiswaHadirSakitIzinAlpa
`); win.document.close(); } function exportToExcel(tableID, filename = '') { let downloadLink; let dataType = 'application/vnd.ms-excel'; let tableSelect = document.getElementById(tableID); let tableHTML = tableSelect.outerHTML.replace(/ /g, '%20'); filename = filename ? filename + '.xls' : 'excel_data.xls'; downloadLink = document.createElement("a"); document.body.appendChild(downloadLink); if (navigator.msSaveOrOpenBlob) { let blob = new Blob(['\ufeff' + tableHTML], { type: dataType }); navigator.msSaveOrOpenBlob(blob, filename); } else { downloadLink.href = 'data:' + dataType + ', ' + tableHTML; downloadLink.download = filename; downloadLink.click(); } } // ========================================== // 8. PENGATURAN // ========================================== async function loadPengaturanData() { let res = await apiFetch('get_pengaturan'); if (res.status === 'success' && res.data) { document.getElementById('p_nama_sekolah').value = res.data.nama_sekolah || ''; document.getElementById('p_semester').value = res.data.semester_aktif || ''; document.getElementById('p_logo').value = res.data.logo_url || ''; document.getElementById('p_kop').value = res.data.kop_laporan || ''; document.getElementById('p_tanggal').value = res.data.tanggal_laporan || ''; } } async function simpanPengaturanReal(e) { e.preventDefault(); let payload = { nama_sekolah: document.getElementById('p_nama_sekolah').value, semester_aktif: document.getElementById('p_semester').value, logo_url: document.getElementById('p_logo').value, kop_laporan: document.getElementById('p_kop').value, tanggal_laporan: document.getElementById('p_tanggal').value }; let res = await apiFetch('simpan_pengaturan', 'POST', payload); if (res.status === 'success') showToast(res.message); else showToast(res.message, 'danger'); }