@if ($generalsetting->logo && Storage::exists('public/logo/' . $generalsetting->logo)) Logo @else Logo @endif

LAPORAN DETAIL LEMBUR

{{ $generalsetting->nama_perusahaan }}
{{ $generalsetting->alamat }}
{{ $generalsetting->telepon }}
@if ($karyawan->foto && Storage::disk('public')->exists('/karyawan/' . $karyawan->foto)) Foto Karyawan @else No Photo @endif
NIK: {{ $karyawan->nik_show ?? $karyawan->nik }} Jabatan: {{ $karyawan->nama_jabatan }}
Nama: {{ $karyawan->nama_karyawan }} Departemen: {{ $karyawan->nama_dept }}
Periode: {{ date('d M Y', strtotime($dari)) }} - {{ date('d M Y', strtotime($sampai)) }}
@php $total_aktual = 0; $total_netto = 0; $no = 1; $curr_date = $dari; $lemburKhusus = getLemburKhusus($karyawan->nik); @endphp @while (strtotime($curr_date) <= strtotime($sampai)) @php $search = ['nik' => $karyawan->nik, 'tanggal' => $curr_date]; $ceklembur = ceklibur($datalembur, $search); $jam_aktual = hitungLembur($ceklembur); $is_libur = isLiburKaryawan($karyawan->nik, $curr_date); $tipe_hari = $is_libur ? 2 : 1; $detail_netto = []; $jam_netto = 0; $is_khusus_active = false; $d_row = $presensi[$curr_date] ?? null; if ($d_row && $d_row->jam_lembur_aktual !== null) { $jam_aktual = $d_row->jam_lembur_aktual; if ($jam_aktual > 0) { $jam_netto = $d_row->jam_lembur_netto; $detail_netto[] = "Data Terkunci"; if ($d_row->is_lembur_khusus) { $is_khusus_active = true; $detail_netto[] = "(Khusus)"; } $total_aktual += $jam_aktual; $total_netto += $jam_netto; } } else { if ($jam_aktual > 0) { if ($lemburKhusus) { $jam_netto = $jam_aktual; $detail_netto[] = "Khusus (Flat)"; $is_khusus_active = true; } else { // Logic calculation mirrors hitungJamNetto helper but with breakdown $rules = DB::table('lembur_aturan') ->where('tipe_hari', $tipe_hari) ->orderBy('jam_dari', 'asc') ->get(); $remaining_jam = $jam_aktual; foreach ($rules as $rule) { $start = $rule->jam_dari; // Use absolute start from DB $end = $rule->jam_sampai ?: 999; $jam_di_tier_ini = max(0, min($jam_aktual, $end) - $start); if ($jam_di_tier_ini > 0) { $weighted = $jam_di_tier_ini * $rule->faktor; $jam_netto += $weighted; $detail_netto[] = formatAngkaDesimal($jam_di_tier_ini) . "j x " . number_format($rule->faktor, 1); } } } $total_aktual += $jam_aktual; $total_netto += $jam_netto; } } @endphp @if ($jam_aktual > 0) @endif @php $curr_date = date('Y-m-d', strtotime('+1 day', strtotime($curr_date))); @endphp @endwhile
No Tanggal Hari Status Jam Mulai Jam Selesai Aktual (Jam) Detail Indeks Netto (Jam)
{{ $no++ }} {{ date('d/m/Y', strtotime($curr_date)) }} {{ getHari($curr_date) }} {{ $is_libur ? 'LIBUR' : 'KERJA' }} {{ $ceklembur[0]['lembur_mulai'] }} {{ $ceklembur[0]['lembur_selesai'] }} {{ formatAngkaDesimal($jam_aktual) }} {{ implode(' + ', $detail_netto) }} {{ formatAngkaDesimal($jam_netto) }} @if ($is_khusus_active) @endif
TOTAL {{ formatAngkaDesimal($total_aktual) }} {{ formatAngkaDesimal($total_netto) }}
* Jam Aktual adalah durasi lembur yang telah disetujui (Capped by approval).
* Jam Netto adalah hasil perkalian Jam Aktual dengan Indeks Faktor sesuai aturan yang berlaku.
* Karyawan ini menggunakan aturan Lembur Khusus (Jam Netto = Jam Aktual).
* Data Terkunci menandakan jam lembur sudah di-snapshot dari proses Kunci Laporan.