34 lines
1.1 KiB
PHP
34 lines
1.1 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace App\Services;
|
||
|
|
|
||
|
|
use App\Models\Eleve;
|
||
|
|
use App\Models\Seance;
|
||
|
|
use App\Models\SessionQuiz;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Nombre affiché sur le badge « Mes devoirs » (barre latérale et onglet
|
||
|
|
* mobile) : devoirs non rendus avant échéance, séances ouvertes, quiz en
|
||
|
|
* cours — partagé entre MesDevoirsController et le composeur de la barre.
|
||
|
|
*/
|
||
|
|
class CompteurDevoirsEnAttente
|
||
|
|
{
|
||
|
|
public static function pour(Eleve $eleve): int
|
||
|
|
{
|
||
|
|
$devoirsEnAttente = $eleve->classe->devoirs()
|
||
|
|
->where('echeance', '>=', now())
|
||
|
|
->whereDoesntHave('rendus', fn ($q) => $q->where('eleve_id', $eleve->id))
|
||
|
|
->count();
|
||
|
|
|
||
|
|
$seancesOuvertes = $eleve->classe->seances()
|
||
|
|
->whereIn('statut', [Seance::SALLE_ATTENTE, Seance::EN_COURS])
|
||
|
|
->count();
|
||
|
|
|
||
|
|
$quizEnCours = SessionQuiz::whereHas('quiz', fn ($q) => $q->where('classe_id', $eleve->classe_id))
|
||
|
|
->whereIn('statut', [SessionQuiz::EN_ATTENTE, SessionQuiz::EN_COURS])
|
||
|
|
->exists();
|
||
|
|
|
||
|
|
return $devoirsEnAttente + $seancesOuvertes + ($quizEnCours ? 1 : 0);
|
||
|
|
}
|
||
|
|
}
|