false, 'message' => 'Unauthorized']); exit; } $db = getDB(); $type = $_GET['type'] ?? 'penduduk'; // penduduk | ibadah $format = $_GET['format'] ?? 'csv'; // csv | print // ── Query Penduduk Miskin ────────────────────────────────────── if ($type === 'penduduk') { $where = ['1=1']; $params = []; if (!empty($_GET['status'])) { $where[] = 'pm.status_bantuan = ?'; $params[] = $_GET['status']; } if (!empty($_GET['kecamatan'])) { $where[] = 'pm.kecamatan = ?'; $params[] = $_GET['kecamatan']; } if (!empty($_GET['ibadah_id'])) { $where[] = 'pm.rumah_ibadah_id = ?'; $params[] = (int)$_GET['ibadah_id']; } if (!empty($_GET['dari'])) { $where[] = 'DATE(pm.created_at) >= ?'; $params[] = $_GET['dari']; } if (!empty($_GET['sampai'])) { $where[] = 'DATE(pm.created_at) <= ?'; $params[] = $_GET['sampai']; } $ws = implode(' AND ', $where); $stmt = $db->prepare(" SELECT pm.id, pm.kk_nama, pm.nik, pm.jumlah_anggota, pm.alamat, pm.kelurahan, pm.kecamatan, pm.lat, pm.lng, pm.status_bantuan, pm.jenis_bantuan, pm.tanggal_bantuan, pm.nominal_bantuan, pm.jarak_ke_ibadah, pm.created_at, ri.nama AS ibadah_nama, ri.jenis AS ibadah_jenis FROM penduduk_miskin pm LEFT JOIN rumah_ibadah ri ON pm.rumah_ibadah_id = ri.id WHERE $ws ORDER BY pm.kecamatan, pm.kk_nama "); $stmt->execute($params); $rows = $stmt->fetchAll(); if ($format === 'csv') { header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename="penduduk_miskin_' . date('Ymd_His') . '.csv"'); $out = fopen('php://output', 'w'); // BOM for Excel UTF-8 fputs($out, "\xEF\xBB\xBF"); fputcsv($out, ['No','Nama KK','NIK','Jumlah Anggota','Alamat','Kelurahan','Kecamatan', 'Latitude','Longitude','Status Bantuan','Jenis Bantuan','Tanggal Bantuan','Nominal Bantuan', 'Jarak ke Ibadah (m)','Rumah Ibadah','Jenis Ibadah','Terdaftar']); foreach ($rows as $i => $row) { fputcsv($out, [ $i + 1, $row['kk_nama'], $row['nik'] ?: '', $row['jumlah_anggota'], $row['alamat'] ?: '', $row['kelurahan'] ?: '', $row['kecamatan'] ?: '', $row['lat'], $row['lng'], $row['status_bantuan'], $row['jenis_bantuan'] ?: '', $row['tanggal_bantuan'] ?: '', $row['nominal_bantuan'] ? $row['nominal_bantuan'] : '', $row['jarak_ke_ibadah'] ? round($row['jarak_ke_ibadah']) : '', $row['ibadah_nama'] ?: '', $row['ibadah_jenis'] ?: '', $row['created_at'], ]); } fclose($out); exit; } // Print / PDF view $title = 'Data Penduduk Miskin'; $subtitle = 'WebGIS Sebaran Penduduk Miskin — ' . APP_NAME; $cols = ['No', 'Nama KK', 'NIK', 'Anggota', 'Kecamatan', 'Status', 'Nominal Bantuan', 'Rumah Ibadah', 'Jarak']; $tableRows = array_map(function($r, $i) { $sc = ['sudah' => '#22c55e', 'menunggu' => '#f59e0b', 'belum' => '#ef4444', 'darurat' => '#a855f7'][$r['status_bantuan']] ?? '#ef4444'; return [$i + 1, $r['kk_nama'], $r['nik'] ?: '—', $r['jumlah_anggota'], $r['kecamatan'] ?: '—', "".ucfirst($r['status_bantuan']).'', $r['nominal_bantuan'] ? 'Rp '.number_format($r['nominal_bantuan'],0,',','.') : '—', $r['ibadah_nama'] ?: '—', $r['jarak_ke_ibadah'] ? round($r['jarak_ke_ibadah']).' m' : '—']; }, $rows, array_keys($rows)); } // ── Query Rumah Ibadah ──────────────────────────────────────── if ($type === 'ibadah') { $where = ['1=1']; $params = []; if (!empty($_GET['jenis'])) { $where[] = 'jenis = ?'; $params[] = $_GET['jenis']; } if (!empty($_GET['kecamatan'])) { $where[] = 'kecamatan = ?'; $params[] = $_GET['kecamatan']; } $ws = implode(' AND ', $where); $stmt = $db->prepare(" SELECT ri.*, (SELECT COUNT(*) FROM penduduk_miskin pm WHERE pm.rumah_ibadah_id = ri.id) AS jumlah_binaan FROM rumah_ibadah ri WHERE $ws ORDER BY jenis, nama "); $stmt->execute($params); $rows = $stmt->fetchAll(); if ($format === 'csv') { header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename="rumah_ibadah_' . date('Ymd_His') . '.csv"'); $out = fopen('php://output', 'w'); fputs($out, "\xEF\xBB\xBF"); fputcsv($out, ['No','Nama','Jenis','Kontak','Alamat','Kelurahan','Kecamatan', 'Latitude','Longitude','Radius (m)','Jumlah Binaan','Terdaftar']); foreach ($rows as $i => $row) { fputcsv($out, [ $i + 1, $row['nama'], $row['jenis'], $row['kontak'] ?: '', $row['alamat'] ?: '', $row['kelurahan'] ?: '', $row['kecamatan'] ?: '', $row['lat'], $row['lng'], $row['radius'], $row['jumlah_binaan'], $row['created_at'] ]); } fclose($out); exit; } $title = 'Data Rumah Ibadah'; $subtitle = 'WebGIS Sebaran Penduduk Miskin — ' . APP_NAME; $cols = ['No', 'Nama', 'Jenis', 'Kontak', 'Kecamatan', 'Radius', 'Binaan']; $tableRows = array_map(function($r, $i) { return [$i + 1, $r['nama'], $r['jenis'], $r['kontak'] ?: '—', $r['kecamatan'] ?: '—', formatRadius($r['radius']), $r['jumlah_binaan']]; }, $rows, array_keys($rows)); } // ── HTML Print View ─────────────────────────────────────────── $total = count($rows); ?> <?= $title ?>
$c"; ?>$td"; ?>
Tidak ada data