1, 'nisn' => '1234567890', 'nama_lengkap' => 'Silvi Rahmawati', 'email' => 'silvi.rahmawati@smkn1perpus.sch.id', 'nomor_hp' => '08123456789', 'password' => 'password', 'role' => 'siswa', 'kelas' => 'XII RPL', 'golongan' => 'A', 'is_banned' => false, ], [ 'id' => 2, 'nama_lengkap' => 'Budi Santoso', 'nip' => '197812312005011', 'email' => 'budi.santoso@smkn1perpus.sch.id', 'password' => 'password', 'role' => 'penjaga perpus', ], [ 'id' => 3, 'nisn' => '9988776655', 'nama_lengkap' => 'Siti Nurhaliza', 'email' => 'siti.nurhaliza@smkn1perpus.sch.id', 'nomor_hp' => '081998877665', 'password' => 'password', 'role' => 'siswa', 'kelas' => 'XII RPL A', 'golongan' => 'A', 'is_banned' => true, ], [ 'id' => 4, 'nisn' => '5566778899', 'nama_lengkap' => 'Andi Pratama', 'email' => 'andi.pratama@smkn1perpus.sch.id', 'nomor_hp' => '081556677889', 'password' => 'password', 'role' => 'siswa', 'kelas' => 'XII RPL A', 'golongan' => 'A', 'is_banned' => false, ], [ 'id' => 5, 'nama_lengkap' => 'Rina Marlina', 'nip' => '198506152010012', 'email' => 'rina.marlina@smkn1perpus.sch.id', 'password' => 'password', 'role' => 'guru', 'is_banned' => false, ], ]; } /** * Data dummy untuk grafik aktivitas membaca mingguan di laporan guru. */ public static function getAktivitasMingguan(): array { return [ 'labels' => ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu', 'Minggu'], 'data' => [15, 22, 18, 25, 20, 30, 28], ]; } /** * Data dummy untuk tabel peminjaman aktif di dashboard admin. */ public static function getAdminPeminjamanAktif(): \Illuminate\Support\Collection { $allBooks = self::getAllBooks(); $allSiswa = collect(self::getAllSiswa()); $bukuDipinjam = $allBooks->whereIn('status', ['Dipinjam', 'Terlambat']); $grouped = $bukuDipinjam->groupBy(function ($item) { return is_array($item['user_id']) ? $item['user_id'][0] : $item['user_id']; }); return $grouped->map(function ($books, $userId) use ($allSiswa) { $siswa = $allSiswa->firstWhere('id', $userId); $firstBook = $books->first(); $tglKembali = Carbon::now()->addDays($firstBook['sisa_hari']); return [ 'id_peminjaman' => 'PIN-ADM-' . sprintf('%03d', $userId), 'user_id' => $userId, 'role' => $siswa ? $siswa['role'] : 'siswa', 'is_banned' => $siswa ? ($siswa['is_banned'] ?? false) : false, 'peminjam' => $siswa ? $siswa['nama_lengkap'] : 'User Tidak Dikenal', 'nomor_hp' => $siswa ? ($siswa['nomor_hp'] ?? '-') : '-', 'tanggal_pinjam' => Carbon::now()->subDays(7), 'tenggat_kembali' => $tglKembali, 'denda_per_hari' => 1000, 'books' => $books->map(function ($b) { return [ 'id' => $b['id'], 'judul' => $b['judul'], 'cover' => $b['cover'] ]; })->toArray() ]; })->values(); } /** *Data Dummy untuk fitur Rekomendasi Pembelajaran. */ public static function getRekomendasiPembelajaran(): \Illuminate\Support\Collection { return collect([ [ 'id' => 1, 'judul' => 'Sistem Tata Surya - Rangkuman Materi IPA Terpadu', 'kategori' => 'IPA', 'youtube_link' => 'https://www.youtube.com/watch?v=libKVRa01L8', 'deskripsi' => '
Video animasi seru yang menjelaskan tentang planet-planet di tata surya kita...
', ], [ 'id' => 2, 'judul' => 'Macam-macam Zat dan Perubahannya - IPA Kelas 7', 'kategori' => 'IPA', 'youtube_link' => 'https://www.youtube.com/watch?v=CfwPsKdC5w8', 'deskripsi' => 'Zat (materi) adalah sesuatu yang menempati ruang dan mempunyai massa...
', ], [ 'id' => 3, 'judul' => 'Sejarah Kerajaan Majapahit, Kerajaan Terbesar di Nusantara', 'kategori' => 'IPS', 'youtube_link' => 'https://www.youtube.com/watch?v=2Z9hqVqPY_s', 'deskripsi' => 'Pelajari sejarah salah satu kerajaan terbesar di Indonesia...
', ], [ 'id' => 4, 'judul' => 'Belajar HTML dari NOL untuk Pemula', 'kategori' => 'Informatika', 'youtube_link' => 'https://www.youtube.com/watch?v=NBZ9Ro6UKV8', 'deskripsi' => 'Ingin belajar membuat website? Mulai dari sini!...
', ], [ 'id' => 5, 'judul' => 'Rumus Cepat Teorema Pythagoras', 'kategori' => 'Matematika', 'youtube_link' => 'https://youtu.be/JJaptwjRbxc?si=XRxkrAf5G76iJ5CG', 'deskripsi' => 'Jangan takut lagi dengan soal Pythagoras!...
', ], [ 'id' => 6, 'judul' => 'Cara Menggambar Perspektif 1 Titik Hilang', 'kategori' => 'Seni Budaya', 'youtube_link' => 'https://youtu.be/SS7dLGDWUSs?si=lVw8jBkaWT---7ch', 'deskripsi' => 'Buat gambarmu terlihat lebih hidup dan realistis!...
', ], [ 'id' => 7, 'judul' => 'Sistem Peredaran Darah pada Manusia', 'kategori' => 'IPA', 'youtube_link' => 'https://youtu.be/QLoqMruGbkc?si=KiP5VZ4ByKSdFJK9', 'deskripsi' => 'Pahami bagaimana jantung memompa darah ke seluruh tubuh...
', ], [ 'id' => 8, 'judul' => 'Unsur-Unsur Intrinsik Cerpen', 'kategori' => 'Bahasa Indonesia', 'youtube_link' => 'https://youtu.be/PQNuvyQZYvI?si=Lr9AeTO_k6vY21ei', 'deskripsi' => 'Analisis sebuah cerita pendek menjadi lebih mudah...
', ], [ 'id' => 9, 'judul' => 'Apa itu Pemanasan Global?', 'kategori' => 'IPS', 'youtube_link' => 'https://youtu.be/pVjXm340tbw?si=GeMhYK1FSOGtV86X', 'deskripsi' => 'Mengapa suhu bumi semakin panas? Pelajari tentang penyebabnya...
', ], [ 'id' => 10, 'judul' => 'APA ITU LUBANG HITAM?', 'kategori' => 'Sains', 'youtube_link' => 'https://youtu.be/Tx87wEaDtxo?si=fNORkTYOeLiH9_xh', 'deskripsi' => 'Jelajahi salah satu objek paling misterius di alam semesta...
', ], ]); } /** * Data dummy untuk menampilkan 10 siswa paling aktif di laporan guru. */ public static function getSiswaTeraktif(): array { return [ ['nama' => 'Silvi Rahmawati', 'total_buku' => 45, 'kelas' => 'XII RPL'], ['nama' => 'Siti Nurhaliza', 'total_buku' => 33, 'kelas' => 'XII RPL A'], ['nama' => 'Andi Pratama', 'total_buku' => 30, 'kelas' => 'XII RPL B'], ['nama' => 'John Wick', 'total_buku' => 28, 'kelas' => 'XI TKJ'], ['nama' => 'Dewi Lestari', 'total_buku' => 25, 'kelas' => 'XII AKL'], ['nama' => 'Eko Prasetyo', 'total_buku' => 22, 'kelas' => 'XI MM'], ['nama' => 'Rina Marlina', 'total_buku' => 20, 'kelas' => 'XII TKJ A'], ['nama' => 'Budi Santoso', 'total_buku' => 18, 'kelas' => 'X OTKP'], ['nama' => 'Putri Amelia', 'total_buku' => 16, 'kelas' => 'XI RPL C'], ['nama' => 'Ahmad Jono', 'total_buku' => 12, 'kelas' => 'X TKJ B'], ]; } /** * Data dummy untuk halaman Laporan Minat Baca khusus Guru. */ public static function getLaporanMinatBaca(): array { return [ 'buku_terpopuler' => [ ['judul' => 'Modul Ajar IPAS', 'penulis' => 'Tim Kemdikbud Ristek', 'total_pembaca' => 125, 'cover' => 'images/covers/ipas.jpg'], ['judul' => 'Ayah', 'penulis' => 'Andrea Hirata', 'total_pembaca' => 98, 'cover' => 'images/covers/ayah.png'], ['judul' => 'Si Anak Pintar', 'penulis' => 'Tere Liye', 'total_pembaca' => 92, 'cover' => 'images/covers/sianakpintar.jpg'], ], 'kategori_populer' => [ ['nama' => 'Sains', 'total_pembaca' => 230, 'trend' => 'naik', 'icon' => 'bi-arrow-up-right'], ['nama' => 'Fiksi', 'total_pembaca' => 190, 'trend' => 'stabil', 'icon' => 'bi-arrow-right'], ['nama' => 'Pendidikan', 'total_pembaca' => 150, 'trend' => 'turun', 'icon' => 'bi-arrow-down-right'], ['nama' => 'Novel', 'total_pembaca' => 110, 'trend' => 'naik', 'icon' => 'bi-arrow-up-right'], ], 'insight' => 'Siswa menunjukkan minat baca tertinggi pada kategori Sains dan Fiksi. Buku-buku karangan Tere Liye dan Andrea Hirata masih menjadi favorit.', ]; } /** * Data dummy untuk Halaman Dashboard Statistik Petugas Perpus */ public static function getAdminDashboardStats(): array { $allBooks = self::getAllBooks(); $allUsers = self::getAllSiswa(); $bukuDipinjam = $allBooks->filter(fn($buku) => $buku['status'] === 'Dipinjam')->count(); return [ ['label' => 'Total Buku', 'value' => $allBooks->count(), 'icon' => 'bi-journal-bookmark-fill', 'color' => 'primary'], ['label' => 'Total Anggota', 'value' => count($allUsers), 'icon' => 'bi-people-fill', 'color' => 'success'], ['label' => 'Buku Dipinjam', 'value' => $bukuDipinjam, 'icon' => 'bi-arrow-up-right-circle-fill', 'color' => 'warning'], ['label' => 'Denda Menunggu', 'value' => 0, 'icon' => 'bi-cash-coin', 'color' => 'danger'], ]; } /** * Data untuk bar chart di dashboard admin (total peminjaman per bulan). */ public static function getStatistikPeminjamanAdmin(): array { return [ 'labels' => ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul'], 'data' => [65, 59, 80, 81, 56, 55, 70], ]; } /** * Data untuk donut chart di dashboard admin (komposisi buku). */ public static function getKomposisiBukuAdmin(): array { $allBooks = self::getAllBooks(); return [ 'tersedia' => $allBooks->where('status', 'Tersedia')->count(), 'dipinjam' => $allBooks->where('status', 'Dipinjam')->count(), ]; } /** * Data untuk tabel aktivitas terakhir di dashboard admin. */ public static function getAktivitasTerakhir(): array { return [ ['nama' => 'Silvi Rahmawati', 'judul_buku' => 'Perahu Kertas', 'tipe' => 'Peminjaman', 'waktu' => '5 menit yang lalu', 'status' => 'Dipinjam'], ['nama' => 'Andi Pratama', 'judul_buku' => 'The Last Spell Breather', 'tipe' => 'Pengembalian', 'waktu' => '1 jam yang lalu', 'status' => 'Dikembalikan'], ['nama' => 'Siti Nurhaliza', 'judul_buku' => 'Ayah', 'tipe' => 'Baca Online', 'waktu' => '3 jam yang lalu', 'status' => 'Selesai'], ['nama' => 'Rina Marlina', 'judul_buku' => 'Modul Ajar IPAS', 'tipe' => 'Peminjaman', 'waktu' => 'Kemarin', 'status' => 'Dipinjam'], ]; } /** * Data untuk halaman Dashboard Siswa dan Guru dengan warna spesifik. */ public static function getDashboardStats(): array { return [ ['label' => 'Buku yang dipinjam', 'value' => 3, 'icon' => 'bi-book-half', 'color' => 'primary'], ['label' => 'Tenggat Waktu', 'value' => '2', 'icon' => 'bi-clock-history', 'color' => 'danger'], ['label' => 'Buku dikembalikan', 'value' => 12, 'icon' => 'bi-check-circle', 'color' => 'success'], ['label' => 'History Baca', 'value' => 15, 'icon' => 'bi-hourglass-split', 'color' => 'warning'], ]; } /** * Data untuk pengumuman */ public static function getPengumuman(): array { $pengumuman = [ ['id' => 1, 'type' => 'warning', 'icon' => 'bi-exclamation-triangle-fill', 'title' => 'Perpustakaan Tutup', 'content' => 'Perpustakaan akan tutup pada tanggal 25 Desember untuk perayaan Natal.'], ['id' => 2, 'type' => 'info', 'icon' => 'bi-info-circle-fill', 'title' => 'Buku Baru Tersedia', 'content' => 'Edisi baru telah ditambahkan ke koleksi perpustakaan digital.'], ]; // Buat 30 data dummy tambahan dengan 'id' for ($i = 3; $i <= 32; $i++) { $pengumuman[] = ['id' => $i, 'type' => 'secondary', 'icon' => 'bi-megaphone-fill', 'title' => "Pengumuman Biasa #{$i}", 'content' => "Ini adalah isi dari pengumuman rutin nomor {$i}."]; } return $pengumuman; } /** * Data untuk pemberitahuan */ public static function getPemberitahuan(): array { $pemberitahuan = [ ['type' => 'danger', 'icon' => 'bi-exclamation-octagon', 'title' => 'Buku Akan Jatuh Tempo Besok', 'content' => 'Sejarah Indonesia Modern', 'badge' => 'Segera!'], ['type' => 'success', 'icon' => 'bi-check2-circle', 'title' => 'Peminjaman Berhasil', 'content' => 'Buku Kimia Dasar Berhasil Dipinjam', 'badge' => 'Baru'], ]; // Buat 20 data dummy tambahan for ($i = 1; $i <= 20; $i++) { $pemberitahuan[] = ['type' => 'info', 'icon' => 'bi-bell-fill', 'title' => "Notifikasi Sistem #{$i}", 'content' => "Pemberitahuan sistem terjadwal nomor {$i}.", 'badge' => 'Info']; } return $pemberitahuan; } /** * Data untuk progress membaca (donut chart) */ public static function getProgressMembaca(): array { return ['selesai' => 70, 'sisa' => 30]; } /** * Data untuk statistik bulanan (bar chart) */ public static function getStatistikBulanan(): array { return [ 'labels' => ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul'], 'data' => [10, 15, 8, 20, 18, 25, 22], ]; } /** * Master list untuk semua buku * @return \Illuminate\Support\Collection */ public static function getAllBooks() { return collect([ // --- BUKU MILIK USER 1 (SILVI) --- [ 'id' => 1, 'judul' => 'Modul Ajar IPAS', 'penulis' => 'Tim Kemdikbud Ristek', 'cover' => 'images/covers/ipas.jpg', 'kode_buku' => '510', 'kategori' => 'Sains', 'tahun' => 2022, 'status' => 'Dipinjam', 'is_new' => true, 'tipe_akses' => ['online', 'offline'], 'sisa_hari' => -5, 'user_id' => 1, ], [ 'id' => 2, 'judul' => 'Perahu Kertas', 'penulis' => 'Dewi Lestari', 'cover' => 'images/covers/ayah.png', 'kode_buku' => '844', 'kategori' => 'Fiksi', 'tahun' => 2012, 'status' => 'Dipinjam', 'is_new' => false, 'tipe_akses' => 'offline', 'sisa_hari' => 3, 'user_id' => 1, ], // --- BUKU TERSEDIA (UNTUK CEK PEMINJAMAN BARU) --- [ 'id' => 3, 'judul' => 'Si Anak Pintar', 'penulis' => 'Tere Liye', 'cover' => 'images/covers/sianakpintar.jpg', 'kode_buku' => '843', 'kategori' => 'Fiksi', 'tahun' => 2018, 'status' => 'Tersedia', 'is_new' => true, 'tipe_akses' => 'offline', 'sisa_hari' => 0, 'user_id' => null, ], [ 'id' => 4, 'judul' => 'Laskar Pelangi', 'penulis' => 'Andrea Hirata', 'cover' => 'https://upload.wikimedia.org/wikipedia/id/8/8e/Laskar_pelangi_sampul.jpg', 'kode_buku' => 'NOV-001', 'kategori' => 'Novel', 'tahun' => 2005, 'status' => 'Tersedia', 'is_new' => false, 'tipe_akses' => 'offline', 'sisa_hari' => 0, 'user_id' => null, ], [ 'id' => 5, 'judul' => 'Filosofi Teras', 'penulis' => 'Henry Manampiring', 'cover' => 'https://upload.wikimedia.org/wikipedia/id/3/36/Filosofi_Teras.jpg', 'kode_buku' => 'PSI-002', 'kategori' => 'Psikologi', 'tahun' => 2018, 'status' => 'Tersedia', 'is_new' => true, 'tipe_akses' => 'offline', 'sisa_hari' => 0, 'user_id' => null, ], [ 'id' => 6, 'judul' => 'Atomic Habits', 'penulis' => 'James Clear', 'cover' => 'https://images-na.ssl-images-amazon.com/images/I/91bYsX41DVL.jpg', 'kode_buku' => 'SELF-003', 'kategori' => 'Refleksi Diri', 'tahun' => 2018, 'status' => 'Tersedia', 'is_new' => true, 'tipe_akses' => ['offline', 'online'], 'sisa_hari' => 0, 'user_id' => null, ], [ 'id' => 7, 'judul' => 'Bumi Manusia', 'penulis' => 'Pramoedya Ananta Toer', 'cover' => 'https://upload.wikimedia.org/wikipedia/id/4/44/Bumi_Manusia.jpg', 'kode_buku' => 'SAS-004', 'kategori' => 'Sastra', 'tahun' => 1980, 'status' => 'Tersedia', 'is_new' => false, 'tipe_akses' => 'offline', 'sisa_hari' => 0, 'user_id' => null, ], [ 'id' => 8, 'judul' => 'Laut Bercerita', 'penulis' => 'Leila S. Chudori', 'cover' => 'https://upload.wikimedia.org/wikipedia/id/6/6d/Laut_Bercerita.jpeg', 'kode_buku' => 'NOV-005', 'kategori' => 'Novel', 'tahun' => 2017, 'status' => 'Tersedia', 'is_new' => true, 'tipe_akses' => 'offline', 'sisa_hari' => 0, 'user_id' => null, ], // --- BUKU MILIK USER 3 (SITI) - TELAT --- [ 'id' => 99, 'judul' => 'Seni Berbicara', 'penulis' => 'Larry King', 'cover' => 'https://via.placeholder.com/150', 'kode_buku' => 'COM-001', 'kategori' => 'Refleksi Diri', 'tahun' => 2019, 'status' => 'Dipinjam', 'is_new' => false, 'tipe_akses' => 'offline', 'sisa_hari' => -2, 'user_id' => 3, ], // --- BUKU MILIK GURU (USER 5) - TESTING MANUAL BAN --- [ 'id' => 88, 'judul' => 'Strategi Pembelajaran Abad 21', 'penulis' => 'Prof. Dr. Pendidikan', 'cover' => 'https://via.placeholder.com/150', 'kode_buku' => 'GURU-001', 'kategori' => 'Pendidikan', 'tahun' => 2020, 'status' => 'Dipinjam', 'is_new' => false, 'tipe_akses' => 'offline', 'sisa_hari' => -3, 'user_id' => 5, ], ]); } /** * Data untuk buku pinjam offline */ public static function getBukuPinjamOffline($user): array { return self::getAllBooks() ->filter(function ($buku) { // Handle tipe akses string atau array if (is_array($buku['tipe_akses'])) { return in_array('offline', $buku['tipe_akses']); } return $buku['tipe_akses'] === 'offline'; }) ->filter(function ($buku) use ($user) { if (!isset($buku['user_id']) || $buku['user_id'] === null) return false; if (is_array($buku['user_id'])) { return in_array($user->id, $buku['user_id']); } return $buku['user_id'] == $user->id; }) ->map(fn($buku) => [ 'judul' => $buku['judul'], 'penulis' => $buku['penulis'], 'sisa_hari' => $buku['sisa_hari'], 'cover' => $buku['cover'], ]) ->values() ->all(); } /** * Data untuk baca buku online */ public static function getBacaBukuOnline($user): array { return self::getAllBooks() ->where('tipe_akses', 'online') ->filter(function ($buku) use ($user) { if (!isset($buku['user_id'])) return false; if (is_array($buku['user_id'])) { return in_array($user->id, $buku['user_id']); } return $buku['user_id'] == $user->id; }) ->map(fn($buku) => [ 'judul' => $buku['judul'], 'penulis' => $buku['penulis'], 'progress' => $buku['progress'], 'cover' => $buku['cover'], ]) ->values() ->all(); } /** * Mengambil daftar buku untuk katalog dengan filter. */ public static function getKatalogBuku(array $filters = []): \Illuminate\Support\Collection { $buku = self::getAllBooks(); $buku = $buku->when($filters['search'] ?? null, function ($query, $search) { return $query->filter(fn($item) => str_contains(strtolower($item['judul']), strtolower($search))); })->when($filters['kategori'] ?? null, function ($query, $kategori) { return $query->where('kategori', $kategori); })->when($filters['tahun'] ?? null, function ($query, $tahun) { return $query->where('tahun', $tahun); })->when($filters['penulis'] ?? null, function ($query, $penulis) { return $query->where('penulis', $penulis); }) ->when($filters['tipe_akses'] ?? null, function ($query, $tipe) { if ($tipe === 'offline') { return $query->filter(function ($buku) { return $buku['tipe_akses'] === 'offline' || (is_array($buku['tipe_akses']) && in_array('offline', $buku['tipe_akses'])); }); } if ($tipe === 'online') { return $query->filter(function ($buku) { return $buku['tipe_akses'] === 'online' || (is_array($buku['tipe_akses']) && in_array('online', $buku['tipe_akses'])); }); } return $query; }) ->sortByDesc('status'); return $buku; } /** * Method baru untuk mengambil daftar unik untuk dropdown filter */ public static function getFilterOptions(): array { $buku = self::getAllBooks(); return [ 'kategori' => $buku->pluck('kategori')->unique()->sort()->values(), 'tahun' => $buku->pluck('tahun')->unique()->sortDesc()->values(), 'penulis' => $buku->pluck('penulis')->unique()->sort()->values(), ]; } /** * Data untuk riwayat peminjaman offline. * Setiap item mewakili satu transaksi peminjaman. */ public static function getRiwayatOffline($user): array { $allBooks = self::getAllBooks(); $myBooks = $allBooks->filter(function ($buku) use ($user) { if (is_array($buku['user_id'])) { return in_array($user->id, $buku['user_id']); } return $buku['user_id'] == $user->id; })->whereIn('status', ['Dipinjam', 'Dikembalikan', 'Terlambat']); // Mapping ke format tampilan View return $myBooks->map(function ($buku, $index) { // Logika Tanggal Dummy $tglPinjam = Carbon::now()->subDays(7); // Hitung tanggal kembali berdasarkan sisa hari di Master Data $tglKembali = Carbon::now()->addDays($buku['sisa_hari']); return [ 'id' => $index + 1, 'id_peminjaman' => 'PIN-' . date('Ym') . '-' . sprintf('%03d', $buku['id']), 'kode_buku' => $buku['kode_buku'], 'judul_utama' => $buku['judul'], 'tanggal_pinjam' => $tglPinjam->format('d/m/Y'), 'tanggal_kembali' => $tglKembali->format('d/m/Y'), 'status' => $buku['status'], 'books' => [ [ 'id' => $buku['id'], 'judul' => $buku['judul'], 'kode_buku' => $buku['kode_buku'], 'cover' => $buku['cover'], 'deskripsi' => 'Deskripsi buku ' . $buku['judul'], 'kategori' => $buku['kategori'], 'tahun' => $buku['tahun'], 'keterangan' => ($buku['sisa_hari'] < 0) ? 'Buku Terlambat' : null, ] ] ]; })->values()->toArray(); } /** * Data untuk riwayat baca buku online. */ public static function getRiwayatOnline(): array { return [ [ 'id' => 1, 'id_baca' => 'BCO-20240527-002', 'judul_buku' => 'Ayah', 'tanggal_akses' => '27/05/2024', 'status' => 'Selesai', 'books' => [ [ 'id' => 9, 'judul' => 'Ayah', 'cover' => 'images/covers/ayah.png', 'deskripsi' => 'Novel yang mengisahkan perjuangan dan kasih sayang seorang ayah.', 'kategori' => 'Novel', 'tahun' => 2015, 'keterangan' => null ] ] ], ]; } /** * Data untuk notifikasi pengguna. * @param \App\Models\User $user Pengguna yang sedang login. * @return array Daftar notifikasi. */ public static function getNotifikasiForUser($user): array { $notifikasi = []; $allBooks = self::getAllBooks(); $myBooks = $allBooks->filter(function ($buku) use ($user) { if (!isset($buku['user_id']) || $buku['user_id'] === null) { return false; } if (is_array($buku['user_id'])) { return in_array($user->id, $buku['user_id']); } return $buku['user_id'] == $user->id; }); foreach ($myBooks as $buku) { // LOGIC TELAT if ($buku['sisa_hari'] < 0 && $buku['status'] == 'Dipinjam') { $hariTelat = abs($buku['sisa_hari']); $denda = $hariTelat * 1000; $notifikasi[] = [ 'icon' => 'bi-exclamation-octagon-fill', 'color' => 'danger', 'title' => 'TERLAMBAT: ' . $buku['judul'], 'content' => "Telat {$hariTelat} hari. Denda: Rp " . number_format($denda, 0, ',', '.'), 'time' => 'Sekarang', 'read' => false, 'type' => 'denda_active', 'link_id' => null, ]; } // LOGIC JATUH TEMPO elseif ($buku['sisa_hari'] >= 0 && $buku['sisa_hari'] <= 3 && $buku['status'] == 'Dipinjam') { $notifikasi[] = [ 'icon' => 'bi-exclamation-triangle-fill', 'color' => 'warning', 'title' => 'Jatuh Tempo: ' . $buku['judul'], 'content' => "Sisa waktu tinggal " . $buku['sisa_hari'] . " hari lagi.", 'time' => 'Segera', 'read' => false, 'type' => 'warning_jatuh_tempo', 'link_id' => null, ]; } } // Notif Default $notifikasi[] = [ 'icon' => 'bi-info-circle-fill', 'color' => 'primary', 'title' => 'Selamat Datang di DigiPus!', 'content' => 'Silakan jelajahi koleksi buku terbaru kami.', 'time' => 'Baru saja', 'read' => true, 'type' => 'info', 'link_id' => null, ]; return $notifikasi; } }