<?phpnamespace App\Entity;use App\Enum\Invoice\Status;use App\Repository\InvoiceRepository;use Doctrine\ORM\Mapping as ORM;/** * @ORM\Entity(repositoryClass=InvoiceRepository::class) */class Invoice{ /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="datetime") */ private $createdAt; /** * @ORM\Column(type="enum", options={"values"="invoice_enum", "default"="new"}) */ private $status = Status::STATUS_NEW; /** * @ORM\Column(type="integer", nullable=true) */ private $amount; /** * @ORM\ManyToOne(targetEntity=Candidate::class) * @ORM\JoinColumn(nullable=false) */ private $candidate; /** * @ORM\ManyToOne(targetEntity=FinanceCategory::class) * @ORM\JoinColumn(nullable=true) */ private $financeCategory; /** * @ORM\ManyToOne(targetEntity=Person::class) * @ORM\JoinColumn(nullable=true) */ private $person; /** * @ORM\OneToOne(targetEntity=Transaction::class, inversedBy="invoice", cascade={"persist", "remove"}) */ private $transaction; public function __construct() { $this->createdAt = new \DateTime(); } public function __toString() { $ce = $this->getCandidate() ? $this->getCandidate()->getCalendarEvent() : null; return ($this->getPerson() ? $this->getPerson()->__toString() : "–") . " – " . ($ce ? $ce->getNameText() : "–"); } public function getId(): ?int { return $this->id; } public function getCreatedAt(): ?\DateTimeInterface { return $this->createdAt; } public function setCreatedAt(\DateTimeInterface $createdAt): self { $this->createdAt = $createdAt; return $this; } public function getStatus() { return $this->status; } public function setStatus($status): self { $this->status = $status; return $this; } public function getStatusText(): string { return Status::getText($this->status); } public function getStatusCssClass($prefix = null): string { return Status::getCssClass($this->status, $prefix); } public function isNewStatus(): bool { return $this->status === Status::STATUS_NEW; } public function isDeletedStatus(): bool { return $this->status === Status::STATUS_DELETED; } public function isPaidStatus(): bool { return $this->status === Status::STATUS_PAID; } public function isReservedStatus(): bool { return $this->status === Status::STATUS_RESERVED; } public function getAmount(): ?int { return $this->amount; } public function setAmount(?int $amount): self { $this->amount = $amount; return $this; } public function getCandidate(): ?Candidate { return $this->candidate; } public function setCandidate(?Candidate $candidate): self { $this->candidate = $candidate; if ($candidate) { $candidate->setInvoice($this); } return $this; } public function getFinanceCategory(): ?FinanceCategory { return $this->financeCategory; } public function setFinanceCategory(?FinanceCategory $financeCategory): self { $this->financeCategory = $financeCategory; return $this; } public function getPerson(): ?Person { return $this->person; } public function setPerson(?Person $person): self { $this->person = $person; return $this; } public function getTransaction(): ?Transaction { return $this->transaction; } public function setTransaction(?Transaction $transaction): self { $this->transaction = $transaction; return $this; }}