Files
2026-06-13 11:24:58 +07:00

94 lines
4.4 KiB
PHP

<?php
/**
* api/warga_export.php — Export data warga (KF-16).
* ?format=csv → unduh CSV semua data
* ?format=template → unduh template CSV kosong (Lampiran A)
* ?format=print → halaman cetak (PDF via browser print)
*/
require_once __DIR__ . '/../config/db.php';
require_once __DIR__ . '/../config/auth_check.php';
requireAnyRole(['operator', 'pimpinan']);
$pdo = Database::getConnection();
$format = $_GET['format'] ?? 'csv';
if ($format === 'template') {
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="template_warga.csv"');
$out = fopen('php://output', 'w');
fputcsv($out, ['nik_kk','nama_kk','kode_kelurahan','latitude','longitude','jumlah_jiwa','sumber_air','status_listrik','material_dinding','pekerjaan_kk']);
fputcsv($out, ['3171010000000001','Contoh Nama','6171010001','-0.0510','109.3610','4','SUNGAI','NON_PLN','TIDAK_PERMANEN','Buruh Harian']);
fclose($out);
exit;
}
$rows = $pdo->query("
SELECT w.id, w.nik_kk, w.nama_kk, wl.nama AS kelurahan, w.alamat, w.rt, w.rw,
w.jumlah_jiwa, w.jumlah_tanggungan, w.pekerjaan_kk, w.penghasilan,
w.sumber_air, w.status_listrik, w.material_dinding, w.status_kepemilikan, w.status_verifikasi,
ST_Y(w.geom) AS lat, ST_X(w.geom) AS lng,
(SELECT GROUP_CONCAT(jb.kode SEPARATOR '; ')
FROM bantuan_sosial bs JOIN jenis_bantuan jb ON jb.id=bs.jenis_bantuan_id
WHERE bs.warga_id=w.id AND bs.is_aktif=1) AS bantuan
FROM warga_miskin w LEFT JOIN wilayah wl ON wl.id=w.wilayah_id
ORDER BY w.id
")->fetchAll();
if ($format === 'csv') {
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="data_warga_' . date('Ymd') . '.csv"');
$out = fopen('php://output', 'w');
fputcsv($out, ['ID','NIK KK','Nama KK','Kelurahan','Alamat','RT','RW','Jiwa','Tanggungan','Pekerjaan','Penghasilan','Sumber Air','Listrik','Dinding','Kepemilikan','Verifikasi','Bantuan Aktif','Lat','Lng']);
foreach ($rows as $r) {
fputcsv($out, [
$r['id'], $r['nik_kk'], $r['nama_kk'], $r['kelurahan'], $r['alamat'], $r['rt'], $r['rw'],
$r['jumlah_jiwa'], $r['jumlah_tanggungan'], $r['pekerjaan_kk'], $r['penghasilan'],
$r['sumber_air'], $r['status_listrik'], $r['material_dinding'], $r['status_kepemilikan'],
$r['status_verifikasi'], $r['bantuan'], $r['lat'], $r['lng'],
]);
}
fclose($out);
exit;
}
// format=print → HTML untuk dicetak/disimpan PDF
?>
<!DOCTYPE html>
<html lang="id"><head>
<meta charset="UTF-8">
<title>Laporan Data Warga Miskin</title>
<style>
body{font-family:Arial,sans-serif;margin:24px;color:#111;}
h2{margin:0 0 2px;} .sub{color:#666;font-size:0.85rem;margin-bottom:14px;}
table{width:100%;border-collapse:collapse;font-size:0.72rem;}
th,td{border:1px solid #ccc;padding:4px 6px;text-align:left;}
th{background:#f1f5f9;}
.toolbar{margin-bottom:12px;}
button{padding:8px 14px;background:#2563EB;color:#fff;border:none;border-radius:6px;cursor:pointer;}
@media print{.toolbar{display:none;}}
</style></head>
<body>
<div class="toolbar"><button onclick="window.print()">🖨️ Cetak / Simpan PDF</button></div>
<h2>Laporan Data Rumah Tangga Miskin</h2>
<div class="sub">WebGIS Pemetaan Kemiskinan — dicetak <?= date('d M Y H:i') ?> — total <?= count($rows) ?> rumah tangga</div>
<table>
<thead><tr><th>#</th><th>NIK</th><th>Nama KK</th><th>Kelurahan</th><th>Jiwa</th><th>Penghasilan</th><th>Sumber Air</th><th>Dinding</th><th>Bantuan</th><th>Verifikasi</th></tr></thead>
<tbody>
<?php foreach ($rows as $i => $r): ?>
<tr>
<td><?= $i+1 ?></td>
<td><?= htmlspecialchars($r['nik_kk'] ?: '-') ?></td>
<td><?= htmlspecialchars($r['nama_kk']) ?></td>
<td><?= htmlspecialchars($r['kelurahan'] ?: '-') ?></td>
<td><?= $r['jumlah_jiwa'] ?: '-' ?></td>
<td>Rp <?= number_format($r['penghasilan'],0,',','.') ?></td>
<td><?= htmlspecialchars($r['sumber_air'] ?: '-') ?></td>
<td><?= htmlspecialchars($r['material_dinding'] ?: '-') ?></td>
<td><?= htmlspecialchars($r['bantuan'] ?: '-') ?></td>
<td><?= htmlspecialchars($r['status_verifikasi']) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</body></html>