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', ], [ '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', 'kelas' => 'XII RPL A', 'golongan' => 'A', ], [ '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', ], [ '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','offline'], 'file_pdf'=>'ipas.pdf', 'progress' => 75, 'sisa_hari' => 14, 'user_id' => 1, ], [ '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' => 'offline', 'sisa_hari' => 3, 'progress' => 100, 'user_id' => [3, 1], ], [ '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, 'user_id' => 3, ], [ '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, 'user_id' => [1, 3], ], [ 'id' => 5, 'judul' => 'Si Anak Pintar', 'penulis' => 'Tere Liye', 'cover' => 'images/covers/sianakpintar.jpg', 'kategori' => 'Fiksi', 'tahun' => 2018, 'status' => 'Dipinjam', 'is_new' => true, 'tipe_akses' => 'offline', 'sisa_hari' => 5, 'user_id' => 1, ], [ 'id' => 6, 'judul' => 'Matematika Dasar', 'penulis' => 'Prof. Dr. Matematikus', 'cover' => 'images/covers/mtk.jpg', 'kategori' => 'Pendidikan', 'tahun' => 2023, 'status' => 'Tersedia', 'is_new' => true, 'tipe_akses' => ['online','offline'], 'file_pdf'=>'mtk.pdf', 'sisa_hari' => 7, 'progress' => 40, 'user_id' => [1, 4, 5], ], [ 'id' => 7, 'judul' => 'The Last Spell Breather', 'penulis' => 'Julie Pike', 'cover' => 'images/covers/thelastspellbreather.jpg', 'kategori' => 'Fantasi', 'tahun' => 2024, 'status' => 'Tersedia', 'is_new' => true, 'tipe_akses' => 'offline', 'sisa_hari' => 4, 'progress' => 0, 'user_id' => [3, 1] ], [ 'id' => 8, 'judul' => 'Ayah', 'penulis' => 'Andrea Hirata', 'cover' => 'images/covers/ayah.png', 'kategori' => 'Novel', 'tahun' => 2015, 'status' => 'Tersedia', 'is_new' => true, 'tipe_akses' => 'online', 'file_pdf' => 'ayah.pdf', 'progress' => 0, 'user_id' => [1, 2, 3], ], [ 'id' => 9, 'judul' => 'Senja, Hujan, & Cerita yang Telah Usai', 'penulis' => 'Boy Candra', 'cover' => 'images/covers/senja.png', 'kategori' => 'Novel', 'tahun' => 2015, 'status' => 'Tersedia', 'is_new' => true, 'tipe_akses' => ['online','offline'], 'file_pdf' => 'senja.pdf', 'progress' => 0, 'sisa_hari' => 14, 'user_id' => [1, 3], ], [ 'id' => 10, 'judul' => 'Hijrah itu Cinta', 'penulis' => 'Abay Adhitya', 'cover' => 'images/covers/hijrah.png', 'kategori' => 'Religi', 'tahun' => 2018, 'status' => 'Tersedia', 'is_new' => true, 'tipe_akses' => 'online', 'file_pdf' => 'hijrah.pdf', 'progress' => 0, 'user_id' => [2, 3], ] ]); } /** * Data untuk buku pinjam offline */ public static function getBukuPinjamOffline($user): array { return self::getAllBooks() ->where('tipe_akses', 'offline') ->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'], '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. */ // app/Services/DummyDataService.php 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(), ]; } }