src/Entity/Applicants.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Entity\Embedded\ApplicantConfig;
  4. use App\Repository\ApplicantsRepository;
  5. use Doctrine\Common\Collections\ArrayCollection;
  6. use Doctrine\Common\Collections\Collection;
  7. use Doctrine\ORM\Mapping as ORM;
  8. use OSAdmin\Annotation\EntityConfig;
  9. use OSAdmin\Annotation\EntityFormConfig;
  10. use OSAdmin\Annotation\EntityToRoute;
  11. use OSAdmin\Util\EntityExportableInterface;
  12. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  13. #[ORM\Entity(repositoryClassApplicantsRepository::class)]
  14. #[UniqueEntity(fields: ['email'], message'Un utilisateur existe déjà avec cette adresse email.')]
  15. #[EntityToRoute(
  16.     config: new EntityConfig(
  17.         title"Gestion des candidats",
  18.         listSubtitle"Liste des candidats",
  19.         remove: ["EDIT""ADD"]
  20.     ),
  21. )]
  22. class Applicants extends Users implements EntityExportableInterface
  23. {
  24.     public function __construct()
  25.     {
  26.         parent::__construct();
  27.         $this->isEnabled true;
  28.         $this->isEmailVerified false;
  29.         $this->jobsApplications = new ArrayCollection();
  30.         $this->curriculumVitaes = new ArrayCollection();
  31.     }
  32.     public const ROLE_APPLICANT 'ROLE_APPLICANT';
  33.     #[ORM\Column(type'boolean'nullabletrue)]
  34.     private bool $isEmailVerified;
  35.     #[ORM\Column(type'boolean')]
  36.     private bool $isVerified false;
  37.     #[ORM\OneToMany(mappedBy'applicant'targetEntityJobsApplications::class)]
  38.     private Collection $jobsApplications;
  39.     #[ORM\OneToMany(mappedBy'applicant'targetEntityCurriculumVitae::class, orphanRemovaltrue)]
  40.     private Collection $curriculumVitaes;
  41.     #[ORM\Embedded(class: ApplicantConfig::class, columnPrefix"config")]
  42.     private ?ApplicantConfig $config;
  43.     public function getRoles(): array
  44.     {
  45.         $rolesparent::getRoles();
  46.         return array_unique(array_merge($roles, [self::ROLE_APPLICANT]));
  47.     }
  48.     public function isEmailVerified(): ?bool
  49.     {
  50.         return $this->isEmailVerified;
  51.     }
  52.     public function setIsEmailVerified(?bool $isEmailVerified): self
  53.     {
  54.         $this->isEmailVerified $isEmailVerified;
  55.         return $this;
  56.     }
  57.     public function isVerified(): bool
  58.     {
  59.         return $this->isVerified;
  60.     }
  61.     public function setIsVerified(bool $isVerified): self
  62.     {
  63.         $this->isVerified $isVerified;
  64.         return $this;
  65.     }
  66.     public function setHashPassword(?string $password null): self
  67.     {
  68.         $this->password $password;
  69.         return $this;
  70.     }
  71.     /**
  72.      * @return Collection<int, JobsApplications>
  73.      */
  74.     public function getJobsApplications(): Collection
  75.     {
  76.         return $this->jobsApplications;
  77.     }
  78.     public function addJobsApplication(JobsApplications $jobsApplication): self
  79.     {
  80.         if (!$this->jobsApplications->contains($jobsApplication)) {
  81.             $this->jobsApplications[] = $jobsApplication;
  82.             $jobsApplication->setApplicant($this);
  83.         }
  84.         return $this;
  85.     }
  86.     public function removeJobsApplication(JobsApplications $jobsApplication): self
  87.     {
  88.         if ($this->jobsApplications->removeElement($jobsApplication)) {
  89.             // set the owning side to null (unless already changed)
  90.             if ($jobsApplication->getApplicant() === $this) {
  91.                 $jobsApplication->setApplicant(null);
  92.             }
  93.         }
  94.         return $this;
  95.     }
  96.     /**
  97.      * @return Collection<int, CurriculumVitae>
  98.      */
  99.     public function getCurriculumVitaes(): Collection
  100.     {
  101.         return $this->curriculumVitaes;
  102.     }
  103.     public function addCurriculumVitae(CurriculumVitae $curriculumVitae): self
  104.     {
  105.         if (!$this->curriculumVitaes->contains($curriculumVitae)) {
  106.             $this->curriculumVitaes[] = $curriculumVitae;
  107.             $curriculumVitae->setApplicant($this);
  108.         }
  109.         return $this;
  110.     }
  111.     public function removeCurriculumVitae(CurriculumVitae $curriculumVitae): self
  112.     {
  113.         if ($this->curriculumVitaes->removeElement($curriculumVitae)) {
  114.             // set the owning side to null (unless already changed)
  115.             if ($curriculumVitae->getApplicant() === $this) {
  116.                 $curriculumVitae->setApplicant(null);
  117.             }
  118.         }
  119.         return $this;
  120.     }
  121.     /**
  122.      * @return ApplicantConfig|null
  123.      */
  124.     public function getConfig(): ?ApplicantConfig
  125.     {
  126.         return $this->config;
  127.     }
  128.     /**
  129.      * @param ApplicantConfig|null $config
  130.      * @return Applicants
  131.      */
  132.     public function setConfig(?ApplicantConfig $config): Applicants
  133.     {
  134.         $this->config $config;
  135.         return $this;
  136.     }
  137.     public function getCv(): ?CurriculumVitae
  138.     {
  139.         return $this->curriculumVitaes->isEmpty() ? null $this->curriculumVitaes->first();
  140.     }
  141.     public function countNbApplications(): int
  142.     {
  143.         return $this->jobsApplications->filter(function (JobsApplications $jobsApplication) {
  144.             return $jobsApplication->isConfirmed();
  145.         })->count();
  146.     }
  147.     public function countAcceptedApplication(): int
  148.     {
  149.         return $this->jobsApplications->filter(function (JobsApplications $jobsApplication) {
  150.             return $jobsApplication->isConfirmed() && $jobsApplication->isAccepted();
  151.         })->count();
  152.     }
  153.     public function countRejectedApplication(): int
  154.     {
  155.         return $this->jobsApplications->filter(function (JobsApplications $jobsApplication) {
  156.             return $jobsApplication->isConfirmed() && $jobsApplication->isRejected();
  157.         })->count();
  158.     }
  159.     public function __toString(): string
  160.     {
  161.         return $this->getFullName();
  162.     }
  163.     public function getExportData(): array
  164.     {
  165.         return [
  166.             'ID' => function (Applicants $item) {
  167.                 return $item->getId();
  168.             },
  169.             'Nom' => function (Applicants $item) {
  170.                 return $item->getLName();
  171.             },
  172.             'Prénom' => function (Applicants $item) {
  173.                 return $item->getFName();
  174.             },
  175.             'Contact' => function (Applicants $item) {
  176.                 return $item->getCv() ? $item->getCv()->getContact() : "-";
  177.             },
  178.             'Adresse' => function (Applicants $item) {
  179.                 return $item->getCv() ? $item->getCv()->getAddress() : "-";
  180.             },
  181.             'Secteur d\'activités' => function (Applicants $item) {
  182.                 return $item->getCv() ? (implode(", "$item->getCv()->getActivitySectors()->toArray())) : "-";
  183.             }
  184.         ];
  185.     }
  186. }