<?phpnamespace App\Entity;use App\Entity\Traits\Timestampable;use App\Repository\PrimaryEvaluationReferenceRepository;use Doctrine\ORM\Mapping as ORM;/** * Évaluation mensuelle du calendrier national (créée par le super-admin) — * écoles primaires/maternelles. Joue le rôle qu'Exams (séquence) joue côté * secondaire : jusqu'à 3 par trimestre (2 pour le 3e). `quarterNumber` (1-3) * situe l'évaluation dans l'année scolaire de façon abstraite — au moment de * la copie vers une école (voir PrimaryEvaluationCopier), converti en Quarter * réel de la même façon que CompetenceReference::quarterNumber. * * `name`/`nameEn` sont un intitulé interne/administratif ; `evaluationName`/ * `evaluationNameEn` sont le libellé qui apparaît sur le bulletin — les deux * sont définis par le super-admin et peuvent différer (ex: name="Mois 1", * evaluationName="1ère Évaluation" ou toute autre convention de l'école). * `startAt`/`endAt` sont purement informatifs (aucune validation de saisie). * * Scopée par SchoolYear (contrairement à CompetenceReference, réutilisable * indéfiniment) car les dates sont propres au calendrier d'une année donnée. */#[ORM\HasLifecycleCallbacks]#[ORM\Entity(repositoryClass: PrimaryEvaluationReferenceRepository::class)]class PrimaryEvaluationReference{ use Timestampable; #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] private ?int $id = null; #[ORM\ManyToOne] #[ORM\JoinColumn(nullable: false)] private ?SchoolYear $year = null; #[ORM\Column] private ?int $quarterNumber = null; /** * Ordre au sein du trimestre (1..3, ou 1..2 pour un trimestre à 2 * évaluations — le super-admin ne crée simplement pas de 3e position). */ #[ORM\Column] private ?int $position = null; #[ORM\Column(length: 255)] private ?string $name = null; #[ORM\Column(length: 255, nullable: true)] private ?string $nameEn = null; #[ORM\Column(length: 255)] private ?string $evaluationName = null; #[ORM\Column(length: 255, nullable: true)] private ?string $evaluationNameEn = null; #[ORM\Column(type: 'date', nullable: true)] private ?\DateTimeInterface $startAt = null; #[ORM\Column(type: 'date', nullable: true)] private ?\DateTimeInterface $endAt = null; #[ORM\ManyToOne] private ?User $author = null; public function __toString(): string { return $this->name ?? ''; } public function getId(): ?int { return $this->id; } public function getYear(): ?SchoolYear { return $this->year; } public function setYear(?SchoolYear $year): static { $this->year = $year; return $this; } public function getQuarterNumber(): ?int { return $this->quarterNumber; } public function setQuarterNumber(int $quarterNumber): static { $this->quarterNumber = $quarterNumber; return $this; } public function getPosition(): ?int { return $this->position; } public function setPosition(int $position): static { $this->position = $position; return $this; } public function getName(): ?string { return $this->name; } public function setName(string $name): static { $this->name = $name; return $this; } public function getNameEn(): ?string { return $this->nameEn; } public function setNameEn(?string $nameEn): static { $this->nameEn = $nameEn; return $this; } public function getEvaluationName(): ?string { return $this->evaluationName; } public function setEvaluationName(string $evaluationName): static { $this->evaluationName = $evaluationName; return $this; } public function getEvaluationNameEn(): ?string { return $this->evaluationNameEn; } public function setEvaluationNameEn(?string $evaluationNameEn): static { $this->evaluationNameEn = $evaluationNameEn; return $this; } public function getStartAt(): ?\DateTimeInterface { return $this->startAt; } public function setStartAt(?\DateTimeInterface $startAt): static { $this->startAt = $startAt; return $this; } public function getEndAt(): ?\DateTimeInterface { return $this->endAt; } public function setEndAt(?\DateTimeInterface $endAt): static { $this->endAt = $endAt; return $this; } public function getAuthor(): ?User { return $this->author; } public function setAuthor(?User $author): static { $this->author = $author; return $this; }}