user(); $classes = $prof->classes()->whereNull('archivee_a')->orderBy('nom')->get(); $classeIds = $classes->pluck('id'); $classeIdParSeanceId = Seance::whereIn('classe_id', $classeIds)->pluck('classe_id', 'id'); $correctionsParClasse = Correction::whereHas('labSession', fn ($q) => $q->whereIn('seance_id', $classeIdParSeanceId->keys())) ->with('labSession:id,seance_id') ->latest() ->get() ->groupBy(fn (Correction $c): int => $classeIdParSeanceId[$c->labSession->seance_id] ?? 0); $observationsParClasse = Observation::whereIn('classe_id', $classeIds) ->with('eleve') ->latest() ->get() ->groupBy('classe_id'); $resultats = $classes->map(function (Classe $classe) use ($correctionsParClasse, $observationsParClasse) { $corrections = ($correctionsParClasse->get($classe->id) ?? collect())->take(50); return [ 'classe' => $classe, 'nombreCorrections' => $corrections->count(), 'reussiteMoyenne' => $corrections->isNotEmpty() ? (int) round($corrections->avg(fn ($c) => $c->note_max > 0 ? $c->note / $c->note_max * 100 : 0)) : null, 'observations' => ($observationsParClasse->get($classe->id) ?? collect())->take(5), ]; }); return view('resultats', ['resultats' => $resultats]); } }