Butuh Approve

@if ($builderMode)
@endif

{{ number_format($usersCount) }}

Users

{{ number_format($rolesCount) }}

Roles

{{ number_format($menusCount) }}

Menus ({{ $activeMenusCount }} active)

{{ number_format($permissionsCount) }}

Permissions

@if ($canSeeLoginReset ?? false)

{{ number_format((int) ($pendingLoginResetCount ?? 0)) }}

Pending Login Reset

@endif

Range Date

@if ($builderMode)
@endif
@foreach (request()->except(['range_from', 'range_to', 'include_expired_contracts']) as $k => $v) @if (is_scalar($v)) @endif @endforeach
Grafik dan total mengikuti range ini.

Karyawan Perlu Kontrak Baru

@if ($builderMode)
@endif
@php $cr = $contractRenewal ?? []; $daysTh = (int) ($cr['days_threshold'] ?? 30); $expired = (int) ($cr['expired'] ?? 0); $soon = (int) ($cr['expiring_soon'] ?? 0); $total = (int) ($cr['total_need_action'] ?? 0); $top = is_array($cr['top_expiring'] ?? null) ? $cr['top_expiring'] : []; @endphp @if (!empty($top))
Akan habis (top)
@foreach ($top as $r) @endforeach
Karyawan End Sisa
{{ $r['employee_code'] ?? '-' }} - {{ $r['full_name'] ?? '-' }} {{ $r['contract_end_date'] ?? '-' }} {{ isset($r['days_left']) ? ($r['days_left'] . ' hari') : '-' }}
@endif
Kriteria: karyawan aktif dengan contract_end_date sudah lewat (expired) atau akan habis dalam {{ $daysTh }} hari.

Perbandingan Bulanan Request (6 Bulan)

@if ($builderMode)
@endif
@php $mLabels = is_array($monthlyCompare['labels'] ?? null) ? $monthlyCompare['labels'] : []; $mLembur = is_array($monthlyCompare['lembur'] ?? null) ? $monthlyCompare['lembur'] : []; $mFc = is_array($monthlyCompare['forgetting_clock'] ?? null) ? $monthlyCompare['forgetting_clock'] : []; $mLeave = is_array($monthlyCompare['leave'] ?? null) ? $monthlyCompare['leave'] : []; $mMax = 0; foreach ($mLabels as $i => $_) { $t = (int) ($mLembur[$i] ?? 0) + (int) ($mFc[$i] ?? 0) + (int) ($mLeave[$i] ?? 0); $mMax = max($mMax, $t); } if ($mMax <= 0) $mMax = 1; @endphp
Lembur FC Leave
@foreach ($mLabels as $i => $lab) @php $l = (int) ($mLembur[$i] ?? 0); $f = (int) ($mFc[$i] ?? 0); $lv = (int) ($mLeave[$i] ?? 0); $t = $l + $f + $lv; $lp = max(0, min(100, round(($l / $mMax) * 100, 2))); $fp = max(0, min(100, round(($f / $mMax) * 100, 2))); $lvp = max(0, min(100, round(($lv / $mMax) * 100, 2))); $barPayload = ['kind' => 'monthly_requests', 'month' => $lab, 'lembur' => $l, 'forgetting_clock' => $f, 'leave' => $lv, 'max_total' => $mMax]; @endphp
{{ $t > 0 ? number_format($t) : '' }}
@endforeach
{{ $mLabels[0] ?? '-' }} Maks: {{ $mMax }} {{ $mLabels[count($mLabels) - 1] ?? '-' }}

Karyawan Bulan Ini vs Bulan Lalu

@if ($builderMode)
@endif
@php $cur = $profilKaryawanCompare['current'] ?? ['code' => '', 'count' => 0]; $prev = $profilKaryawanCompare['previous'] ?? ['code' => '', 'count' => 0]; $delta = (int) ($profilKaryawanCompare['delta'] ?? 0); $hireThis = (int) ($newHires['this_month'] ?? 0); $hirePrev = (int) ($newHires['prev_month'] ?? 0); $hireDelta = (int) ($newHires['delta'] ?? 0); @endphp
Profil Bulan
{{ $cur['code'] ?: 'Current' }}
{{ number_format((int) ($cur['count'] ?? 0)) }}
{{ $prev['code'] ?: 'Previous' }}
{{ number_format((int) ($prev['count'] ?? 0)) }}
Delta: {{ $delta >= 0 ? '+' : '' }}{{ $delta }}

Tambahan Karyawan (Hire Date)
Bulan ini
{{ number_format($hireThis) }}
Bulan lalu
{{ number_format($hirePrev) }}
Delta: {{ $hireDelta >= 0 ? '+' : '' }}{{ $hireDelta }}

Perbandingan Bulan Ini vs Bulan Lalu

