94 lines
4.4 KiB
PHP
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>
|