JustPaste
HomeCategoriesAboutDonateContactTerms of UsePrivacy Policy
JustPaste

Free online notepad — write and share instantly

Navigate

  • Home
  • Timeline
  • Categories

Info

  • About
  • Donate
  • Contact

Legal

  • Terms of Use
  • Privacy Policy

© 2026 JustPaste.app. All rights reserved.

Made with ♥ by JustPaste

kode 3 function | JustPaste.app
4 months ago29 views

kode 3 function

public function get_absensi_pegawai()

{

$data = [

'form_id_bulan' => $this->input->post('first_month'),

'form_tahun' => $this->input->post('first_year'),

'form_id_dept' => $this->input->post('form_id_dept'),

'form_pin' => $this->input->post('PIN')

];

// $attendanceData = $this->MlapAbsensi_pegawai->get_absensi_pegawai($data);

// var_dump($attendanceData);

// exit();

$list = $this->MlapAbsensi_pegawai->get_datatables($data);

foreach ($list as $karyawan) {

$row = array();

$row[] = $karyawan->Tanggal;

$row[] = $karyawan->Hari.' - '.$karyawan->id_karyawan;

$row[] = $karyawan->Jadwal . ' (' . $karyawan->jam_masuk . '-' . $karyawan->jam_pulang . ')';

// Absen Masuk

if (in_array($karyawan->Absen_Masuk, ['C','CS','CM','DL'])) {

$row[] = '<span class="badge rounded-pill bg-dark me-1">'.$karyawan->Absen_Masuk.'</span>';

} elseif ($karyawan->Absen_Masuk === 'A') {

$row[] = '<span class="badge rounded-pill bg-warning me-1">A</span>';

} else {

$row[] = $karyawan->Absen_Masuk;

}

// Absen Pulang

if (in_array($karyawan->Absen_Pulang, ['C','CS','CM','DL'])) {

$row[] = '<span class="badge rounded-pill bg-dark me-1">'.$karyawan->Absen_Pulang.'</span>';

} elseif ($karyawan->Absen_Pulang === 'A') {

$row[] = '<span class="badge rounded-pill bg-warning me-1">A</span>';

} else {

$row[] = $karyawan->Absen_Pulang;

}

// Jadwal default

$defaultMasuk = strtotime('1970-01-01T' . $karyawan->jam_masuk);

$defaultPulang = strtotime('1970-01-01T' . $karyawan->jam_pulang);

// Absen aktual

$absenMasuk = ($karyawan->Absen_Masuk && strpos($karyawan->Absen_Masuk, ':') !== false) ? strtotime('1970-01-01T' . $karyawan->Absen_Masuk) : null;

$absenPulang = ($karyawan->Absen_Pulang && strpos($karyawan->Absen_Pulang, ':') !== false) ? strtotime('1970-01-01T' . $karyawan->Absen_Pulang) : null;

// Hitung total jam kerja

if (!$absenMasuk || !$absenPulang) {

$totalJamKerja = '<span class="badge rounded-pill bg-danger me-1">Invalid</span>';

} else {

$startTime = $absenMasuk < $defaultMasuk ? $defaultMasuk : $absenMasuk;

$endTime = $absenPulang > $defaultPulang ? $defaultPulang : $absenPulang;

$totalTime = ($endTime - $startTime) / 3600;

$hours = floor($totalTime);

$minutes = round(($totalTime - $hours) * 60);

$totalJamKerja = ($hours >= 0)

? sprintf('%02d:%02d', $hours, $minutes)

: '<span class="badge rounded-pill bg-danger me-1">Invalid</span>';

}

$row[] = $totalJamKerja;

// =========================

// CEK CUTI / DINAS LUAR (DARI JADWAL, TANPA PERLU APPROVAL KABAG)

// =========================

$isCuti = in_array($karyawan->Jadwal, ['C', 'CM', 'CS','DL']);

// =========================

// Default nilai

// =========================

$kekuranganMasuk = 0;

$kekuranganPulang = 0;

// =========================

// Fungsi kalkulasi denda

// =========================

$calcDendaMasuk = function($detik) {

if (!$detik || $detik <= 0) return 0;

$menit = floor($detik / 60);

if ($menit <= 15) return 0;

if ($menit >= 16 && $menit <= 30) return 0.5;

if ($menit >= 31 && $menit <= 60) return 1;

if ($menit >= 61 && $menit <= 90) return 1.25;

return 1.5;

};

$calcDendaPulang = function($detik) {

if (!$detik || $detik <= 0) return 0;

$menit = floor($detik / 60);

if ($menit >= 1 && $menit <= 30) return 0.5;

if ($menit >= 31 && $menit <= 60) return 1;

if ($menit >= 61 && $menit <= 90) return 1.25;

return 1.5;

};

// =========================

// HITUNG DENDA MASUK

// =========================

if (!$isCuti && $karyawan->Jadwal != 'L' && $karyawan->jam_masuk != '00:00:00') {

if (!$absenMasuk) {

$kekuranganMasuk = 1.5; // tidak finger masuk

} else {

$selisihMasuk = max(0, $absenMasuk - $defaultMasuk);

$kekuranganMasuk = $calcDendaMasuk($selisihMasuk);

}

}

// =========================

// CEK SHIFT 24 JAM (AMBULANCE)

// =========================

$isShift24Jam = (

$karyawan->jam_masuk === $karyawan->jam_pulang

&& $karyawan->jam_masuk !== '00:00:00'

);

$masukKosong = !$absenMasuk;

$pulangKosong = !$absenPulang;

$yesterday = date('Y-m-d', strtotime($karyawan->full_tanggal . ' -1 day'));

$shiftYtd = $this->MlapAbsensi_pegawai

->get_absen_per_tgl($karyawan->id_karyawan, $yesterday);

// =========================

// DENDA PULANG

// =========================

if ($isShift24Jam) {

if (!$masukKosong && $pulangKosong) {

$kekuranganPulang = 0;

} elseif ($masukKosong && !$pulangKosong) {

$kekuranganPulang = 0;

} else {

if ($pulangKosong) {

$kekuranganPulang = 1.5;

} else {

$selisihPulang = max(0, $defaultPulang - $absenPulang);

$kekuranganPulang = $calcDendaPulang($selisihPulang);

}

}

} elseif ($isCuti) {

$kekuranganPulang = 0;

} elseif (in_array($karyawan->Jadwal, ['L','LM'])) {

$kekuranganPulang = 0;

} elseif (in_array($karyawan->Jadwal, ['M','SM'])) {

$kekuranganPulang = 0;

} elseif ($shiftYtd && in_array($shiftYtd->Jadwal, ['M','SM'])) {

if ($absenPulang) {

$defaultPulangH1 = strtotime('1970-01-01T'.$shiftYtd->jam_pulang);

$selisihPulang = max(0, $defaultPulangH1 - $absenPulang);

$kekuranganPulang = $calcDendaPulang($selisihPulang);

} else {

$kekuranganPulang = 1.5;

}

} else {

if ($absenPulang) {

$selisihPulang = max(0, $defaultPulang - $absenPulang);

$kekuranganPulang = $calcDendaPulang($selisihPulang);

} else {

$kekuranganPulang = 1.5;

}

}

// =========================

// TOTAL

// =========================

$totalPersen = $kekuranganMasuk + $kekuranganPulang;

$row[] = number_format($kekuranganMasuk, 2);

$row[] = number_format($kekuranganPulang, 2);

$row[] = number_format($totalPersen, 2);

$data[] = $row;

}

$output = array(

"draw" => $_POST['draw'],

"recordsTotal" => $this->MlapAbsensi->count_filtered(),

"recordsFiltered" => $this->MlapAbsensi->count_filtered(),

"data" => $data,

);

echo json_encode($output);

// echo json_encode($attendanceData);

}