@if ($builderMode)
@endif
@php $mc = $monthCompare ?? []; $mThis = $mc['metrics']['this'] ?? null; $mPrev = $mc['metrics']['prev'] ?? null; $mm = $mc['metrics'] ?? []; @endphp
@foreach (request()->except(['compare_from', 'compare_to']) as $k => $v) @if (is_scalar($v)) @endif @endforeach
Bulan lalu otomatis: periode yang sama -1 bulan.
Periode: {{ $mc['this']['from'] ?? '-' }} s/d {{ $mc['this']['to'] ?? '-' }} dibanding {{ $mc['prev']['from'] ?? '-' }} s/d {{ $mc['prev']['to'] ?? '-' }}
@php $rows = [ ['key' => 'telat', 'label' => 'Keterlambatan (count)'], ['key' => 'hadir', 'label' => 'Kehadiran (count)'], ['key' => 'alpha', 'label' => 'Alpha (count)'], ['key' => 'cuti', 'label' => 'Cuti (request count)'], ['key' => 'hours', 'label' => 'Total Jam'], ['key' => 'salary_net', 'label' => 'Total Salary Net'], ]; @endphp @foreach ($rows as $r) @php $k = $r['key']; $thisVal = $mm[$k]['this'] ?? 0; $prevVal = $mm[$k]['prev'] ?? 0; $deltaVal = (is_numeric($thisVal) && is_numeric($prevVal)) ? ($thisVal - $prevVal) : 0; $isMoney = $k === 'salary_net'; $fmt = function ($v) use ($isMoney) { if ($isMoney) return 'Rp ' . number_format((float) $v, 0, ',', '.'); if (is_float($v) || (is_numeric($v) && str_contains((string) $v, '.'))) return number_format((float) $v, 2); return number_format((int) $v); }; @endphp @endforeach
Metric Bulan Ini Bulan Lalu Delta
{{ $r['label'] }} {{ $fmt($thisVal) }} {{ $fmt($prevVal) }} {{ $deltaVal >= 0 ? '+' : '' }}{{ $isMoney ? ('Rp ' . number_format((float) $deltaVal, 0, ',', '.')) : (is_float($deltaVal) ? number_format((float) $deltaVal, 2) : (int) $deltaVal) }}

Grafik Keterlambatan

@if ($builderMode)
@endif
@php $dates = is_array($dashSeries['dates'] ?? null) ? $dashSeries['dates'] : []; $telat = is_array($dashSeries['telat'] ?? null) ? $dashSeries['telat'] : []; $maxTelat = 0; foreach ($telat as $v) { $maxTelat = max($maxTelat, (int) $v); } if ($maxTelat <= 0) $maxTelat = 1; @endphp
@foreach ($dates as $idx => $d) @php $val = (int) ($telat[$idx] ?? 0); $pct = max(0, min(100, round(($val / $maxTelat) * 100, 2))); $label = is_string($d) && strlen($d) >= 10 ? substr($d, 8, 2) : $d; $barPayload = ['kind' => 'telat', 'date' => $d, 'telat' => $val, 'max' => $maxTelat]; @endphp
{{ $val > 0 ? number_format($val) : '' }}
@endforeach
{{ $dates[0] ?? '-' }} Maks: {{ $maxTelat }} {{ $dates[count($dates) - 1] ?? '-' }}
@include('dashboard.partials.payroll')

Department Distribution

@if ($builderMode)
@endif
@php $deptItems = collect($departmentDistribution ?? [])->values(); $deptTop = $deptItems->take(8); $deptMax = (int) ($deptItems->max('total') ?? 0); if ($deptMax <= 0) $deptMax = 1; @endphp
Top Department (Users)
@forelse ($deptTop as $item) @php $val = (int) ($item->total ?? 0); $pct = max(0, min(100, round(($val / $deptMax) * 100, 2))); @endphp
{{ $item->department_label }}
{{ number_format($val) }}
@empty
No data
@endforelse
@forelse ($departmentDistribution as $item) @empty @endforelse
Department Users
{{ $item->department_label }} {{ number_format($item->total) }}
No data

Role Access Summary

@if ($builderMode)
@endif
@php $roleItems = collect($roleAccess ?? [])->values(); $roleTop = $roleItems->take(8); $roleMax = (int) ($roleItems->max('users_count') ?? 0); if ($roleMax <= 0) $roleMax = 1; @endphp
Top Role (Users)
@forelse ($roleTop as $role) @php $val = (int) ($role->users_count ?? 0); $pct = max(0, min(100, round(($val / $roleMax) * 100, 2))); @endphp
{{ $role->name }}
{{ number_format($val) }}
@empty
No roles
@endforelse
@forelse ($roleAccess as $role) @empty @endforelse
Role Users Permissions
{{ $role->name }} {{ number_format($role->users_count) }} {{ number_format($role->permissions_count) }}
No roles

Recent Users

@if ($builderMode)
@endif
@forelse ($recentUsers as $user) @empty @endforelse
Name Email Department Roles
{{ $user->name }} {{ $user->email }} {{ $user->department ?: '-' }} {{ $user->roles->pluck('name')->implode(', ') ?: '-' }}
No users

Access Health

@if ($builderMode)
@endif
Mapped Menus {{ $mappedMenusCount }} / {{ $menusCount }}
@php $mappedPercent = $menusCount > 0 ? (int) round(($mappedMenusCount / $menusCount) * 100) : 0; @endphp
{{ $mappedPercent }}%
{{ $menusWithoutPermission > 0 ? $menusWithoutPermission . ' menus have no permissions mapped yet.' : 'All menus already have mapped permissions.' }}
@if ($builderMode) @endif

Menu Management (Module per Department)

@forelse ($menuModules as $menu) @empty @endforelse
Department Module Status
{{ $menu->department ?: '-' }} {{ $menu->name }} {{ $menu->is_active ? 'Active' : 'Inactive' }}
No modules
@if ($moduleLibraries->isNotEmpty())
@if ($builderMode) @endif

Module Library (Auto by Department)

Department: {{ $authUser?->department ?: 'All' }}
@foreach ($moduleLibraries as $library)
{{ $library->name }} @if ($library->department) {{ $library->department }} @endif
@includeIf($library->view_path, ['authUser' => $authUser, 'moduleLibrary' => $library])
@endforeach
@endif