guru; // Get all academic years for filter based on guru's subjects $tahunAjaranList = MataPelajaran::where('guru_nip', $guru->nip) ->distinct('tahun_ajaran') ->pluck('tahun_ajaran') ->toArray(); // Get all classes for filter based on guru's subjects $kelasList = MataPelajaran::where('guru_nip', $guru->nip) ->distinct('kelas') ->pluck('kelas') ->toArray(); // Get active academic year $tahunAjaranAktif = TahunAjaran::where('status', 'aktif')->first(); // Get relevant MataPelajaran first based on guru_nip and tahun_ajaran $guruMataPelajaranQuery = MataPelajaran::where('guru_nip', $guru->nip); if ($tahunAjaran !== 'all') { $guruMataPelajaranQuery->where('tahun_ajaran', $tahunAjaran); } if ($kelas !== 'all') { $guruMataPelajaranQuery->where('kelas', $kelas); } $guruMataPelajaranIds = $guruMataPelajaranQuery->pluck('id')->toArray(); $guruMataPelajaranClasses = $guruMataPelajaranQuery->pluck('kelas')->unique()->toArray(); // Now build the kelasQuery based on these class names $kelasQuery = Kelas::whereIn('nama', $guruMataPelajaranClasses); // Get subjects taught by this teacher (this query already correctly uses guru_nip) $mataPelajaranQuery = MataPelajaran::where('guru_nip', $guru->nip); // Apply filters if not 'all' if ($tahunAjaran !== 'all') { $mataPelajaranQuery->where('tahun_ajaran', $tahunAjaran); } if ($kelas !== 'all') { $kelasQuery->where('nama', $kelas); $mataPelajaranQuery->where('kelas', $kelas); } // Get counts $kelasCount = $kelasQuery->count(); $mataPelajaranCount = $mataPelajaranQuery->count(); // Get total students from these classes $siswaCount = Siswa::whereIn('kelas', $kelasQuery->pluck('nama'))->count(); // New features: Total Tugas, Materi, Quiz $totalTugas = Tugas::where('guru_nip', $guru->nip) ->when($tahunAjaran !== 'all', function ($query) use ($tahunAjaran) { return $query->where('tahun_ajaran', $tahunAjaran); }) ->when($kelas !== 'all', function ($query) use ($kelas) { return $query->where('kelas', $kelas); }) ->count(); $totalMateri = Materi::whereIn('matapelajaran_id', $guruMataPelajaranIds) ->when($tahunAjaran !== 'all', function ($query) use ($tahunAjaran) { return $query->where('tahun_ajaran', $tahunAjaran); }) ->count(); $totalQuiz = Quizzes::whereIn('matapelajaran_id', $guruMataPelajaranIds) ->count(); // Quiz Results (Passed/Failed) $passedQuizzes = 0; $failedQuizzes = 0; $quizAttempts = QuizAttempts::whereHas('quizzes.mataPelajaran', function ($query) use ($guru, $tahunAjaran, $kelas) { $query->where('guru_nip', $guru->nip); if ($tahunAjaran !== 'all') { $query->where('tahun_ajaran', $tahunAjaran); } if ($kelas !== 'all') { $query->where('kelas', $kelas); } })->get(); foreach ($quizAttempts as $attempt) { $quizLevelSettings = QuizLevelSetting::where('quiz_id', $attempt->quiz_id)->first(); if ($quizLevelSettings) { $jumlahSoalPerLevel = json_decode($quizLevelSettings->jumlah_soal_per_level, true); $totalSkorLevel = 0; foreach (json_decode($quizLevelSettings->skor_level) as $key => $value) { $totalSkorLevel += $value * (int) $jumlahSoalPerLevel[$key]; } $persentase = ($totalSkorLevel > 0) ? round(($attempt->skor / $totalSkorLevel) * 100) : 0; $kkm = $quizLevelSettings->kkm; if ($persentase >= $kkm) { $passedQuizzes++; } else { $failedQuizzes++; } } } // Prepare data for Mata Pelajaran Distribution Chart $mataPelajaranChartLabels = []; $mataPelajaranChartData = []; $mataPelajaranWithClasses = MataPelajaran::where('guru_nip', $guru->nip) ->when($tahunAjaran !== 'all', function ($query) use ($tahunAjaran) { return $query->where('tahun_ajaran', $tahunAjaran); }) ->when($kelas !== 'all', function ($query) use ($kelas) { return $query->where('kelas', $kelas); }) ->get(); foreach ($mataPelajaranWithClasses as $mp) { $studentsInClass = Siswa::where('kelas', $mp->kelas)->count(); $mataPelajaranChartLabels[] = $mp->nama; // Assuming 'nama' is the subject name $mataPelajaranChartData[] = $studentsInClass; // Count students in the associated class } // Prepare data for Siswa per Kelas Chart $kelasChartLabels = []; $kelasChartData = []; $guruClasses = Kelas::whereIn('nama', $guruMataPelajaranClasses) ->when($kelas !== 'all', function ($query) use ($kelas) { return $query->where('nama', $kelas); }) ->get(); foreach ($guruClasses as $k) { $siswaInKelasCount = Siswa::where('kelas', $k->nama)->count(); $kelasChartLabels[] = $k->nama; $kelasChartData[] = $siswaInKelasCount; } // Prepare data for Nilai Rata-rata Tugas per Mata Pelajaran dan Kelas Chart $tugasChartLabels = []; $tugasChartData = []; $tugasChartDataPerTugas = []; // Get all mata pelajaran that the teacher teaches with filters $mataPelajaranQuery = MataPelajaran::where('guru_nip', $guru->nip) ->when($tahunAjaran !== 'all', function ($query) use ($tahunAjaran) { return $query->where('tahun_ajaran', $tahunAjaran); }) ->when($kelas !== 'all', function ($query) use ($kelas) { return $query->where('kelas', $kelas); }) ->orderBy('nama', 'asc'); $mataPelajaranList = $mataPelajaranQuery->get(); foreach ($mataPelajaranList as $matpel) { // Get all tasks for this mata pelajaran and class $tugasForMatpel = Tugas::where('guru_nip', $guru->nip) ->where('matapelajaran_id', $matpel->id) ->where('kelas', $matpel->kelas) ->when($tahunAjaran !== 'all', function ($query) use ($tahunAjaran) { return $query->where('tahun_ajaran', $tahunAjaran); }) ->orderBy('created_at', 'desc') ->get(); foreach ($tugasForMatpel as $tugas) { // Get average score for this task $avgNilai = SubmitTugas::where('tugas_id', $tugas->id) ->whereNotNull('nilai') ->avg('nilai'); if ($avgNilai !== null) { $tugasChartLabels[] = "{$matpel->nama} ({$matpel->kelas}) - {$tugas->nama}"; $tugasChartData[] = round($avgNilai, 1); $tugasChartDataPerTugas[] = [ 'id_tugas' => $tugas->id, 'nama_tugas' => $tugas->nama, 'mata_pelajaran' => $matpel->nama, 'kelas' => $matpel->kelas, 'rata_rata' => round($avgNilai, 1), 'jumlah_submit' => SubmitTugas::where('tugas_id', $tugas->id)->count(), 'jumlah_dinilai' => SubmitTugas::where('tugas_id', $tugas->id)->whereNotNull('nilai')->count(), 'tanggal_tugas' => $tugas->tanggal, 'tenggat_waktu' => $tugas->tenggat ]; } } } return [ 'selected_year' => $tahunAjaran, 'selected_kelas' => $kelas, 'selected_quiz_status' => $quizStatus, 'tahun_ajaran_list' => $tahunAjaranList, 'kelas_list' => $kelasList, 'tahun_ajaran_aktif' => $tahunAjaranAktif ? $tahunAjaranAktif->tahun : '-', 'kelas' => $kelasCount, 'mata_pelajaran' => $mataPelajaranCount, 'siswa' => $siswaCount, 'total_tugas' => $totalTugas, 'total_materi' => $totalMateri, 'total_quiz' => $totalQuiz, 'passed_quizzes' => $passedQuizzes, 'failed_quizzes' => $failedQuizzes, 'mata_pelajaran_chart' => [ 'labels' => $mataPelajaranChartLabels, 'data' => $mataPelajaranChartData, ], 'kelas_chart' => [ 'labels' => $kelasChartLabels, 'data' => $kelasChartData, ], 'tugas_chart' => [ 'labels' => $tugasChartLabels, 'data' => $tugasChartData, 'data_per_tugas' => $tugasChartDataPerTugas, ], ]; } }