src/Entity/ChannelUserData/AdminChannelUserData.php line 57

Open in your IDE?
  1. <?php
  2. namespace App\Entity\ChannelUserData;
  3. use App\Entity\Channel\ChannelUserRole;
  4. use App\Entity\Channel\Company;
  5. use App\Entity\Channel\CompanyChannelUserData;
  6. use App\Entity\Channel\Organization;
  7. use App\Entity\Channel\Place;
  8. use App\Entity\Channel\Training;
  9. use App\Entity\ChannelUserData\Activity\ActivityFeed;
  10. use App\Entity\ChannelUserData\AdminChannelUserData\AdminChannelUserDataOrganization;
  11. use App\Entity\ChannelUserData\AdminChannelUserData\AdminChannelUserDataPlace;
  12. use App\Entity\ChannelUserData\AdminChannelUserData\AdminChannelUserDataPrice;
  13. use App\Entity\ChannelUserData\AdminChannelUserData\AdminChannelUserDataSkill;
  14. use App\Entity\ChannelUserData\AdminChannelUserData\Document\AdminChannelUserDataAgreement;
  15. use App\Entity\ChannelUserData\AdminChannelUserData\Document\AdminChannelUserDataCertificate;
  16. use App\Entity\ChannelUserData\AdminChannelUserData\Document\AdminChannelUserDataDocument;
  17. use App\Entity\ChannelUserData\Cursus\Internship;
  18. use App\Enum\ChannelUserData\Activity\AdminChannelUserDataActivityTagEnum;
  19. use App\Enum\ChannelUserData\AdminChannelUserDataActivityStatusEnum;
  20. use App\Enum\ChannelUserData\AdminChannelUserStatusEnum;
  21. use App\Repository\ChannelUserData\ChannelUserDataRepository;
  22. use DateTimeInterface;
  23. use Doctrine\Common\Collections\ArrayCollection;
  24. use Doctrine\Common\Collections\Collection;
  25. use Doctrine\ORM\Mapping as ORM;
  26. use Drosalys\Bundle\ApiBundle\Serializer\Attributes\IdGroups;
  27. use Nellapp\Bundle\SDKBundle\Channel\Entity\ChannelUserData\AdminChannelUserDataInterface;
  28. use Nellapp\Bundle\SDKBundle\Channel\Entity\ChannelUserData\AdminChannelUserDataMethodTrait;
  29. use Nellapp\Bundle\SDKBundle\Enum\ChannelUserData\AdminChannelUserTypeEnum;
  30. use Nellapp\Bundle\SDKBundle\TrackData\Attribute\TrackEntity;
  31. use Nellapp\Bundle\SDKBundle\TrackData\Attribute\TrackField;
  32. use Symfony\Component\Serializer\Annotation as Serial;
  33. use Symfony\Component\Validator\Constraints as Assert;
  34. #[
  35.     ORM\Entity(repositoryClassChannelUserDataRepository::class),
  36.     ORM\Table(name'channel_user_data_admin'),
  37.     TrackEntity(
  38.         fieldGroups: [
  39.             'informations' => [
  40.                 'tags' => [AdminChannelUserDataActivityTagEnum::INFORMATIONS],
  41.             ],
  42.             'skills' => [
  43.                 'tags' => [AdminChannelUserDataActivityTagEnum::SKILLS],
  44.             ],
  45.             'files' => [
  46.                 'tags' => [AdminChannelUserDataActivityTagEnum::FILES]
  47.             ],
  48.             'prices' => [
  49.                 'tags' => [AdminChannelUserDataActivityTagEnum::PRICES],
  50.             ]
  51.         ]
  52.     ),
  53. ]
  54. class AdminChannelUserData extends ChannelUserData implements AdminChannelUserDataInterface
  55. {
  56.     use AdminChannelUserDataMethodTrait;
  57.     #[ORM\Column(type'date'nullabletrue)]
  58.     #[Assert\GreaterThanOrEqual(
  59.         propertyPath'startAt',
  60.         groups: ['admin_channel_user_profile']
  61.     )]
  62.     #[Serial\Groups(['Sync'])]
  63.     private ?DateTimeInterface $expireAt null;
  64.     #[ORM\Column(type'date'nullabletrue)]
  65.     #[Assert\LessThanOrEqual(
  66.         propertyPath'expireAt',
  67.         groups: ['admin_channel_user_profile'])
  68.     ]
  69.     #[Serial\Groups(['Sync'])]
  70.     private ?DateTimeInterface $startAt null;
  71.     #[ORM\ManyToOne(targetEntityChannelUserRole::class)]
  72.     #[ORM\JoinColumn(nullabletrueonDelete'SET NULL')]
  73.     #[IdGroups(['Sync'])]
  74.     private ?ChannelUserRole $channelUserRole null;
  75.     #[ORM\Column(type'string'nullabletrue)]
  76.     #[Assert\Choice(
  77.         callback: [AdminChannelUserTypeEnum::class, 'getChoices'],
  78.         message'adminChannelUser.role.Choice.message',
  79.     )]
  80.     #[Serial\Groups(['Sync'])]
  81.     private ?string $adminChannelUserType null;
  82.     #[ORM\Column(type'simple_array'nullabletrue)]
  83.     #[Serial\Groups(['Sync'])]
  84.     private ?array $displayedMenu null;
  85.     #[ORM\OneToMany(mappedBy'adminChannelUserData'targetEntityCompanyChannelUserData::class, cascade: ['persist''remove'], fetch'LAZY'orphanRemovaltrue)]
  86.     private Collection $companyChannelUserDatas;
  87.     #[ORM\OneToMany(mappedBy'tutor'targetEntityInternship::class, fetch'LAZY')]
  88.     private Collection $internships;
  89.     #[ORM\OneToMany(mappedBy'channelUserData'targetEntityAdminChannelUserDataOrganization::class, cascade: ['persist''remove'], fetch'LAZY'orphanRemovaltrue)]
  90.     private Collection $adminChannelUserDataOrganizations;
  91.     #[ORM\OneToMany(mappedBy'channelUserData'targetEntityAdminChannelUserDataPlace::class, cascade: ['persist''remove'], fetch'LAZY'orphanRemovaltrue)]
  92.     private Collection $adminChannelUserDataPlaces;
  93.     #[ORM\Column(type'string'nullabletrue)]
  94.     #[TrackFIeld(name'page.admin_channel_user_data.entity.status.label'fieldKey'informations', callable: 'getStatusKey'callableClassAdminChannelUserStatusEnum::class)]
  95.     private ?string $status null;
  96.     #[ORM\Column(type'string'nullabletrue)]
  97.     #[TrackFIeld(name'page.admin_channel_user_data.entity.activity_status.label'fieldKey'informations', callable: 'getStatusKey'callableClassAdminChannelUserDataActivityStatusEnum::class)]
  98.     private ?string $activityStatus null;
  99.     #[ORM\OneToOne(targetEntityActivityFeed::class, cascade: ['remove''persist'], orphanRemovaltrue)]
  100.     #[ORM\JoinColumn(nullablefalse)]
  101.     private ?ActivityFeed $activityFeed null;
  102.     #[ORM\OneToMany(mappedBy'channelUserData'targetEntityAdminChannelUserDataPrice::class, cascade: ['persist''remove'], fetch'LAZY'orphanRemovaltrue)]
  103.     #[ORM\OrderBy(['sortOrder' => 'ASC'])]
  104.     private Collection $adminChannelUserDataPrices;
  105.     #[ORM\OneToMany(mappedBy'channelUserData'targetEntityAdminChannelUserDataSkill::class, cascade: ['persist''remove'], fetch'LAZY'orphanRemovaltrue)]
  106.     private Collection $adminChannelUserDataSkills;
  107.     #[ORM\OneToMany(mappedBy'channelUserData'targetEntityAdminChannelUserDataDocument::class, cascade: ['persist''remove'], fetch'LAZY'orphanRemovaltrue)]
  108.     private Collection $documents;
  109.     public function __construct()
  110.     {
  111.         parent::__construct();
  112.         $this->companyChannelUserDatas = new ArrayCollection();
  113.         $this->internships = new ArrayCollection();
  114.         $this->adminChannelUserDataOrganizations = new ArrayCollection();
  115.         $this->adminChannelUserDataPlaces = new ArrayCollection();
  116.     }
  117.     public function getMainPrice(): ?AdminChannelUserDataPrice
  118.     {
  119.         $price $this->getAdminChannelUserDataPrices()->first();
  120.         return $price !== false $price null;
  121.     }
  122.     public function removeDisplayedMenuLinks(array $links): static
  123.     {
  124.         $this->displayedMenu array_diff($this->displayedMenu$links);
  125.         return $this;
  126.     }
  127.     public function addDisplayedMenuLinks(array $links): static
  128.     {
  129.         $this->displayedMenu array_unique(array_merge($this->displayedMenu$links));
  130.         return $this;
  131.     }
  132.     public function getCompanyChannelUserDataFor(?Company $company): ?CompanyChannelUserData
  133.     {
  134.         foreach ($this->getCompanyChannelUserDatas() as $companyChannelUserData) {
  135.             if ($companyChannelUserData->getCompany() === $company) {
  136.                 return $companyChannelUserData;
  137.             }
  138.         }
  139.         return null;
  140.     }
  141.     /**
  142.      * @return Collection<int, CompanyChannelUserData>
  143.      */
  144.     public function getCompanyChannelUserDatas(): Collection
  145.     {
  146.         return $this->companyChannelUserDatas;
  147.     }
  148.     public function addCompany(Company $company, ?string $job null): self
  149.     {
  150.         if (!$companyChannelUserData $this->getCompanyChannelUserDataFor($company)) {
  151.             $company->addChannelUserData($this$job);
  152.         }
  153.         return $this;
  154.     }
  155.     public function removeCompany(Company $company): self
  156.     {
  157.         if (!$companyChannelUserData $this->getCompanyChannelUserDataFor($company)) {
  158.             return $this;
  159.         }
  160.         $company->removeChannelUserData($this);
  161.         return $this;
  162.     }
  163.     public function getInternships(): Collection
  164.     {
  165.         return $this->internships;
  166.     }
  167.     public function getInternshipsCursuses(): Collection
  168.     {
  169.         return new ArrayCollection(array_unique($this->internships->map(function (Internship $internship) {
  170.             return $internship->getCursus();
  171.         })->toArray()));
  172.     }
  173.     public function getActiveInternships(Company $company): Collection
  174.     {
  175.         return $this->getInternships()->filter(function (Internship $internship) use ($company) {
  176.             return $internship->isActive() && (!$company || $internship->getCompany() === $company);
  177.         });
  178.     }
  179.     public function addInternship(Internship $internship): self
  180.     {
  181.         if (!$this->internships->contains($internship)) {
  182.             $internship->setTutor($this);
  183.             $this->internships->add($internship);
  184.         }
  185.         return $this;
  186.     }
  187.     public function removeInternship(Internship $internship): self
  188.     {
  189.         if ($this->internships->contains($internship)) {
  190.             $internship->setTutor(null);
  191.             $this->internships->removeElement($internship);
  192.         }
  193.         return $this;
  194.     }
  195.     public function getAdminChannelUserDataOrganizations(): Collection
  196.     {
  197.         return $this->adminChannelUserDataOrganizations;
  198.     }
  199.     public function addAdminChannelUserDataOrganization(AdminChannelUserDataOrganization $link): static
  200.     {
  201.         if (!$this->adminChannelUserDataOrganizations->contains($link)) {
  202.             $this->adminChannelUserDataOrganizations->add($link);
  203.             $link->setChannelUserData($this);
  204.         }
  205.         return $this;
  206.     }
  207.     public function removeAdminChannelUserDataOrganization(AdminChannelUserDataOrganization $link): static
  208.     {
  209.         $this->adminChannelUserDataOrganizations->removeElement($link);
  210.         return $this;
  211.     }
  212.     public function setAdminChannelUserDataOrganizations(Collection $links): static
  213.     {
  214.         foreach ($this->adminChannelUserDataOrganizations as $link) {
  215.             if (!$links->contains($link) && $link->getChannelUserData() === $this) {
  216.                 $link->setChannelUserData(null);
  217.             }
  218.         }
  219.         $this->adminChannelUserDataOrganizations $links;
  220.         foreach ($this->adminChannelUserDataOrganizations as $link) {
  221.             if ($link->getChannelUserData() !== $this) {
  222.                 $link->setChannelUserData($this);
  223.             }
  224.         }
  225.         return $this;
  226.     }
  227.     public function getOrganizations(): array
  228.     {
  229.         return $this->adminChannelUserDataOrganizations
  230.             ->map(fn(AdminChannelUserDataOrganization $link) => $link->getOrganization())
  231.             ->filter(fn(?Organization $organization) => null !== $organization)
  232.             ->toArray();
  233.     }
  234.     public function addOrganization(Organization $organization): static
  235.     {
  236.         foreach ($this->adminChannelUserDataOrganizations as $link) {
  237.             if ($link->getOrganization() === $organization) {
  238.                 return $this;
  239.             }
  240.         }
  241.         $link = new AdminChannelUserDataOrganization();
  242.         $link->setChannelUserData($this);
  243.         $link->setOrganization($organization);
  244.         $this->adminChannelUserDataOrganizations->add($link);
  245.         return $this;
  246.     }
  247.     public function removeOrganization(Organization $organization): static
  248.     {
  249.         foreach ($this->adminChannelUserDataOrganizations as $link) {
  250.             if ($link->getOrganization() === $organization) {
  251.                 $this->removeAdminChannelUserDataOrganization($link);
  252.                 break;
  253.             }
  254.         }
  255.         return $this;
  256.     }
  257.     public function setOrganizations(Collection $organizations): static
  258.     {
  259.         foreach ($this->adminChannelUserDataOrganizations as $link) {
  260.             if (null !== $link->getOrganization() && !$organizations->contains($link->getOrganization())) {
  261.                 $this->removeAdminChannelUserDataOrganization($link);
  262.             }
  263.         }
  264.         foreach ($organizations as $organization) {
  265.             $this->addOrganization($organization);
  266.         }
  267.         return $this;
  268.     }
  269.     public function getAdminChannelUserDataPlaces(): Collection
  270.     {
  271.         return $this->adminChannelUserDataPlaces;
  272.     }
  273.     public function addAdminChannelUserDataPlace(AdminChannelUserDataPlace $link): static
  274.     {
  275.         if (!$this->adminChannelUserDataPlaces->contains($link)) {
  276.             $this->adminChannelUserDataPlaces->add($link);
  277.             $link->setChannelUserData($this);
  278.         }
  279.         return $this;
  280.     }
  281.     public function removeAdminChannelUserDataPlace(AdminChannelUserDataPlace $link): static
  282.     {
  283.         $this->adminChannelUserDataPlaces->removeElement($link);
  284.         return $this;
  285.     }
  286.     public function setAdminChannelUserDataPlaces(Collection $links): static
  287.     {
  288.         foreach ($this->adminChannelUserDataPlaces as $link) {
  289.             if (!$links->contains($link) && $link->getChannelUserData() === $this) {
  290.                 $link->setChannelUserData(null);
  291.             }
  292.         }
  293.         $this->adminChannelUserDataPlaces $links;
  294.         foreach ($this->adminChannelUserDataPlaces as $link) {
  295.             if ($link->getChannelUserData() !== $this) {
  296.                 $link->setChannelUserData($this);
  297.             }
  298.         }
  299.         return $this;
  300.     }
  301.     public function getPlaces(): array
  302.     {
  303.         return $this->adminChannelUserDataPlaces
  304.             ->map(fn(AdminChannelUserDataPlace $link) => $link->getPlace())
  305.             ->filter(fn(?Place $place) => null !== $place)
  306.             ->toArray();
  307.     }
  308.     public function addPlace(Place $place): static
  309.     {
  310.         foreach ($this->adminChannelUserDataPlaces as $link) {
  311.             if ($link->getPlace() === $place) {
  312.                 return $this;
  313.             }
  314.         }
  315.         $link = new AdminChannelUserDataPlace();
  316.         $link->setChannelUserData($this);
  317.         $link->setPlace($place);
  318.         $this->adminChannelUserDataPlaces->add($link);
  319.         return $this;
  320.     }
  321.     public function removePlace(Place $place): static
  322.     {
  323.         foreach ($this->adminChannelUserDataPlaces as $link) {
  324.             if ($link->getPlace() === $place) {
  325.                 $this->removeAdminChannelUserDataPlace($link);
  326.                 break;
  327.             }
  328.         }
  329.         return $this;
  330.     }
  331.     public function setPlaces(Collection $places): static
  332.     {
  333.         foreach ($this->adminChannelUserDataPlaces as $link) {
  334.             if (null !== $link->getPlace() && !$places->contains($link->getPlace())) {
  335.                 $this->removeAdminChannelUserDataPlace($link);
  336.             }
  337.         }
  338.         foreach ($places as $place) {
  339.             $this->addPlace($place);
  340.         }
  341.         return $this;
  342.     }
  343.     public function getStatus(): ?string
  344.     {
  345.         return $this->status;
  346.     }
  347.     public function setStatus(?string $status): AdminChannelUserData
  348.     {
  349.         $this->status $status;
  350.         return $this;
  351.     }
  352.     public function getActivityFeed(): ?ActivityFeed
  353.     {
  354.         return $this->activityFeed;
  355.     }
  356.     public function setActivityFeed(?ActivityFeed $activityFeed): static
  357.     {
  358.         $this->activityFeed $activityFeed;
  359.         return $this;
  360.     }
  361.     public function getAdminChannelUserDataPrices(): Collection
  362.     {
  363.         return $this->adminChannelUserDataPrices;
  364.     }
  365.     public function addAdminChannelUserDataPrice(AdminChannelUserDataPrice $price): static
  366.     {
  367.         if (!$this->adminChannelUserDataPrices->contains($price)) {
  368.             $this->adminChannelUserDataPrices->add($price);
  369.         }
  370.         return $this;
  371.     }
  372.     public function removeAdminChannelUserDataPrice(AdminChannelUserDataPrice $price): static
  373.     {
  374.         if ($this->adminChannelUserDataPrices->contains($price)) {
  375.             $this->adminChannelUserDataPrices->removeElement($price);
  376.         }
  377.         return $this;
  378.     }
  379.     public function setAdminChannelUserDataPrices(Collection $adminChannelUserDataPrices): AdminChannelUserData
  380.     {
  381.         $this->adminChannelUserDataPrices $adminChannelUserDataPrices;
  382.         return $this;
  383.     }
  384.     public function getAdminChannelUserDataSkills(): Collection
  385.     {
  386.         return $this->adminChannelUserDataSkills;
  387.     }
  388.     public function addAdminChannelUserDataSkill(AdminChannelUserDataSkill $skill): static
  389.     {
  390.         if (!$this->adminChannelUserDataSkills->contains($skill)) {
  391.             $this->adminChannelUserDataSkills->add($skill);
  392.         }
  393.         return $this;
  394.     }
  395.     public function removeAdminChannelUserDataSkill(AdminChannelUserDataSkill $skill): static
  396.     {
  397.         if ($this->adminChannelUserDataSkills->contains($skill)) {
  398.             $this->adminChannelUserDataSkills->removeElement($skill);
  399.         }
  400.         return $this;
  401.     }
  402.     public function setAdminChannelUserDataSkills(Collection $adminChannelUserDataSkills): AdminChannelUserData
  403.     {
  404.         $this->adminChannelUserDataSkills $adminChannelUserDataSkills;
  405.         return $this;
  406.     }
  407.     public function getTrainings(): array
  408.     {
  409.         return $this->adminChannelUserDataSkills
  410.             ->map(fn(AdminChannelUserDataSkill $skill) => $skill->getTraining())
  411.             ->toArray();
  412.     }
  413.     public function addTraining(Training $training): static
  414.     {
  415.         foreach ($this->adminChannelUserDataSkills as $skill) {
  416.             if ($skill->getTraining() === $training) {
  417.                 return $this;
  418.             }
  419.         }
  420.         $link = (new AdminChannelUserDataSkill())
  421.             ->setTraining($training)
  422.             ->setChannelUserData($this);
  423.         $this->adminChannelUserDataSkills->add($link);
  424.         return $this;
  425.     }
  426.     public function removeTraining(Training $training): static
  427.     {
  428.         foreach ($this->adminChannelUserDataSkills as $skill) {
  429.             if ($skill->getTraining() === $training) {
  430.                 $this->removeAdminChannelUserDataSkill($skill);
  431.                 break;
  432.             }
  433.         }
  434.         return $this;
  435.     }
  436.     public function setTrainings(Collection $trainings): static
  437.     {
  438.         foreach ($this->adminChannelUserDataSkills as $skill) {
  439.             $this->removeAdminChannelUserDataSkill($skill);
  440.         }
  441.         foreach ($trainings as $training) {
  442.             $this->addTraining($training);
  443.         }
  444.         return $this;
  445.     }
  446.     public function getDocuments(): Collection
  447.     {
  448.         return $this->documents;
  449.     }
  450.     public function setDocuments(Collection $documents): AdminChannelUserData
  451.     {
  452.         $this->documents $documents;
  453.         return $this;
  454.     }
  455.     public function getActivityStatus(): ?string
  456.     {
  457.         return $this->activityStatus;
  458.     }
  459.     public function setActivityStatus(?string $activityStatus): AdminChannelUserData
  460.     {
  461.         $this->activityStatus $activityStatus;
  462.         return $this;
  463.     }
  464.     public function getCertificates(): Collection
  465.     {
  466.         return $this->documents->filter(
  467.             fn(AdminChannelUserDataDocument $document) => $document instanceof AdminChannelUserDataCertificate
  468.         );
  469.     }
  470.     public function getAgreement(): ?AdminChannelUserDataAgreement
  471.     {
  472.         foreach ($this->documents as $document) {
  473.             if ($document instanceof AdminChannelUserDataAgreement) {
  474.                 return $document;
  475.             }
  476.         }
  477.         return null;
  478.     }
  479. }