TKK_E32222855/cetak_bulan.php

109 lines
3.0 KiB
PHP

<?php
require 'vendor/autoload.php';
require 'koneksi.php';
use Dompdf\Dompdf;
use Dompdf\Options;
$bulan = isset($_GET['bulan']) ? $_GET['bulan'] : date('n');
$tahun = isset($_GET['tahun']) ? $_GET['tahun'] : date('Y');
$jumlah_hari = cal_days_in_month(CAL_GREGORIAN, $bulan, $tahun);
$tgl_awal = "$tahun-" . str_pad($bulan, 2, '0', STR_PAD_LEFT) . "-01";
$tgl_akhir = "$tahun-" . str_pad($bulan, 2, '0', STR_PAD_LEFT) . "-$jumlah_hari";
// Array hari kerja (Senin - Jumat)
$hari_kerja = [];
for ($i = 1; $i <= $jumlah_hari; $i++) {
$tanggal = "$tahun-" . str_pad($bulan, 2, '0', STR_PAD_LEFT) . "-" . str_pad($i, 2, '0', STR_PAD_LEFT);
$day_of_week = date('N', strtotime($tanggal)); // 1=Senin, ..., 7=Minggu
if ($day_of_week < 6) {
$hari_kerja[] = $tanggal;
}
}
$total_hari_kerja = count($hari_kerja);
$query = "
SELECT k.nama, a.tanggal, a.jam_masuk, a.jam_pulang
FROM absensi a
JOIN karyawan k ON a.rfid = k.rfid
WHERE a.tanggal BETWEEN '$tgl_awal' AND '$tgl_akhir'
ORDER BY k.nama, a.tanggal
";
$result = mysqli_query($conn, $query);
// HTML Template
$html = '<html><body>';
$html .= '<h2 style="text-align:center;">DATA ABSENSI</h2>';
$html .= '<h4 style="text-align:center;">BULAN ' . strtoupper(date('F', mktime(0, 0, 0, $bulan, 1))) . ' ' . $tahun . '</h4>';
$html .= '<hr><br>';
$html .= '<table border="1" cellpadding="5" cellspacing="0" style="width:100%; font-size:12px; border-collapse:collapse;">';
$html .= '<tr>
<th>Nama</th>
<th>Hadir (Hari)</th>
<th>Tidak Hadir (Hari)</th>
<th>Total Hari Kerja</th>
</tr>';
$prev_name = '';
$summary = [];
$data_absen = [];
// Susun data absensi
while ($row = mysqli_fetch_assoc($result)) {
$nama = $row['nama'];
$tanggal = $row['tanggal'];
if (!isset($data_absen[$nama])) {
$data_absen[$nama] = [];
}
$data_absen[$nama][$tanggal] = [
'masuk' => $row['jam_masuk'],
'pulang' => $row['jam_pulang'],
];
}
// Rekap per karyawan
foreach ($data_absen as $nama => $absensi) {
$hadir = 0;
foreach ($hari_kerja as $tgl) {
if (isset($absensi[$tgl]) && $absensi[$tgl]['masuk'] && $absensi[$tgl]['pulang']) {
$hadir++;
}
}
$tidak_hadir = $total_hari_kerja - $hadir;
$html .= "<tr>
<td>{$nama}</td>
<td style='text-align:center'>{$hadir}</td>
<td style='text-align:center'>{$tidak_hadir}</td>
<td style='text-align:center'>{$total_hari_kerja}</td>
</tr>";
}
$html .= '</table>';
$html .= '<br><div style="text-align:right; font-size:12px;">
Jakarta, ' . date('d F Y') . '<br><br>
<p>Admin</p><br><br>
<hr style="width:200px;">
<p style="text-align:center;">Mengetahui, Manajer Operasional</p>
</div>';
$html .= '</body></html>';
mysqli_close($conn);
// DOMPDF
$options = new Options();
$options->set('isHtml5ParserEnabled', true);
$dompdf = new Dompdf($options);
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$dompdf->stream("Rekap_Absensi_Bulan_$bulan-$tahun.pdf", array("Attachment" => 0));
?>