@php $users_rules = $users_rules ?? []; $gmenu = $gmenu ?? collect(); $url_menu = $url_menu ?? ''; $title_group = $title_group ?? ''; $isAdminUser = in_array('admins', $users_rules, true) || in_array('admin', $users_rules, true); $isHeadUser = in_array('headxx', $users_rules, true) || in_array('head', $users_rules, true); $normalizedRules = array_map(fn ($role) => strtolower(trim((string) $role)), $users_rules); $isUserMenuUser = in_array('usersx', $normalizedRules, true); $puMenuKeys = ['truser', 'trreq', 'trhrd', 'trpetn']; $puMenuUrls = ['user', 'pengajuan', 'pengajuan-hrd', 'pekerjaan-nonperiodic']; $sidebarUser = $user_login ?? auth()->user(); $puNotificationCount = 0; if ($sidebarUser && \Illuminate\Support\Facades\Schema::hasTable('tr_non_periodic')) { $sidebarRoles = array_filter(array_map(fn ($role) => strtolower(trim($role)), explode(',', (string) ($sidebarUser->idroles ?? '')))); $notificationQuery = DB::table('tr_non_periodic')->where('is_active', '1'); if (array_intersect($sidebarRoles, ['admins', 'admin'])) { $puNotificationCount = $notificationQuery->where(function ($query) { $query->where(fn ($q) => $q->whereIn('request_status', ['pending', 'review'])->whereNull('head_approval_date')) ->orWhere(fn ($q) => $q->whereIn('request_status', ['pending', 'review', 'approved'])->whereNotNull('head_approval_date')->whereNull('hrd_approval_date')) ->orWhereIn('request_status', ['pengadaan', 'pengerjaan', 'revisi', 'verifikasi']); })->count(); } elseif (array_intersect($sidebarRoles, ['headxx', 'head'])) { $headDepartmentIds = DB::table('ms_department') ->where('head_user_id', $sidebarUser->id)->where('is_active', '1')->pluck('id'); if ($headDepartmentIds->isEmpty()) { $headDepartmentIds = DB::table('ms_employee')->where('user_id', $sidebarUser->id) ->where('is_active', '1')->whereNotNull('departemen_id')->pluck('departemen_id'); } if ($headDepartmentIds->isNotEmpty()) { if (\Illuminate\Support\Facades\Schema::hasColumn('tr_non_periodic', 'request_departemen_id')) { $notificationQuery->whereIn('request_departemen_id', $headDepartmentIds); } else { $departmentUsers = DB::table('ms_employee') ->join('users', 'ms_employee.user_id', '=', 'users.id') ->whereIn('ms_employee.departemen_id', $headDepartmentIds) ->where('ms_employee.is_active', '1') ->select('users.id', 'users.username') ->get(); $requesterIds = $departmentUsers->pluck('id'); $requesterUsernames = $departmentUsers->pluck('username') ->filter()->map(fn ($username) => strtolower((string) $username)); $notificationQuery->where(function ($query) use ($requesterIds, $requesterUsernames) { $query->whereIn('user_id', $requesterIds) ->orWhereIn(DB::raw('LOWER(user_id)'), $requesterUsernames) ->orWhereIn(DB::raw('LOWER(user_create)'), $requesterUsernames); }); } $puNotificationCount = $notificationQuery ->whereIn('request_status', ['pending', 'review']) ->whereNull('head_approval_date')->count(); } } elseif (array_intersect($sidebarRoles, ['hrdxxx', 'hrd'])) { $puNotificationCount = $notificationQuery->whereIn('request_status', ['pending', 'review', 'approved']) ->whereNotNull('head_approval_date')->whereNull('hrd_approval_date')->count(); } elseif (array_intersect($sidebarRoles, ['ptgspu', 'ptgoff'])) { $notificationQuery->whereIn('request_status', ['pengadaan', 'pengerjaan', 'revisi']); if (in_array('ptgoff', $sidebarRoles, true) && !in_array('ptgspu', $sidebarRoles, true)) { $notificationQuery->where('worker_id', $sidebarUser->id); } $puNotificationCount = $notificationQuery->count(); } else { $sidebarUsername = strtolower(trim((string) ($sidebarUser->username ?? ''))); $puNotificationCount = $notificationQuery->where('request_status', 'verifikasi') ->where(function ($query) use ($sidebarUser, $sidebarUsername) { $query->where('user_id', $sidebarUser->id) ->orWhereRaw('LOWER(user_id) = ?', [$sidebarUsername]) ->orWhereRaw('LOWER(user_create) = ?', [$sidebarUsername]); })->count(); } } $menuNotificationCount = function ($menu) use ($puMenuKeys, $puNotificationCount) { if (in_array($menu->dmenu ?? '', $puMenuKeys, true)) return $puNotificationCount; if (empty($menu->notif)) return 0; return (int) (DB::select($menu->notif)[0]->notif ?? 0); }; $preferredPuMenu = function ($menuItems) use ($normalizedRules) { $preferredOrder = ['truser', 'trreq', 'trpetn', 'trhrd']; if (in_array('headxx', $normalizedRules, true)) { $preferredOrder = ['trreq', 'truser', 'trpetn', 'trhrd']; } if (in_array('ptgspu', $normalizedRules, true) || in_array('ptgoff', $normalizedRules, true)) { $preferredOrder = ['trpetn', 'truser', 'trreq', 'trhrd']; } if (in_array('admins', $normalizedRules, true) || in_array('admin', $normalizedRules, true) || in_array('hrdxxx', $normalizedRules, true) || in_array('hrd', $normalizedRules, true) || in_array('usersx', $normalizedRules, true)) { $preferredOrder = ['truser', 'trreq', 'trhrd', 'trpetn']; } foreach ($preferredOrder as $dmenu) { $candidate = $menuItems->firstWhere('dmenu', $dmenu); if ($candidate) { return $candidate; } } return $menuItems->first(); }; $collapsePuMenus = function ($menuItems) use ($puMenuKeys, $preferredPuMenu) { if (! $menuItems instanceof \Illuminate\Support\Collection) { return $menuItems; } $puItems = $menuItems->filter(function ($item) use ($puMenuKeys) { return in_array($item->dmenu ?? '', $puMenuKeys, true); })->values(); if ($puItems->isEmpty()) { return $menuItems; } $selectedPu = clone $preferredPuMenu($puItems); $selectedPu->name = 'Daftar PU'; $selectedPu->icon = 'ni-bullet-list-67'; $insertedPu = false; return $menuItems->filter(function ($item) use ($puMenuKeys, &$insertedPu, $selectedPu) { if (! in_array($item->dmenu ?? '', $puMenuKeys, true)) { return true; } if ($insertedPu) { return false; } $item->dmenu = $selectedPu->dmenu; $item->name = $selectedPu->name; $item->url = $selectedPu->url; $item->icon = $selectedPu->icon; $item->notif = $selectedPu->notif ?? ''; $insertedPu = true; return true; })->values(); }; $reorderAdminDailyHrdMenu = function ($menuItems) use ($isAdminUser) { if (! $isAdminUser || ! $menuItems instanceof \Illuminate\Support\Collection) { return $menuItems; } $periodicIndex = $menuItems->search(function ($item) { return strtolower(trim((string) ($item->name ?? ''))) === 'daftar periodic hrd'; }); $dailyIndex = $menuItems->search(function ($item) { return strtolower(trim((string) ($item->name ?? ''))) === 'pekerjaan daily hrd'; }); if ($periodicIndex === false || $dailyIndex === false || $dailyIndex === $periodicIndex + 1) { return $menuItems; } $dailyItem = $menuItems->pull($dailyIndex); if ($dailyItem === null) { return $menuItems; } $periodicIndex = $menuItems->search(function ($item) { return strtolower(trim((string) ($item->name ?? ''))) === 'daftar periodic hrd'; }); if ($periodicIndex === false) { $menuItems->push($dailyItem); return $menuItems; } $menuItems->splice($periodicIndex + 1, 0, [$dailyItem]); return $menuItems->values(); }; $getMenuName = function ($d) use ($isAdminUser) { if (($d->dmenu ?? '') === 'truser') { return 'Daftar PU'; } if (($d->name ?? '') === 'Daftar PU') { return 'Daftar PU'; } return $d->name ?? ''; }; $getMenuIcon = function ($d) { if (($d->dmenu ?? '') === 'truser') { return 'ni-bullet-list-67'; } return $d->icon ?? ''; }; $isMenuActive = function ($d) use ($url_menu, $puMenuKeys, $puMenuUrls) { if (in_array($d->dmenu ?? '', $puMenuKeys, true)) { return in_array($url_menu, $puMenuUrls, true); } return ($d->url ?? '') === $url_menu; }; $shouldRenderAsStandalonePuMenu = function ($menuItems) use ($isAdminUser, $puMenuKeys) { if ($isAdminUser || ! $menuItems instanceof \Illuminate\Support\Collection) { return false; } return $menuItems->count() === 1 && in_array($menuItems->first()->dmenu ?? '', $puMenuKeys, true); }; @endphp
main_logo {{ @$setup_app->appname }}

    {{-- Dashboard Petugas Link --}} @if (in_array('ptgoff', $users_rules, true) || in_array('ptgspu', $users_rules, true))
  • Dashboard Petugas
  • @endif @if ($isUserMenuUser) @php $flatMenuItems = DB::table('sys_dmenu') ->join('sys_auth', 'sys_dmenu.dmenu', '=', 'sys_auth.dmenu') ->whereIn('sys_auth.idroles', $users_rules) ->where('sys_dmenu.isactive', '1') ->where('sys_dmenu.show', '1') ->where('sys_auth.isactive', '1') ->select('sys_dmenu.*') ->distinct() ->orderBy('sys_dmenu.urut', 'asc') ->get(); @endphp @foreach ($flatMenuItems as $d)
  • {{ $getMenuName($d) }} @if (($notif = $menuNotificationCount($d)) > 0) {{ $notif }} @endif
  • @endforeach @elseif ($isHeadUser) @php $headMenuItems = DB::table('sys_dmenu') ->join('sys_auth', 'sys_dmenu.dmenu', '=', 'sys_auth.dmenu') ->whereIn('sys_auth.idroles', $users_rules) ->where('sys_dmenu.isactive', '1') ->where('sys_dmenu.show', '1') ->where('sys_auth.isactive', '1') ->whereIn('sys_dmenu.dmenu', ['trreq', 'trhis']) ->select('sys_dmenu.*') ->distinct() ->orderBy('sys_dmenu.urut', 'asc') ->get(); @endphp @foreach ($headMenuItems as $d)
  • {{ $getMenuName($d) }} @if (($notif = $menuNotificationCount($d)) > 0) {{ $notif }} @endif
  • @endforeach @else {{-- LOOPING GMENU --}} @foreach ($gmenu as $g) @if ($g->gmenu == 'blankx') {{-- Query DMenu --}} @php $querydmenu = DB::table('sys_dmenu') ->join('sys_auth', 'sys_dmenu.dmenu', '=', 'sys_auth.dmenu') ->whereIn('sys_auth.idroles', $users_rules) ->where('sys_dmenu.isactive', '1') ->where('sys_dmenu.show', '1') ->where('sys_auth.isactive', '1') ->where('sys_dmenu.gmenu', $g->gmenu) ->select('sys_dmenu.*') ->distinct() ->orderBy('sys_dmenu.urut', 'asc') ->get(); $querydmenu = $reorderAdminDailyHrdMenu($querydmenu); $querydmenu = $collapsePuMenus($querydmenu); @endphp @if ($shouldRenderAsStandalonePuMenu($querydmenu)) @php $d = $querydmenu->first(); @endphp
  • {{ $getMenuName($d) }} @if (($notif = $menuNotificationCount($d)) > 0) {{ $notif }} @endif
  • @else @foreach ($querydmenu as $d)
  • {{ $getMenuName($d) }} {{-- check query notif --}} @if (($notif = $menuNotificationCount($d)) > 0) {{ $notif }} @endif
  • @endforeach @endif @else @php $querydmenu = DB::table('sys_dmenu') ->join('sys_auth', 'sys_dmenu.dmenu', '=', 'sys_auth.dmenu') ->whereIn('sys_auth.idroles', $users_rules) ->where('sys_dmenu.isactive', '1') ->where('sys_dmenu.show', '1') ->where('sys_auth.isactive', '1') ->where('sys_dmenu.gmenu', $g->gmenu) ->select('sys_dmenu.*') ->distinct() ->orderBy('sys_dmenu.urut', 'asc') ->get(); $querydmenu = $reorderAdminDailyHrdMenu($querydmenu); $querydmenu = $collapsePuMenus($querydmenu); $groupNotificationCount = $querydmenu->sum(function ($menu) use ($menuNotificationCount) { return $menuNotificationCount($menu); }); @endphp @if ($shouldRenderAsStandalonePuMenu($querydmenu)) @php $d = $querydmenu->first(); @endphp
  • {{ $getMenuName($d) }} @if (($notif = $menuNotificationCount($d)) > 0) {{ $notif }} @endif
  • @elseif ($querydmenu->isNotEmpty())
  • name == $title_group ? 'aria-expanded=true' : '' }}>
    {{ $g->name }} @if ($groupNotificationCount > 0) {{ $groupNotificationCount }} @endif
      @foreach ($querydmenu as $d)
    • {{ $getMenuName($d) }} {{-- check query notif --}} @if (($notif = $menuNotificationCount($d)) > 0) {{ $notif }} @endif
    • @endforeach
  • @endif @endif @endforeach @endif