firstOrFail(); $guruMapel = GuruMapel::with('mapel') ->where('kelas_id', $siswa->kelas_id) ->get(); $hariIni = Carbon::now()->locale('id')->isoFormat('dddd'); $jadwalHariIni = $guruMapel->filter(fn($item) => strtolower($item->hari) === strtolower($hariIni) ); $hariMap = [ 'Senin' => 0, 'Selasa' => 1, 'Rabu' => 2, 'Kamis' => 3, 'Jumat' => 4, 'Sabtu' => 5, 'Minggu' => 6, ]; // Pastikan jadwalHariIni Collection, map hasilnya dan collect ulang supaya pasti Collection $eventsMapel = collect($jadwalHariIni->map(function ($item) use ($hariMap) { $hari = $hariMap[ucfirst(strtolower($item->hari))] ?? 0; $startDate = Carbon::now()->startOfWeek()->addDays($hari)->format('Y-m-d'); return [ 'title' => $item->mapel->nama_mapel ?? 'Mata Pelajaran', 'start' => $startDate . 'T' . $item->jam_mulai, 'end' => $startDate . 'T' . $item->jam_selesai, 'color' => '#6f42c1', ]; })); $tugasHariIni = Tugas::whereHas('kelas', function ($q) use ($siswa) { $q->where('kelas_id', $siswa->kelas_id); }) ->whereDate('deadline', Carbon::today()) ->with('materi') ->get(); // Pastikan eventsTugas juga Collection $eventsTugas = collect($tugasHariIni->map(function ($tugas) { $start = $tugas->tanggal ?? Carbon::today()->toDateString(); $deadline = $tugas->deadline ?? $start; return [ 'title' => 'Tugas: ' . $tugas->judul, 'start' => $start . 'T00:00:00', 'end' => $deadline . 'T23:59:59', 'color' => '#ffc107', 'url' => route('siswa.tugas.show', $tugas->id), ]; })); $ujianHariIni = Ujian::where('terbit', true) ->whereHas('kelas', function (Builder $q) use ($siswa) { $q->where('kelas.id', $siswa->kelas_id) ->where('kelas_ujian.deadline', '>=', Carbon::today()->toDateString()); }) ->with(['kelas' => function ($q) use ($siswa) { $q->where('kelas.id', $siswa->kelas_id); }, 'mapel']) ->get(); // Pastikan eventsUjian Collection $eventsUjian = collect($ujianHariIni->map(function ($ujian) use ($siswa) { $kelas = $ujian->kelas->firstWhere('id', $siswa->kelas_id); $start = $ujian->waktu_mulai ?? $ujian->tanggal_ujian ?? Carbon::now(); $end = $ujian->waktu_selesai ?? ($kelas?->pivot?->deadline ?? $start); return [ 'title' => 'Ujian: ' . ($ujian->judul ?? 'Tanpa Judul'), 'start' => Carbon::parse($start)->format('Y-m-d\TH:i:s'), 'end' => Carbon::parse($end)->format('Y-m-d\TH:i:s'), 'color' => '#dc3545', 'url' => route('siswa.ujian.show', $ujian->id), ]; })); // Sekarang merge aman karena semuanya Collection $events = $eventsMapel ->merge($eventsTugas) ->merge($eventsUjian); return view('siswa.dashboard', [ 'jumlahMapel' => $guruMapel->count(), 'jumlahTugas' => $tugasHariIni->count(), 'jumlahUjian' => $ujianHariIni->count(), 'guruMapel' => $guruMapel, 'events' => $events, 'tugasHariIni' => $tugasHariIni, 'ujianHariIni' => $ujianHariIni, 'jadwalHariIni' => $jadwalHariIni, ]); } }