public function ajax_list_per_pegawai() {

$list = $this->MlapAbsensi_pegawai->get_datatables();

$data = array();

$no = $_POST['start'];

foreach ($list as $karyawan) {

$row = array();

$row[] = $karyawan->Tanggal;

$row[] = $karyawan->Hari;

$row[] = $karyawan->Jadwal . ' (' . $karyawan->jam_masuk . '-' . $karyawan->jam_pulang . ')';

// Absen Masuk

if (in_array($karyawan->Absen_Masuk, ['C','CS','CM','DL'])) {

$row[] = '<span class="badge rounded-pill bg-dark me-1">'.$karyawan->Absen_Masuk.'</span>';

} elseif ($karyawan->Absen_Masuk === 'A') {

$row[] = '<span class="badge rounded-pill bg-warning me-1">A</span>';

} else {

$row[] = $karyawan->Absen_Masuk;

}

// Absen Pulang

if (in_array($karyawan->Absen_Pulang, ['C','CS','CM','DL'])) {

$row[] = '<span class="badge rounded-pill bg-dark me-1">'.$karyawan->Absen_Pulang.'</span>';

} elseif ($karyawan->Absen_Pulang === 'A') {

$row[] = '<span class="badge rounded-pill bg-warning me-1">A</span>';

} else {

$row[] = $karyawan->Absen_Pulang;

}

// Jadwal default

$defaultMasuk = strtotime('1970-01-01T' . $karyawan->jam_masuk);

$defaultPulang = strtotime('1970-01-01T' . $karyawan->jam_pulang);

// Absen aktual

$absenMasuk = ($karyawan->Absen_Masuk && strpos($karyawan->Absen_Masuk, ':') !== false) ? strtotime('1970-01-01T' . $karyawan->Absen_Masuk) : null;

$absenPulang = ($karyawan->Absen_Pulang && strpos($karyawan->Absen_Pulang, ':') !== false) ? strtotime('1970-01-01T' . $karyawan->Absen_Pulang) : null;

// Hitung total jam kerja

if (!$absenMasuk || !$absenPulang) {

$totalJamKerja = '<span class="badge rounded-pill bg-danger me-1">Invalid</span>';

} else {

$startTime = $absenMasuk < $defaultMasuk ? $defaultMasuk : $absenMasuk;

$endTime = $absenPulang > $defaultPulang ? $defaultPulang : $absenPulang;

$totalTime = ($endTime - $startTime) / 3600;

$hours = floor($totalTime);

$minutes = round(($totalTime - $hours) * 60);

$totalJamKerja = ($hours >= 0)

? sprintf('%02d:%02d', $hours, $minutes)

: '<span class="badge rounded-pill bg-danger me-1">Invalid</span>';

}

$row[] = $totalJamKerja;

// =========================

// CEK CUTI / DINAS LUAR (DARI JADWAL, TANPA PERLU APPROVAL KABAG)

// =========================

$isCuti = in_array($karyawan->Jadwal, ['C', 'CM', 'CS','DL']);

// =========================

// Default nilai

// =========================

$kekuranganMasuk = 0;

$kekuranganPulang = 0;

// =========================

// Fungsi kalkulasi denda

// =========================

$calcDendaMasuk = function($detik) {

if (!$detik || $detik <= 0) return 0;

$menit = floor($detik / 60);

if ($menit <= 15) return 0;

if ($menit >= 16 && $menit <= 30) return 0.5;

if ($menit >= 31 && $menit <= 60) return 1;

if ($menit >= 61 && $menit <= 90) return 1.25;

return 1.5;

};

$calcDendaPulang = function($detik) {

if (!$detik || $detik <= 0) return 0;

$menit = floor($detik / 60);

if ($menit >= 1 && $menit <= 30) return 0.5;

if ($menit >= 31 && $menit <= 60) return 1;

if ($menit >= 61 && $menit <= 90) return 1.25;

return 1.5;

};

// =========================

// HITUNG DENDA MASUK

// =========================

if (!$isCuti && $karyawan->Jadwal != 'L' && $karyawan->jam_masuk != '00:00:00') {

if (!$absenMasuk) {

$kekuranganMasuk = 1.5; // tidak finger masuk

} else {

$selisihMasuk = max(0, $absenMasuk - $defaultMasuk);

$kekuranganMasuk = $calcDendaMasuk($selisihMasuk);

}

}

// =========================

// CEK SHIFT 24 JAM (AMBULANCE)

// =========================

$isShift24Jam = (

$karyawan->jam_masuk === $karyawan->jam_pulang

&& $karyawan->jam_masuk !== '00:00:00'

);

$masukKosong = !$absenMasuk;

$pulangKosong = !$absenPulang;

$yesterday = date('Y-m-d', strtotime($karyawan->full_tanggal . ' -1 day'));

$shiftYtd = $this->MlapAbsensi_pegawai

->get_absen_per_tgl($karyawan->id_karyawan, $yesterday);

// =========================

// DENDA PULANG

// =========================

if ($isShift24Jam) {

if (!$masukKosong && $pulangKosong) {

$kekuranganPulang = 0;

} elseif ($masukKosong && !$pulangKosong) {

$kekuranganPulang = 0;

} else {

if ($pulangKosong) {

$kekuranganPulang = 1.5;

} else {

$selisihPulang = max(0, $defaultPulang - $absenPulang);

$kekuranganPulang = $calcDendaPulang($selisihPulang);

}

}

} elseif ($isCuti) {

$kekuranganPulang = 0;

} elseif (in_array($karyawan->Jadwal, ['L','LM'])) {

$kekuranganPulang = 0;

} elseif (in_array($karyawan->Jadwal, ['M','SM'])) {

$kekuranganPulang = 0;

} elseif ($shiftYtd && in_array($shiftYtd->Jadwal, ['M','SM'])) {

if ($absenPulang) {

$defaultPulangH1 = strtotime('1970-01-01T'.$shiftYtd->jam_pulang);

$selisihPulang = max(0, $defaultPulangH1 - $absenPulang);

$kekuranganPulang = $calcDendaPulang($selisihPulang);

} else {

$kekuranganPulang = 1.5;

}

} else {

if ($absenPulang) {

$selisihPulang = max(0, $defaultPulang - $absenPulang);

$kekuranganPulang = $calcDendaPulang($selisihPulang);

} else {

$kekuranganPulang = 1.5;

}

}

// =========================

// TOTAL

// =========================

$totalPersen = $kekuranganMasuk + $kekuranganPulang;

$row[] = number_format($kekuranganMasuk, 2);

$row[] = number_format($kekuranganPulang, 2);

$row[] = number_format($totalPersen, 2);

$data[] = $row;

}

$output = array(

"draw" => $_POST['draw'],

"recordsTotal" => $this->MlapAbsensi->count_filtered(),

"recordsFiltered" => $this->MlapAbsensi->count_filtered(),

"data" => $data,

);

echo json_encode($output);

}

