41 lines
1.4 KiB
PHP
41 lines
1.4 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace App\Http\Controllers;
|
||
|
|
|
||
|
|
use App\Models\Classe;
|
||
|
|
use App\Models\Correction;
|
||
|
|
use Illuminate\Support\Facades\Auth;
|
||
|
|
use Illuminate\View\View;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* « Résultats » (séparation vitrine/application, 2026-10-13) : vue
|
||
|
|
* d'ensemble, par classe, des corrections et des observations. Le détail
|
||
|
|
* séance par séance reste dans le cockpit de chaque classe.
|
||
|
|
*/
|
||
|
|
class ResultatsController extends Controller
|
||
|
|
{
|
||
|
|
public function show(): View
|
||
|
|
{
|
||
|
|
$prof = Auth::guard('web')->user();
|
||
|
|
$classes = $prof->classes()->whereNull('archivee_a')->orderBy('nom')->get();
|
||
|
|
|
||
|
|
$resultats = $classes->map(function (Classe $classe) {
|
||
|
|
$corrections = Correction::whereHas('labSession', fn ($q) => $q->whereIn('seance_id', $classe->seances()->select('id')))
|
||
|
|
->latest()
|
||
|
|
->limit(50)
|
||
|
|
->get();
|
||
|
|
|
||
|
|
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' => $classe->observations()->with('eleve')->limit(5)->get(),
|
||
|
|
];
|
||
|
|
});
|
||
|
|
|
||
|
|
return view('resultats', ['resultats' => $resultats]);
|
||
|
|
}
|
||
|
|
}
|