1, 'nisn' => '1234567890', 'nama_lengkap' => 'John Doe', 'email' => 'johnskuy@smkn1perpus.sch.id', 'nomor_hp' => '081234567890', 'password' => 'password', 'role' => 'siswa', ], [ 'id' => 2, 'nisn' => '1122334455', 'nama_lengkap' => 'Budi Santoso', 'email' => 'budi.santoso@smkn1perpus.sch.id', 'nomor_hp' => '081122334455', 'password' => 'password', 'role' => 'guru', ], [ 'id' => 3, 'nisn' => '9988776655', 'nama_lengkap' => 'Siti Nurhaliza', 'email' => 'siti.nurhaliza@smkn1perpus.sch.id', 'nomor_hp' => '081998877665', 'password' => 'password', 'role' => 'siswa', ], [ 'id' => 4, 'nisn' => '5566778899', 'nama_lengkap' => 'Andi Pratama', 'email' => 'andi.pratama@smkn1perpus.sch.id', 'nomor_hp' => '081556677889', 'password' => 'password', 'role' => 'siswa', ], [ 'id' => 5, 'nisn' => '2233445566', 'nama_lengkap' => 'Rina Marlina', 'email' => 'rina.marlina@smkn1perpus.sch.id', 'nomor_hp' => '081223344556', 'password' => 'password', 'role' => 'guru', ], ]; } /** * Data untuk 4 kartu statistik */ 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' => 'warning'], ['label' => 'Buku dikembalikan', 'value' => 12, 'icon' => 'bi-check-circle', 'color' => 'success'], ['label' => 'History Baca', 'value' => 15, 'icon' => 'bi-hourglass-split', 'color' => 'info'], ]; } /** * Data untuk pengumuman */ public static function getPengumuman(): array { $pengumuman = [ ['type' => 'warning', 'icon' => 'bi-exclamation-triangle-fill', 'title' => 'Perpustakaan Tutup', 'content' => 'Perpustakaan akan tutup pada tanggal 25 Desember untuk perayaan Natal.'], ['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 for ($i = 1; $i <= 30; $i++) { $pengumuman[] = ['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 */ private static function getAllBooks() { return collect([ [ 'id' => 1, 'judul' => 'Modul Ajar IPAS', 'penulis' => 'Tim Kemdikbud Ristek', 'cover' => 'images/covers/ipas.jpg', 'kategori' => 'Sains', 'tahun' => 2022, 'status' => 'Tersedia', 'is_new' => true, 'tipe_akses' => 'online', 'progress' => 75, ], [ 'id' => 2, 'judul' => 'Modul Ajar Pendidikan Pancasila', 'penulis' => 'Tim Guru Pancasila', 'cover' => 'images/covers/pancasila.jpg', 'kategori' => 'Pendidikan', 'tahun' => 2023, 'status' => 'Tersedia', 'is_new' => false, 'tipe_akses' => 'online', 'progress' => 100, ], [ 'id' => 3, 'judul' => 'Modul Belajar Sosiologi', 'penulis' => 'Tim Cendekia', 'cover' => 'images/covers/sosiologi.jpg', 'kategori' => 'Sosial', 'tahun' => 2021, 'status' => 'Dipinjam', 'is_new' => false, 'tipe_akses' => 'offline', 'sisa_hari' => 8, ], [ 'id' => 4, 'judul' => 'Modul Pembelajaran Seni Budaya', 'penulis' => 'Cahya Wulan, S.Pd.', 'cover' => 'images/covers/senbud.jpg', 'kategori' => 'Seni', 'tahun' => 2022, 'status' => 'Dipinjam', 'is_new' => false, 'tipe_akses' => 'offline', 'sisa_hari' => 14, ], [ 'id' => 5, 'judul' => 'Yuk, Mari SEKOLAH', 'penulis' => 'Dr. Budi Santoso', 'cover' => 'images/covers/ipas.jpg', 'kategori' => 'Fiksi', 'tahun' => 2022, 'status' => 'Tersedia', 'is_new' => false, 'tipe_akses' => null, ], [ 'id' => 6, 'judul' => 'Yuk, Mari SEKOLAH', 'penulis' => 'Dr. Budi Santoso', 'cover' => 'images/covers/ipas.jpg', 'kategori' => 'Fiksi', 'tahun' => 2022, 'status' => 'Tersedia', 'is_new' => false, 'tipe_akses' => 'offline', 'sisa_hari' => 13 ], ]); } /** * Data untuk buku pinjam offline (Diringkas) */ public static function getBukuPinjamOffline(): array { return self::getAllBooks() ->where('tipe_akses', 'offline') ->map(fn($buku) => [ 'judul' => $buku['judul'], 'penulis' => $buku['penulis'], 'sisa_hari' => $buku['sisa_hari'], 'cover' => $buku['cover'], ]) ->values() ->all(); } /** * Data untuk baca buku online (Diringkas) */ public static function getBacaBukuOnline(): array { return self::getAllBooks() ->where('tipe_akses', 'online') ->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'] ?? null, function ($query, $tipe) { return $query->where('tipe_akses', $tipe); }); 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(), ]; } }