/* ═══════════════════════════════════════════════════════════ 5. FORM BUILDERS ═══════════════════════════════════════════════════════════ */ const Forms = { spbu(rec, latlng){ const lat=latlng?latlng.lat.toFixed(6):(rec?.lat?.toFixed(6)||''); const lng=latlng?latlng.lng.toFixed(6):(rec?.lng?.toFixed(6)||''); const v=f=>rec?H.esc(rec[f]||''):''; return `
📍 Koordinat: ${lat}, ${lng}
Identitas & Operasional
Aksesibilitas & Sosial
Catatan Lapangan
`; }, jalan(rec, len){ const pj=len??rec?.panjang??0; const v=f=>rec?H.esc(rec[f]||''):''; return `
📏 Panjang terukur otomatis: ${H.fmDist(pj)}
Identitas Ruas Jalan
Kondisi & Infrastruktur
Dampak Sosial-Ekonomi
`; }, parsil(rec, area){ const ls=area??rec?.luas??0; const v=f=>rec?H.esc(rec[f]||''):''; return `
📐 Luas terukur otomatis: ${H.fmArea(ls)}
Identitas Parsil
Status Kepemilikan
Penilaian & Pemanfaatan
`; }, warga(rec, latlng){ const lat=latlng?latlng.lat.toFixed(6):(rec?.lat?.toFixed(6)||''); const lng=latlng?latlng.lng.toFixed(6):(rec?.lng?.toFixed(6)||''); const v=f=>rec?H.esc(rec[f]||''):''; const c=v=>rec?.penyakit?.includes(v)?'checked':''; const hist=rec?.history_bansos||[]; const ri = Store.all('rumahIbadah'); const hubOpts = ['Belum ditugaskan', ...ri.map(r=>r.nama)].map(opt=>``).join(''); return `
⚠️ Data warga bersifat sensitif. Pastikan survei akurat.
📍 Koordinat: ${lat}, ${lng}
Data KK
Ekonomi
Pddk
Kes
Bansos
${CFG.warga.jenisPenyakit.map(p=>``).join('')}
${hist.map(h=>` `).join('')}
ProgramThnStatus
`; }, rumahIbadah(rec, latlng){ const lat=latlng?latlng.lat.toFixed(6):(rec?.lat?.toFixed(6)||''); const lng=latlng?latlng.lng.toFixed(6):(rec?.lng?.toFixed(6)||''); const v=f=>rec?H.esc(rec[f]||''):''; return `
📍 Koordinat: ${lat}, ${lng}
Identitas Rumah Ibadah
Kapasitas & Jangkauan
Program Sosial
`; }, readAll(ln){ const g = id => document.getElementById(id)?.value?.trim(); if(ln==='spbu'){ const nm=g('f-nama'); if(!nm){Toast.error('Nama SPBU wajib diisi!');return null;} const buka=document.querySelector('input[name="buka24"]:checked')?.value!=='false'; return {nama:nm,wa:g('f-wa'),buka24:buka,jenis_bbm:g('f-jenis_bbm'),disabilitas:g('f-disabilitas'),harga_bbm:g('f-harga_bbm'),catatan:g('f-catatan')}; } if(ln==='jalan'){ const nm=g('f-nama'); if(!nm){Toast.error('Nama jalan wajib diisi!');return null;} return {nama:nm,status:g('f-status'),panjang:parseFloat(g('f-panjang'))||0,kondisi:g('f-kondisi'),tahun_perbaikan:g('f-tahun_perbaikan'),lebar:g('f-lebar'),angkutan:g('f-angkutan'),akses_publik:g('f-akses_publik'),catatan:g('f-catatan')}; } if(ln==='parsil'){ const nm=g('f-nama'); if(!nm){Toast.error('Nama parsil wajib diisi!');return null;} return {nama:nm,status:g('f-status'),luas:parseFloat(g('f-luas'))||0,nib:g('f-nib'),sengketa:g('f-sengketa'),njop:g('f-njop'),penggunaan:g('f-penggunaan'),catatan:g('f-catatan')}; } if(ln==='warga'){ const nm=g('f-nama'); if(!nm){Toast.error('Nama KK wajib diisi!');return null;} const penyakit=[...document.querySelectorAll('input[name="penyakit"]:checked')].map(el=>el.value); const history_bansos=[]; document.querySelectorAll('#hist-tbody tr').forEach(tr=>{ const prog=tr.querySelector('.hist-program')?.value?.trim(); const thn=tr.querySelector('.hist-tahun')?.value?.trim(); const sts=tr.querySelector('.hist-status')?.value; if(prog) history_bansos.push({program:prog,tahun:parseInt(thn)||new Date().getFullYear(),status:sts}); }); return { nama: nm, nik: g('f-nik'), no_kk: g('f-no_kk'), wa: g('f-wa'), tingkat_kemiskinan: g('f-tingkat_kemiskinan'), jml_anggota: parseInt(g('f-jml_anggota'))||0, jml_lansia: parseInt(g('f-jml_lansia'))||0, alamat: g('f-alamat'), bansos: g('f-bansos'), hub_ri: g('f-hub_ri'), pendapatan: g('f-pendapatan'), pekerjaan: g('f-pekerjaan'), kondisi_rumah: g('f-kondisi_rumah'), kepemilikan_aset: g('f-kepemilikan_aset'), air_bersih: g('f-air_bersih'), listrik: g('f-listrik'), pendidikan_kk: g('f-pendidikan_kk'), jml_anak: parseInt(g('f-jml_anak'))||0, anak_putus_sekolah: parseInt(g('f-anak_putus_sekolah'))||0, penerima_beasiswa: g('f-penerima_beasiswa'), bpjs: g('f-bpjs'), jml_sakit_kronis: parseInt(g('f-jml_sakit_kronis'))||0, penyakit, history_bansos, catatan: g('f-catatan'), }; } if(ln==='rumahIbadah'){ const nm=g('f-nama'); if(!nm){Toast.error('Nama Rumah Ibadah wajib diisi!');return null;} return { nama: nm, jenis: g('f-jenis'), ketua: g('f-ketua'), wa: g('f-wa'), kapasitas: parseInt(g('f-kapasitas'))||0, radius: parseFloat(g('f-radius'))||300, jml_binaan: parseInt(g('f-jml_binaan'))||0, program: g('f-program'), dana_sosial: g('f-dana_sosial'), catatan: g('f-catatan') }; } } };