L'administration d'un établissement nécessite de découper l'année scolaire en trimestres ou semestres avant de pouvoir saisir les notes et générer les bulletins. Ce module permet de configurer les périodes par année scolaire (current/previous/next résolus en UUID v5 déterministes), de modifier les dates individuelles avec validation anti-chevauchement, et de consulter la période en cours avec le décompte des jours restants. Les dates par défaut de février s'adaptent aux années bissextiles. Le repository utilise UPSERT transactionnel pour garantir l'intégrité lors du changement de mode (trimestres ↔ semestres). Les domain events de Subject sont étendus pour couvrir toutes les mutations (code, couleur, description) en plus du renommage.
35 lines
1.0 KiB
PHP
35 lines
1.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Administration\Application\Query\HasGradesInPeriod;
|
|
|
|
use App\Administration\Application\Port\GradeExistenceChecker;
|
|
use App\Administration\Domain\Model\SchoolClass\AcademicYearId;
|
|
use App\Shared\Domain\Tenant\TenantId;
|
|
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
|
|
|
|
/**
|
|
* Handler pour vérifier la présence de notes dans une période.
|
|
*
|
|
* Délègue au port GradeExistenceChecker qui sera implémenté par le module Notes
|
|
* quand il existera. Pour l'instant, retourne toujours false (pas de notes).
|
|
*/
|
|
#[AsMessageHandler(bus: 'query.bus')]
|
|
final readonly class HasGradesInPeriodHandler
|
|
{
|
|
public function __construct(
|
|
private GradeExistenceChecker $gradeExistenceChecker,
|
|
) {
|
|
}
|
|
|
|
public function __invoke(HasGradesInPeriodQuery $query): bool
|
|
{
|
|
return $this->gradeExistenceChecker->hasGradesInPeriod(
|
|
TenantId::fromString($query->tenantId),
|
|
AcademicYearId::fromString($query->academicYearId),
|
|
$query->periodSequence,
|
|
);
|
|
}
|
|
}
|