src/Entity/CustomerDirectoryItem.php line 23

  1. <?php
  2. namespace App\Entity;
  3. use Doctrine\ORM\Mapping as ORM;
  4. use Symfony\Component\Validator\Constraints as Assert,
  5.     Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  6. use App\Entity\Trait\IdTrait,
  7.     App\Entity\Trait\UuidTrait,
  8.     App\Entity\Trait\TimestampableTrait,
  9.     App\Repository\CustomerDirectoryItemRepository;
  10. use App\Front\Exception\FrontApiException;
  11. #[Assert\Expression(
  12.     expression'this.isValid()',
  13.     message'Only one resource must be assigned.'
  14. )]
  15. #[UniqueEntity(fields: ['parent''volume''issue''article'], ignoreNullfalsemessage'You have already added that resource.')]
  16. #[ORM\UniqueConstraint(fields: ['parent''volume''issue''article'])]
  17. #[ORM\Entity(repositoryClassCustomerDirectoryItemRepository::class)]
  18. class CustomerDirectoryItem
  19. {
  20.     use IdTrait,
  21.         UuidTrait,
  22.         TimestampableTrait;
  23.     #[Assert\NotNull]
  24.     #[ORM\ManyToOne(targetEntityCustomerDirectory::class, inversedBy'items')]
  25.     #[ORM\JoinColumn(onDelete'cascade'nullablefalse)]
  26.     private ?CustomerDirectory $parent null;
  27.     #[ORM\ManyToOne(targetEntityJournalVolume::class)]
  28.     #[ORM\JoinColumn(onDelete'cascade')]
  29.     private ?JournalVolume $volume null;
  30.     #[ORM\ManyToOne(targetEntityJournalIssue::class)]
  31.     #[ORM\JoinColumn(onDelete'cascade')]
  32.     private ?JournalIssue $issue null;
  33.     #[ORM\ManyToOne(targetEntityJournalArticle::class)]
  34.     #[ORM\JoinColumn(onDelete'cascade')]
  35.     private ?JournalArticle $article null;
  36.     public function __construct()
  37.     {
  38.         $this->setUuid();
  39.         $this->createdAt = new \DateTimeImmutable();
  40.         $this->updatedAt = new \DateTimeImmutable();
  41.     }
  42.     public function getParent(): ?CustomerDirectory
  43.     {
  44.         return $this->parent;
  45.     }
  46.     public function setParent(CustomerDirectory $parent): self
  47.     {
  48.         if ($this->parent && $this->parent->getParent() !== $parent->getParent()) {
  49.             throw new FrontApiException(403'Forbidden.');
  50.         }
  51.         $this->parent $parent;
  52.         $parent->addItem($this);
  53.         return $this;
  54.     }
  55.     public function getCustomer(): ?Customer
  56.     {
  57.         return $this->parent?->getParent();
  58.     }
  59.     public function getVolume(): ?JournalVolume
  60.     {
  61.         return $this->volume;
  62.     }
  63.     public function setVolume(?JournalVolume $volume): self
  64.     {
  65.         $this->volume $volume;
  66.         return $this;
  67.     }
  68.     public function getIssue(): ?JournalIssue
  69.     {
  70.         return $this->issue;
  71.     }
  72.     public function setIssue(?JournalIssue $issue): self
  73.     {
  74.         $this->issue $issue;
  75.         return $this;
  76.     }
  77.     public function getArticle(): ?JournalArticle
  78.     {
  79.         return $this->article;
  80.     }
  81.     public function setArticle(?JournalArticle $article): self
  82.     {
  83.         $this->article $article;
  84.         return $this;
  85.     }
  86.     public function isValid(): bool
  87.     {
  88.         $assigned 0;
  89.         $assigned += $this->volume 0;
  90.         $assigned += $this->issue 0;
  91.         $assigned += $this->article 0;
  92.         return $assigned === 1;
  93.     }
  94.     public function isArticle(): bool
  95.     {
  96.         return $this->article !== null;
  97.     }
  98.     public function isVolume(): bool
  99.     {
  100.         return $this->volume !== null;
  101.     }
  102.     public function isIssue(): bool
  103.     {
  104.         return $this->issue !== null;
  105.     }
  106. }