<?php
namespace App\Entity;
use App\Entity\Traits\Timestampable;
use App\Repository\PrimaryEvaluationRepository;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation\Groups;
/**
* Évaluation mensuelle d'une école primaire/maternelle — instance locale,
* copiée depuis PrimaryEvaluationReference (voir PrimaryEvaluationCopier),
* rattachée à un Quarter réel de l'école. Remplace le simple entier
* "evalNumber" utilisé initialement : PrimaryComponentNote/DailyAbsence/Late
* s'y rattachent directement (voir leur champ $evaluation), au lieu d'un
* entier + Quarter séparé — une seule source de vérité pour le trimestre
* (accessible via getQuarter()) et pour le libellé affiché sur le bulletin
* (getEvaluationName()).
*
* Éditable localement par l'école après copie (name/nameEn/evaluationName/
* evaluationNameEn/dates), comme Competence vis-à-vis de CompetenceReference.
*/
#[ORM\HasLifecycleCallbacks]
#[ORM\Entity(repositoryClass: PrimaryEvaluationRepository::class)]
class PrimaryEvaluation
{
use Timestampable;
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
#[Groups(['getLate'])]
private ?int $id = null;
#[ORM\ManyToOne]
#[ORM\JoinColumn(nullable: false)]
private ?Quarter $quarter = null;
#[ORM\Column]
private ?int $position = null;
// Résolution publique du bulletin mensuel (QR code, voir
// PrimaryReportCardParentController) — même patron que TheClass/Quarter/
// StudentYear::$slug (non énumérable, contrairement à l'id auto-incrémenté).
#[ORM\Column(length: 255, nullable: true, unique: true)]
private ?string $slug = null;
#[ORM\Column(length: 255)]
#[Groups(['getLate'])]
private ?string $name = null;
#[ORM\Column(length: 255, nullable: true)]
#[Groups(['getLate'])]
private ?string $nameEn = null;
#[ORM\Column(length: 255)]
#[Groups(['getLate'])]
private ?string $evaluationName = null;
#[ORM\Column(length: 255, nullable: true)]
#[Groups(['getLate'])]
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 ?PrimaryEvaluationReference $sourceEvaluation = null;
#[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;
#[ORM\ManyToOne]
private ?User $editor = null;
public function __toString(): string
{
return $this->name ?? '';
}
public function getId(): ?int
{
return $this->id;
}
public function getQuarter(): ?Quarter
{
return $this->quarter;
}
public function setQuarter(?Quarter $quarter): static
{
$this->quarter = $quarter;
return $this;
}
public function getPosition(): ?int
{
return $this->position;
}
public function setPosition(int $position): static
{
$this->position = $position;
return $this;
}
public function getSlug(): ?string
{
return $this->slug;
}
public function setSlug(?string $slug): static
{
$this->slug = $slug;
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 getSourceEvaluation(): ?PrimaryEvaluationReference
{
return $this->sourceEvaluation;
}
public function setSourceEvaluation(?PrimaryEvaluationReference $sourceEvaluation): static
{
$this->sourceEvaluation = $sourceEvaluation;
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;
}
public function getEditor(): ?User
{
return $this->editor;
}
public function setEditor(?User $editor): static
{
$this->editor = $editor;
return $this;
}
}