src/Entity/Collaborator.php line 13

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Repository\CollaboratorRepository;
  4. use Doctrine\ORM\Mapping as ORM;
  5. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  6. use Symfony\Component\Serializer\Annotation\Groups;
  7. #[ORM\Entity(repositoryClassCollaboratorRepository::class)]
  8. #[ORM\UniqueConstraint(name"association_table"columns: ['company_id''user_id'])]
  9. #[UniqueEntity(fields: ['company''user'], message'This user is already in this company.'errorPath'user')]
  10. class Collaborator
  11. {
  12.     const ROLE_COLLABORATOR "collaborator";
  13.     const ROLE_MANAGER "manager";
  14.     #[ORM\Id]
  15.     #[ORM\GeneratedValue]
  16.     #[ORM\Column]
  17.     private ?int $id null;
  18.     #[ORM\ManyToOne(cascade: ["persist"], inversedBy'collaborators')]
  19.     #[ORM\JoinColumn(nullablefalseonDelete"CASCADE")]
  20.     #[Groups([
  21.         'read:club:collection:getCompanies',
  22.         'read:company:collection:getCollaborators',
  23.         'read:company:collection:get'
  24.     ])]
  25.     private ?User $user null;
  26.     #[ORM\ManyToOne(cascade: ["persist"], inversedBy'collaborators')]
  27.     #[ORM\JoinColumn(nullablefalseonDelete"CASCADE")]
  28.     #[Groups([
  29.         'read:user:item:get',
  30.         'read:user:collection:get',
  31.         'read:club:collection:getUsers',
  32.         'read:user:item:me'
  33.     ])]
  34.     private ?Company $company null;
  35.     #[ORM\Column(length255nullabletrue)]
  36.     #[Groups([
  37.         'read:club:collection:getCompanies',
  38.         'read:company:collection:getCollaborators'
  39.     ])]
  40.     private ?string $position null;
  41.     #[ORM\Column(nullabletrue)]
  42.     private array $roles = [];
  43.     #[ORM\Column(nullabletrue)]
  44.     private ?bool $owner null;
  45.     public function __construct()
  46.     {
  47.         $this->roles = [self::ROLE_COLLABORATOR];
  48.         $this->owner false;
  49.     }
  50.     public static function getRoleList(): array
  51.     {
  52.         return [
  53.             self::ROLE_COLLABORATOR => "Collaborateur",
  54.             self::ROLE_MANAGER => "Gérant",
  55.         ];
  56.     }
  57.     public function __toString(): string
  58.     {
  59.         return $this->user->getShortname().' ('.$this->company->getName().')';
  60.     }
  61.     public static function getRolesList()
  62.     {
  63.         return [
  64.             self::ROLE_COLLABORATOR => 'Collaborateur',
  65.             self::ROLE_MANAGER => 'Responsable',
  66.         ];
  67.     }
  68.     public function getRoleData(): array
  69.     {
  70.         if ($this->owner) {
  71.             return [
  72.                 'label' => 'Propriétaire',
  73.                 'class' => 'warning',
  74.             ];
  75.         }
  76.         if (in_array(self::ROLE_MANAGER$this->roles)) {
  77.             return [
  78.                 'label' => 'Responsable',
  79.                 'class' => 'primary',
  80.             ];
  81.         }
  82.         return [
  83.             'label' => 'Collaborateur',
  84.             'class' => 'info',
  85.         ];
  86.     }
  87.     public function isManager(): bool
  88.     {
  89.         return in_array(self::ROLE_MANAGER$this->roles);
  90.     }
  91.     public function getId(): ?int
  92.     {
  93.         return $this->id;
  94.     }
  95.     public function getUser(): ?User
  96.     {
  97.         return $this->user;
  98.     }
  99.     public function setUser(?User $user): self
  100.     {
  101.         $this->user $user;
  102.         return $this;
  103.     }
  104.     public function getCompany(): ?Company
  105.     {
  106.         return $this->company;
  107.     }
  108.     public function setCompany(?Company $company): self
  109.     {
  110.         $this->company $company;
  111.         return $this;
  112.     }
  113.     public function getPosition(): ?string
  114.     {
  115.         return $this->position;
  116.     }
  117.     public function setPosition(?string $position): self
  118.     {
  119.         $this->position $position;
  120.         return $this;
  121.     }
  122.     #[Groups([
  123.         'read:user:item:me',
  124.         'read:company:collection:getCollaborators',
  125.         'read:company:collection:get'
  126.     ])]
  127.     public function getRoles(): array
  128.     {
  129.         $roles $this->roles;
  130.         if ($this->owner && !in_array(self::ROLE_MANAGER$roles)) {
  131.             $roles[] = self::ROLE_MANAGER;
  132.         }
  133.         return $roles;
  134.     }
  135.     public function setRoles(?array $roles): self
  136.     {
  137.         $this->roles $roles;
  138.         return $this;
  139.     }
  140.     public function isOwner(): ?bool
  141.     {
  142.         return $this->owner;
  143.     }
  144.     public function setOwner(?bool $owner): static
  145.     {
  146.         $this->owner $owner;
  147.         return $this;
  148.     }
  149. }