<?phpnamespace App\Entity;use App\Entity\Traits\Timestampable;use App\Repository\SubjectComponentRepository;use Doctrine\ORM\Mapping as ORM;// Sous-matière d'une matière d'école primaire/maternelle (Oral, Écrit, Pratique,// Attitude...), chacune avec son propre barème. La note de la matière = somme// des totaux de ses sous-matières (voir PrimaryNoteCalculator). Entité neuve et// isolée : n'a aucun rapport avec Note/Exams/Competence/SubNote existants.#[ORM\HasLifecycleCallbacks]#[ORM\Entity(repositoryClass: SubjectComponentRepository::class)]class SubjectComponent{ use Timestampable; #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] private ?int $id = null; #[ORM\ManyToOne] #[ORM\JoinColumn(nullable: false)] private ?Subject $subject = null; // Trace la SubjectComponentReference nationale (super-admin) dont cette // sous-matière a été copiée, pour permettre une synchronisation ultérieure // sans écraser les personnalisations locales déjà faites par l'école — cf. // Competence::$sourceCompetence pour le même patron. #[ORM\ManyToOne] private ?SubjectComponentReference $sourceComponent = null; #[ORM\Column(length: 255)] private ?string $name = null; #[ORM\Column(length: 255, nullable: true)] private ?string $nameEn = null; #[ORM\Column] private ?float $maxMark = null; #[ORM\Column] private int $position = 0; #[ORM\ManyToOne] #[ORM\JoinColumn(nullable: false)] private ?School $school = null; #[ORM\ManyToOne] #[ORM\JoinColumn(nullable: false)] private ?SchoolYear $year = null; #[ORM\ManyToOne] #[ORM\JoinColumn(nullable: false)] private ?User $author = null; public function getId(): ?int { return $this->id; } public function getSubject(): ?Subject { return $this->subject; } public function setSubject(?Subject $subject): static { $this->subject = $subject; return $this; } public function getSourceComponent(): ?SubjectComponentReference { return $this->sourceComponent; } public function setSourceComponent(?SubjectComponentReference $sourceComponent): static { $this->sourceComponent = $sourceComponent; 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 getMaxMark(): ?float { return $this->maxMark; } public function setMaxMark(float $maxMark): static { $this->maxMark = $maxMark; return $this; } public function getPosition(): int { return $this->position; } public function setPosition(int $position): static { $this->position = $position; return $this; } public function getSchool(): ?School { return $this->school; } public function setSchool(?School $school): static { $this->school = $school; return $this; } public function getYear(): ?SchoolYear { return $this->year; } public function setYear(?SchoolYear $year): static { $this->year = $year; return $this; } public function getAuthor(): ?User { return $this->author; } public function setAuthor(?User $author): static { $this->author = $author; return $this; }}