main_logo {{ @$setup_app->appname }}

    {{-- LOOPING GMENU --}} @foreach ($gmenu as $g) @if ($g->gmenu == 'blankx') {{-- ====== GMENU TIPE BLANK ====== --}} @php $querydmenu = DB::table('sys_dmenu') ->join('sys_auth', 'sys_dmenu.dmenu', '=', 'sys_auth.dmenu') ->whereIn('sys_auth.idroles', (array) $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(); @endphp @foreach ($querydmenu as $d)
  • {{ $d->name }} {{-- NOTIF GENERIK DARI QUERY sys_dmenu.notif (jika ada) --}} @if ($d->notif != '') @php $notif = 0; $data_notif = DB::select($d->notif); if (!empty($data_notif)) { $row = (array) $data_notif[0]; $notif = (int) ($row['notif'] ?? 0); } @endphp @if ($notif > 0) {{ $notif }} @endif @endif
  • @endforeach @else {{-- ====== GMENU COLLAPSIBLE (mis. trperm) ====== --}}
  • name == $title_group ? 'aria-expanded=true' : '' }}>
    {{ $g->name }}
      @php $querydmenu = DB::table('sys_dmenu') ->join('sys_auth', 'sys_dmenu.dmenu', '=', 'sys_auth.dmenu') ->whereIn('sys_auth.idroles', (array) $users_rules) ->where('sys_dmenu.isactive', '1') ->where('sys_dmenu.show', '1') ->where('sys_auth.isactive', '1') ->where('sys_dmenu.gmenu', $g->gmenu) // <-- di sini bisa 'trperm' ->select('sys_dmenu.*') ->distinct() ->orderBy('sys_dmenu.urut', 'asc') ->get(); // data user (untuk filter notifikasi trapro) $login = DB::table('users')->where('username', session('username'))->first(); $userId = $login->id ?? null; $role = $login->idroles ?? null; // optional filter status via URL ?status=E,B,R $statusParam = request()->input('status'); $statusFilter = $statusParam ? (is_array($statusParam) ? $statusParam : array_map('trim', explode(',', $statusParam))) : null; @endphp @foreach ($querydmenu as $d) @php $badgeCount = 0; // normalisasi roles $rolesArr = array_filter( array_map('trim', explode(',', strtolower($role ?? ''))), ); $notifTrapro = 0; if ($g->gmenu === 'trperm') { // === APPROVAL (TRAPRO) === if ($d->dmenu === 'trapro') { $q = DB::table('trs_permit')->where('isactive', '1'); if (!empty($statusFilter)) { $q->whereIn('status', $statusFilter); } $q->where(function ($qq) use ($rolesArr, $userId) { // ADMIN if (array_intersect($rolesArr, ['admins', 'admnk3', 'admmis'])) { $qq->orWhere(function ($sub) { $sub->where('approval_pic_area', 'TR') ->where('approval_pic_kerja', 'TR') ->whereIn('approval_k3', ['P', 'T']) ->where('status', 'P'); }); } // PICKER if (in_array('picker', $rolesArr)) { $qq->orWhere(function ($sub) use ($userId) { $sub->where('pic_kerja', $userId) ->whereIn('approval_pic_kerja', ['P', 'T']) ->where('status', 'P'); }); } // PIC AREA if (in_array('picare', $rolesArr)) { $qq->orWhere(function ($sub) use ($userId) { $sub->where('pic_area', $userId) ->whereIn('approval_pic_area', ['P', 'T']) ->where('approval_pic_kerja', 'TR') ->where('status', 'P'); }); } }); $notifTrapro = $q->count(); } // === MELENGKAPI (TRPERE) === elseif ($d->dmenu === 'trpere') { $q = DB::table('trs_permit')->where('isactive', '1'); if (!empty($statusFilter)) { $q->whereIn('status', $statusFilter); } $q->where(function ($qq) use ($rolesArr) { if (array_intersect($rolesArr, ['admins', 'admnk3', 'admmis'])) { $qq->orWhere(function ($sub) { $sub->where('ajukan_melengkapi', '1')->where('status', 'B'); }); } }); $notifTrapro = $q->count(); } // === SELESAI PERMIT (TRPERS) === elseif ($d->dmenu === 'trpers') { $q = DB::table('trs_permit')->where('isactive', '1'); if (!empty($statusFilter)) { $q->whereIn('status', $statusFilter); } $q->where(function ($qq) use ($rolesArr, $userId) { if (array_intersect($rolesArr, ['admins', 'admnk3', 'admmis'])) { $qq->orWhere(function ($sub) { $sub->where('ajukan_selesai', '1') ->where('picker_setuju_selesai', 'TR') ->where('picare_setuju_selesai', 'TR') ->whereIn('k3_setuju_selesai', ['P', 'T']); }); } if (in_array('picare', $rolesArr)) { $qq->orWhere(function ($sub) use ($userId) { $sub->where('pic_area', $userId) ->where('ajukan_selesai', '1') ->where('picker_setuju_selesai', 'TR') ->whereIn('picare_setuju_selesai', ['P', 'T']); }); } if (in_array('picker', $rolesArr)) { $qq->orWhere(function ($sub) use ($userId) { $sub->where('pic_kerja', $userId) ->where('ajukan_selesai', '1') ->whereIn('picker_setuju_selesai', ['P', 'T']); }); } }); $notifTrapro = $q->count(); } } // === PENILAIAN PERMIT (TRNILA) === elseif ($d->dmenu === 'trnila') { $q = DB::table('trs_permit as p') ->where('p.isactive', '1') ->whereRaw('UPPER(TRIM(p.jenis)) = ?', ['EKSTERNAL']) // Jangan tampilkan permit lama kalau sudah ada perpanjangan baru ->whereNotExists(function ($sub) { $sub->select(DB::raw(1)) ->from('trs_permit as child') ->whereColumn('child.id_original_perpanjang', 'p.id') ->where('child.isactive', '1'); }) // Permit selesai atau permit berlaku tapi sudah expired ->where(function ($sub) { $sub->where('p.status', 'S')->orWhere(function ($sub2) { $sub2 ->where('p.status', 'B') ->whereDate('p.masa_berlaku', '<=', now()); }); }) // Belum dinilai / perlu penilaian ulang ->whereIn('p.status_nilai', ['P', 'B']); $notifTrapro = $q->count(); } // === HISTORY PENILAIAN / BELUM FINISH (THSTRY) === elseif ($d->dmenu === 'thstry') { $q = DB::table('trs_permit_penilaian as pp') ->leftJoin('trs_permit as p', 'p.id', '=', 'pp.id_trs_permit') ->where('pp.status', 'E'); if (Schema::hasColumn('trs_permit_penilaian', 'isactive')) { $q->where('pp.isactive', '1'); } $q->whereRaw('UPPER(TRIM(p.jenis)) = ?', ['EKSTERNAL']); $notifTrapro = $q->count(); } // notif generik opsional $notifFromQuery = 0; if (!empty($d->notif)) { $rows = DB::select($d->notif); if (!empty($rows)) { $notifFromQuery = (int) ((array) $rows[0])['notif'] ?? 0; } } $badgeCount = $notifTrapro > 0 ? $notifTrapro : $notifFromQuery; @endphp
    • {{ $d->name }} {{-- Tampilkan badge jika ada --}} @if ($badgeCount > 0) {{ $badgeCount }} @endif
    • @endforeach
  • @endif @endforeach