public function rekap_absensi_per_pegawai_pdf()

{

$data['form_id_dept'] = $this->input->post('form_id_dept');

$data['form_text_dept'] = $this->input->post('form_text_dept');

$data['form_id_bulan'] = $this->input->post('form_id_bulan');

$data['form_text_bulan'] = $this->input->post('form_text_bulan');

$data['form_tahun'] = $this->input->post('form_tahun');

$data['form_pin'] = $this->input->post('form_pin');

$data['form_nama'] = $this->input->post('form_nama');

$data['getData'] = $this->MlapAbsensi_pegawai->get_datatables($data);

$totalJamKerjaList = [];

$dendaMasukList = [];

$dendaPulangList = [];

$totalDendaList = [];

// =========================

// Fungsi kalkulasi denda

// =========================

$calcDendaMasuk = function($detik) {

if (!$detik || $detik <= 0) return 0;

$menit = floor($detik / 60);

if ($menit <= 15) return 0;

if ($menit >= 16 && $menit <= 30) return 0.5;

if ($menit >= 31 && $menit <= 60) return 1;

if ($menit >= 61 && $menit <= 90) return 1.25;

return 1.5;

};

$calcDendaPulang = function($detik) {

if (!$detik || $detik <= 0) return 0;

$menit = floor($detik / 60);

if ($menit >= 1 && $menit <= 30) return 0.5;

if ($menit >= 31 && $menit <= 60) return 1;

if ($menit >= 61 && $menit <= 90) return 1.25;

return 1.5;

};

foreach ($data['getData'] as $index => $row) {

// =========================

// HITUNG TOTAL JAM KERJA

// =========================

$defaultMasuk = $row->jam_masuk ? strtotime('1970-01-01T'.$row->jam_masuk) : null;

$defaultPulang = $row->jam_pulang ? strtotime('1970-01-01T'.$row->jam_pulang) : null;

$absenMasuk = ($row->Absen_Masuk && strpos($row->Absen_Masuk, ':') !== false)

? strtotime('1970-01-01T'.$row->Absen_Masuk) : null;

$absenPulang = ($row->Absen_Pulang && strpos($row->Absen_Pulang, ':') !== false)

? strtotime('1970-01-01T'.$row->Absen_Pulang) : null;

if (!$absenMasuk || !$absenPulang) {

$totalJamKerja = 'Invalid';

} else {

$startTime = max($absenMasuk, $defaultMasuk);

$endTime = min($absenPulang, $defaultPulang);

$totalTime = ($endTime - $startTime) / 3600;

$hours = floor($totalTime);

$minutes = round(($totalTime - $hours) * 60);

$totalJamKerja = ($hours >= 0) ? sprintf('%02d:%02d', $hours, $minutes) : 'Invalid';

}

$totalJamKerjaList[$index] = $totalJamKerja;

// =========================

// CEK CUTI / DINAS LUAR (JADWAL SAJA)

// =========================

$isCuti = in_array($row->Jadwal, ['C', 'CM', 'CS','DL']);

// =========================

// HITUNG DENDA MASUK

// =========================

$kekuranganMasuk = 0;

// =========================

// SHIFT 24 JAM (AMBULANCE FIX)

// =========================

$isShift24Jam = (

$row->jam_masuk === $row->jam_pulang &&

$row->jam_masuk !== '00:00:00'

);

if ($isShift24Jam) {

// Hari pertama: ada masuk, pulang kosong → jangan denda

if ($absenMasuk && !$absenPulang) {

$kekuranganPulang = 0;

goto total_denda;

}

// Hari kedua: masuk kosong, ada pulang → jangan denda

if (!$absenMasuk && $absenPulang) {

$kekuranganPulang = 0;

goto total_denda;

}

}

if (!$isCuti && $row->Jadwal != 'L' && $row->jam_masuk != '00:00:00') {

if (!$absenMasuk) {

$kekuranganMasuk = 1.5;

} else {

$selisihMasuk = max(0, $absenMasuk - $defaultMasuk);

$kekuranganMasuk = $calcDendaMasuk($selisihMasuk);

}

}

// =========================

// HITUNG DENDA PULANG

// =========================

$kekuranganPulang = 0;

$yesterday = date('Y-m-d', strtotime($row->full_tanggal . ' -1 day'));

$shiftYtd = $this->MlapAbsensi_pegawai->get_absen_per_tgl($row->id_karyawan, $yesterday);

if ($isCuti) {

$kekuranganPulang = 0;

} elseif (in_array($row->Jadwal, ['L','LM'])) {

$kekuranganPulang = 0;

} elseif (in_array($row->Jadwal, ['M','SM'])) {

$kekuranganPulang = 0;

} elseif ($shiftYtd && in_array($shiftYtd->Jadwal, ['M','SM'])) {

if ($row->Absen_Pulang && strpos($row->Absen_Pulang, ':') !== false) {

$absenPulang = strtotime('1970-01-01T'.$row->Absen_Pulang);

$defaultPulangH1 = strtotime('1970-01-01T'.$shiftYtd->jam_pulang);

$selisihPulang = max(0, $defaultPulangH1 - $absenPulang);

$kekuranganPulang = $calcDendaPulang($selisihPulang);

} else {

$kekuranganPulang = 1.5;

}

} else {

if ($row->Absen_Pulang && strpos($row->Absen_Pulang, ':') !== false) {

$absenPulang = strtotime('1970-01-01T'.$row->Absen_Pulang);

$defaultPulang = strtotime('1970-01-01T'.$row->jam_pulang);

$selisihPulang = max(0, $defaultPulang - $absenPulang);

$kekuranganPulang = $calcDendaPulang($selisihPulang);

} else {

$kekuranganPulang = 1.5;

}

}

// =========================

// TOTAL DENDA

// =========================

total_denda:

$totalDenda = $kekuranganMasuk + $kekuranganPulang;

$dendaMasukList[$index] = number_format($kekuranganMasuk, 2);

$dendaPulangList[$index] = number_format($kekuranganPulang, 2);

$totalDendaList[$index] = number_format($totalDenda, 2);

}

// Kirim ke view

$data['totalJamKerjaList'] = $totalJamKerjaList;

$data['dendaMasukList'] = $dendaMasukList;

$data['dendaPulangList'] = $dendaPulangList;

$data['totalDendaList'] = $totalDendaList;

$data['totalSemuaDendaMasuk'] = array_sum(array_map('floatval', $dendaMasukList));

$data['totalSemuaDendaPulang'] = array_sum(array_map('floatval', $dendaPulangList));

$data['totalSemuaDenda'] = array_sum(array_map('floatval', $totalDendaList));

$html = $this->load->view('lapAbsensi_per_pegawai_excel', $data, TRUE);

// Load DomPDF

$dompdf = new Dompdf();

$dompdf->setPaper('A4', 'potrait');

$dompdf->loadHtml($html);

$dompdf->render();

// Output ke browser

$filename = "Rekap_Absensi_{$data['form_nama']}_{$data['form_text_bulan']}_{$data['form_tahun']}.pdf";

$dompdf->stream($filename, ["Attachment" => false]);

}

← Back to timeline