role->nama_role; // Sesuaikan dengan cara Anda ambil role $notifications = []; $unreadCount = 0; // --- 1. LOGIKA NOTIFIKASI PENGURUS --- if ($userRole == 'Pengurus') { // A. Verifikasi SPP Pending $sppPending = Spp::where('status', 'pending')->count(); if ($sppPending > 0) { $notifications[] = [ 'icon' => 'bi-cash-stack text-warning', 'title' => 'Verifikasi SPP', 'msg' => "Ada $sppPending bukti bayar menunggu validasi.", 'link' => route('spp.index') ]; } // B. Verifikasi Anggota Baru (Pendaftar) $anggotaBaru = Anggota::where('status', 'Pending')->count(); if ($anggotaBaru > 0) { $notifications[] = [ 'icon' => 'bi-person-plus text-primary', 'title' => 'Verifikasi Anggota', 'msg' => "Ada $anggotaBaru calon anggota baru perlu divalidasi.", 'link' => route('anggota.anggota') ]; } // C. Kandidat Pelatih Baru (Kriteria: Usia >= 18 & Tingkatan Balik 1) // Kita hitung menggunakan Carbon untuk tanggal lahir $kandidatPelatih = Anggota::where('tingkatan', 'Balik 1') ->where('status', 'Aktif') ->where('tgl_lahir', '<=', Carbon::now()->subYears(18)) ->count(); if ($kandidatPelatih > 0) { $notifications[] = [ 'icon' => 'bi-star-fill text-info', 'title' => 'Kandidat Pelatih', 'msg' => "Ada $kandidatPelatih anggota Balik 1 berusia 18th siap jadi Pelatih.", 'link' => route('anggota.anggota') // Bisa diarahkan ke daftar anggota filter Balik 1 ]; } // D. Peringatan Saldo Kas Kritis (< 500rb) $saldo = Kas::sum('nominal'); if ($saldo < 500000) { $notifications[] = [ 'icon' => 'bi-exclamation-triangle text-danger', 'title' => 'Peringatan Saldo', 'msg' => "Saldo Kas Cabang kritis: Rp " . number_format($saldo, 0, ',', '.'), 'link' => route('kas.index') ]; } } // --- LOGIKA NOTIFIKASI PELATIH --- if ($userRole == 'Pelatih') { $jadwalHariIni = Jadwal::whereDate('tanggal', date('Y-m-d'))->count(); if ($jadwalHariIni > 0) { $notifications[] = [ 'icon' => 'bi-calendar-event text-primary', 'title' => 'Jadwal Latihan', 'message' => "Anda memiliki $jadwalHariIni jadwal hari ini.", 'link' => route('jadwal.index') ]; $unreadCount += 1; } } // --- LOGIKA NOTIFIKASI ANGGOTA --- if ($userRole == 'Anggota') { $sppSaya = Spp::where('anggota_id', $user->anggota->id) ->where('status', 'belum_lunas')->count(); if ($sppSaya > 0) { $notifications[] = [ 'icon' => 'bi-cash-stack text-danger', 'title' => 'Tagihan SPP', 'message' => "Anda memiliki $sppSaya tagihan belum terbayar.", 'link' => route('spp.anggota.index') ]; $unreadCount += 1; } } // Kirim data ke SEMUA View $view->with('globalNotifications', $notifications); $view->with('globalUnreadCount', $unreadCount); } }); } }