Rekap Laporan

// Mengurutkan data logbook berdasarkan tanggal awal (kronologis) function selected() { let type = $('rtype').value, y = Number($('ryear').value), m = Number($('rmonth').value), q = Number($('rquarter').value); return entries.filter(x => { if (type === 'all') return true; let d = new Date(x.date + 'T12:00:00'); if (d.getFullYear() !== y) return false; if (type === 'year') return true; if (type === 'month') return d.getMonth() + 1 === m; if (type === 'quarter') return Math.floor(d.getMonth() / 3) + 1 === q; return true; }).sort((a, b) => a.date.localeCompare(b.date)); // Diurutkan dari tanggal terawal ke terbaru } // Pengambilan foto yang benar-benar berurutan berdasarkan tanggal logbook async function getReportPhotos(a, limit = 50) { let out = []; // Urutkan catatan logbook dari tanggal paling awal let sortedEntries = [...a].sort((x, y) => x.date.localeCompare(y.date)); for (const x of sortedEntries) { for (const [key, label] of [['before_path', 'Sebelum Kegiatan'], ['after_path', 'Sesudah Kegiatan']]) { for (const [i, path] of storedPaths(x[key]).entries()) { if (out.length >= limit) return out; try { let { data, error } = await supa.storage.from('logbook-photos').createSignedUrl(path, 900); if (!error && data?.signedUrl) { out.push({ url: data.signedUrl, caption: `${dateFmt(x.date)} - ${x.activity} (${label} ${i + 1})`, date: x.date, activity: x.activity }); } } catch (e) { console.error(e); } } } } return out; } // Template Laporan Resmi (Menggunakan Font Arial, Justify, A4, & Cover Operasional Kantor) function reportDocHtml(a, photos = []) { let p = profile, info = periodInfo(), sum = summaryRows(a), title = info.type === 'year' ? 'TAHUNAN' : info.type === 'quarter' ? 'TRIWULAN' : 'BULANAN'; let range = info.type === 'month' ? info.months[info.month - 1] + ' ' + info.year : info.type === 'quarter' ? info.label : info.type === 'year' ? 'Tahun ' + info.year : info.label; let td = (v) => `${esc(v).replace(/\n/g, '
')}`; let table1 = sum.map(x => `${x.no}${esc(x.period)}${td(x.details)}${td(x.notes)}`).join(''); let table2 = photos.map((ph) => ` Dokumentasi Foto Tanggal: ${dateFmt(ph.date)}
Kegiatan: ${esc(ph.caption)} `).join(''); let conclusion = a.length ? `Pada periode ${esc(range)}, pelaksanaan tugas ${esc(p.role || 'pegawai')} pada jabatan ${esc(p.position || '-')} telah mendukung kelancaran operasional ${esc(p.office || '-')}. Kegiatan yang tercatat meliputi ${esc([...new Set(a.map(x => x.activity).filter(Boolean))].slice(0, 15).join(', ') || 'kegiatan operasional kantor sesuai logbook')}. Secara umum, seluruh kegiatan dilaksanakan secara tertib, efektif, dan sesuai catatan logbook.` : 'Belum terdapat data kegiatan pada periode laporan yang dipilih.'; return `

LAPORAN KINERJA

PELAKSANAAN TUGAS OPERASIONAL KANTOR

PERIODE ${esc(title)} ${esc(String(info.year))}

Disusun oleh:

${esc(p.name || 'Nama Pegawai').toUpperCase()}

NIP/ID: 199808272025211042

${esc(p.role || '')}

${esc(p.position || 'Operator Layanan Operasional')}

${esc(p.office || 'Kebun Pemeriksaan Substantif PVT I Manoko').toUpperCase()}

TAHUN ${esc(String(info.year))}

BAB I
PENDAHULUAN

1.1 LATAR BELAKANG

Dalam rangka mendukung kelancaran pelaksanaan tugas dan fungsi organisasi, diperlukan dukungan sumber daya manusia yang mampu melaksanakan kegiatan operasional dan pelayanan perkantoran secara efektif, tertib, dan berkesinambungan. Pelaksanaan tugas pada jabatan ${esc(p.position || 'Operator Layanan Operasional')} memiliki peran penting dalam membantu kegiatan administrasi, pengelolaan sarana dan prasarana, serta dukungan operasional kantor secara menyeluruh.

Oleh karena itu, laporan ini disusun sebagai bentuk uraian pelaksanaan kegiatan dan hasil pekerjaan berdasarkan data logbook harian pada periode ${esc(range)} sebagai bahan pertanggungjawaban, pemantauan, dan evaluasi kinerja pegawai.

1.2 TUJUAN

Tujuan penyusunan laporan ini adalah sebagai pertanggungjawaban pelaksanaan tugas operasional kantor serta menyajikan rangkuman hasil kegiatan secara terstruktur berdasarkan catatan kinerja harian.

1.3 WAKTU PELAKSANAAN

Kegiatan dilaksanakan di unit kerja ${esc(p.office || '-')} pada periode ${esc(range)}.

BAB II
AKUNTABILITAS KINERJA

2.1 HASIL PELAKSANAAN KEGIATAN

Berikut adalah rincian pelaksanaan kegiatan operasional kantor periode ${esc(range)}:

Tabel 1. Rincian Kegiatan Logbook Kinerja

${table1 || ''}
No. Tanggal / Periode Rincian Pekerjaan Keterangan / Lokasi
Belum ada data pada periode ini.

Tabel 2. Dokumentasi Foto Kegiatan (Urut dari Tanggal Awal)

${table2 || ''}
Foto Dokumentasi Keterangan Kegiatan
Tidak ada foto dokumentasi pada periode ini.

BAB III
PENUTUP

3.1 KESIMPULAN

${conclusion}

3.2 SARAN

Pencatatan logbook kinerja harian dan pendokumentasian foto kegiatan hendaknya terus dilakukan secara konsisten dan teratur agar penyusunan laporan bulanan maupun tahunan berjalan lancar dan akurat.

Bandung Barat, ${dateFmt(iso(new Date()))}

${esc(p.position || 'Operator Layanan Operasional')}

${esc(p.name || 'Riki Subagja')}

NIP: 199808272025211042

`; } // Event Handler untuk Fitur Preview (Pratinjau Laporan) async function showReportPreview() { let a = selected(); let modal = $('previewModal'); let modalBody = $('modalReportBody'); modalBody.innerHTML = '

Memuat pratinjau laporan dan foto dokumentasi...

'; modal.style.display = 'block'; try { let photos = await getReportPhotos(a, 50); // Mendapatkan foto terurut dari tanggal awal modalBody.innerHTML = reportDocHtml(a, photos); } catch (e) { modalBody.innerHTML = '

Gagal memuat pratinjau: ' + e.message + '

'; } } // Hubungkan Tombol Preview dan Tutup Modal $('previewReportBtn').onclick = showReportPreview; $('closeModalBtn').onclick = () => {$('previewModal').style.display = 'none'; }; window.onclick = (e) => { if (e.target === $('previewModal'))$('previewModal').style.display = 'none'; };