user(); $notesDevoirs = RenduDevoir::where('eleve_id', $eleve->id) ->whereNotNull('note') ->with('devoir') ->get() ->map(fn (RenduDevoir $r) => [ 'titre' => $r->devoir->titre, 'note' => (int) $r->note, 'note_max' => 20, 'competences' => [], ]); $notesLabs = Correction::whereHas('labSession', fn ($q) => $q->where('eleve_id', $eleve->id)) ->with('labSession.lab') ->get() ->map(fn (Correction $c) => [ 'titre' => $c->labSession->lab->titre, 'note' => $c->note, 'note_max' => $c->note_max, 'competences' => $c->labSession->lab->competences ?? [], ]); $notes = $notesDevoirs->concat($notesLabs); return view('mes-notes', ['notes' => $notes, 'parCompetence' => $this->grouperParCompetence($notes)]); } /** * @param Collection}> $notes * @return Collection */ private function grouperParCompetence(Collection $notes): Collection { $parCompetence = []; foreach ($notes as $note) { $competences = $note['competences'] ?: ['Sans compétence associée']; $taux = $note['note_max'] > 0 ? $note['note'] / $note['note_max'] * 100 : 0; foreach ($competences as $competence) { $parCompetence[$competence][] = $taux; } } return collect($parCompetence)->map(fn (array $taux) => [ 'moyenne' => (int) round(array_sum($taux) / count($taux)), 'nombre' => count($taux), ]); } }