<?php
namespace App\Entity;
use App\Repository\TheClassEvaluationSystemRepository;
use Doctrine\ORM\Mapping as ORM;
/**
* Système d'évaluation choisi pour UNE classe, POUR UNE année scolaire donnée.
*
* Une ligne par (theClass, year) : changer de système pour une classe (même à
* l'initiative du super-admin via ClassLevel::defaultEvaluationSystem) ne
* touche jamais aux lignes des années passées, donc les bulletins déjà
* générés restent cohérents avec le système qui était actif au moment de leur
* calcul. Pas de ligne pour une (classe, année) donnée = pas de choix explicite
* → voir TheClassEvaluationSystemRepository::resolve() pour la résolution du
* système applicable (retombe sur ClassLevel::defaultEvaluationSystem, puis
* sur 'sequence').
*/
#[ORM\Entity(repositoryClass: TheClassEvaluationSystemRepository::class)]
#[ORM\UniqueConstraint(name: 'the_class_year_unique', columns: ['the_class_id', 'year_id'])]
class TheClassEvaluationSystem
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\ManyToOne(targetEntity: TheClass::class)]
#[ORM\JoinColumn(nullable: false)]
private ?TheClass $theClass = null;
#[ORM\ManyToOne(targetEntity: SchoolYear::class)]
#[ORM\JoinColumn(nullable: false)]
private ?SchoolYear $year = null;
// Nom de colonne explicite : "system" est un mot réservé en MySQL 8+
// (utilisé nu par Doctrine sinon), ce qui provoque une erreur de syntaxe
// SQL à l'insertion. La propriété/les getters/setters PHP restent inchangés.
#[ORM\Column(name: 'evaluation_system', length: 20)]
private ?string $system = null;
public function getId(): ?int
{
return $this->id;
}
public function getTheClass(): ?TheClass
{
return $this->theClass;
}
public function setTheClass(?TheClass $theClass): static
{
$this->theClass = $theClass;
return $this;
}
public function getYear(): ?SchoolYear
{
return $this->year;
}
public function setYear(?SchoolYear $year): static
{
$this->year = $year;
return $this;
}
public function getSystem(): ?string
{
return $this->system;
}
public function setSystem(string $system): static
{
$this->system = $system;
return $this;
}
}