@extends('layouts.app', ['class' => 'g-sidenav-show bg-gray-100']) @section('content') @include('layouts.navbars.auth.topnav', ['title' => ''])
{{-- Banner info (card) data missing yang belum dikonfirmasi + status pull finger pada rentang filter. TETAP tampil selama masih ada masalah; hilang sendiri ketika data sudah bersih. Partial sama dipakai report rptovr. --}} @include('components.alert_unconfirmed_missing') {{-- Filter Card --}}
Pencarian

@csrf
{{-- Left Column --}}
@error('tanggal_mulai')

{{ $message }}

@enderror
@unless (($is_spv ?? false))
@else
@endunless
{{-- Right Column --}}
@error('tanggal_akhir')

{{ $message }}

@enderror
@unless (($is_spv ?? false))
@endunless
{{-- Submit Button --}}
{{-- Results Card --}}

Diagram Report Absensi


@if (($is_spv ?? false) && !empty($spv_scope['departemen'])) @endif @php $agg = $agg ?? ['by_kategori' => [], 'by_departemen' => [], 'kehadiran' => [], 'total' => 0]; @endphp {{-- Summary Cards: Total per Kategori --}}
@forelse ($agg['by_kategori'] as $kategori => $jumlah)

{{ $kategori }}

{{ $jumlah }}

@empty
@endforelse
{{-- Charts: row 1 = kategori full width, row berikutnya 2 diagram per row --}}
Diagram Data Missing per Kategori

{{ $filter['tanggal_mulai'] ?? '' }} s/d {{ $filter['tanggal_akhir'] ?? '' }}

Diagram Kehadiran per Departemen

{{ $filter['tanggal_mulai'] ?? '' }} s/d {{ $filter['tanggal_akhir'] ?? '' }}

Belum Scan In & Scan Out per Departemen

{{ $filter['tanggal_mulai'] ?? '' }} s/d {{ $filter['tanggal_akhir'] ?? '' }}

Mangkir, Pulang Cepat & Terlambat per Departemen

{{ $filter['tanggal_mulai'] ?? '' }} s/d {{ $filter['tanggal_akhir'] ?? '' }}

Insidental, Skorsing, Izin, Cuti & Sakit per Departemen

{{ $filter['tanggal_mulai'] ?? '' }} s/d {{ $filter['tanggal_akhir'] ?? '' }}

{{-- Rekap Kehadiran --}}
Rekap Kehadiran
@forelse ($agg['kehadiran'] as $departemen => $rekap) @empty {{-- tbody dibiarkan kosong; pesan empty via language.emptyTable agar kolom tetap 9 dan tidak memicu warning tn/18. --}} @endforelse @if (!empty($agg['kehadiran'])) @php $totals = ['Scan Normal' => 0, 'Terlambat' => 0, 'Pulang Cepat' => 0, 'Belum Finger In' => 0, 'Belum Finger Out' => 0, 'total' => 0]; $totalJadwal = 0; $jumlahHari = \Carbon\Carbon::parse($filter['tanggal_mulai'])->diffInDays(\Carbon\Carbon::parse($filter['tanggal_akhir'])) + 1; foreach ($agg['kehadiran'] as $rekap) { foreach ($totals as $kolom => $nilai) { $totals[$kolom] += (int) ($rekap[$kolom] ?? 0); } $totalJadwal += (int) ($rekap['jumlah_jadwal'] ?? 0); } $totalKapasitas = $totalJadwal; @endphp @endif
Departemen Scan Normal Terlambat Pulang Cepat Belum Finger In Belum Finger Out Jumlah Kehadiran Jumlah Jadwal Karyawan Persentase Kehadiran
{{ $departemen }} {{ $rekap['Scan Normal'] }} {{ $rekap['Terlambat'] }} {{ $rekap['Pulang Cepat'] }} {{ $rekap['Belum Finger In'] }} {{ $rekap['Belum Finger Out'] }} {{ $rekap['total'] }} {{ $rekap['jumlah_jadwal'] ?? 0 }} @if (isset($rekap['persentase'])) {{ number_format($rekap['persentase'], 2) }}% @else - @endif
Total{{ $totals['Scan Normal'] }} {{ $totals['Terlambat'] }} {{ $totals['Pulang Cepat'] }} {{ $totals['Belum Finger In'] }} {{ $totals['Belum Finger Out'] }} {{ $totals['total'] }} {{ $totalKapasitas }} @if ($totalKapasitas > 0) @php $persenTotal = round(min(100, ($totals['total'] / $totalKapasitas) * 100), 2); @endphp {{ number_format($persenTotal, 2) }}% @else - @endif
Catatan: Absensi yang Terlambat dan Pulang Cepat dengan durasi kehadiran ≥ 4 jam tetap dihitung sebagai kehadiran.
@include('report.rptabs.picker') @push('js') @endpush @endsection