src/EventListener/ApplicantEventListener.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\ApplicantStatus;
  4. use App\Event\ApplicantEvent;
  5. use App\Mail\Mailer;
  6. use App\Util\StringToEntityUtil;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Flagception\Manager\FeatureManagerInterface;
  9. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  10. class ApplicantEventListener
  11. {
  12.     public function __construct(
  13.         private readonly FeatureManagerInterface $featureManager,
  14.         private readonly EntityManagerInterface $entityManager,
  15.         private readonly Mailer $mailer,
  16.         private readonly ParameterBagInterface $parameterBag,
  17.         private readonly StringToEntityUtil $stringToEntityUtil
  18.     ) {
  19.     }
  20.     public function onPostPersist(ApplicantEvent $applicantEvent): void
  21.     {
  22.         if (!$this->featureManager->isActive('feature_ats')) {
  23.             return;
  24.         }
  25.         $applicant $applicantEvent->getApplicant();
  26.         // if vacancy is marked as sourced external, do nothing
  27.         if (!empty($applicant->getVacancy()?->getExternalReference())) {
  28.             return;
  29.         }
  30.         $status $this->stringToEntityUtil
  31.             ->stringToEntity($this->parameterBag->get('site_ats_applicant_start_status'));
  32.         if (!$status) {
  33.             return;
  34.         }
  35.         $atsApplicantStatus = (new ApplicantStatus())
  36.             ->setApplicant($applicant)
  37.             ->setStatus($status);
  38.         $this->entityManager->persist($atsApplicantStatus);
  39.         $this->entityManager->flush();
  40.         if (!$applicant->isManual()) {
  41.             $this->mailer->invokeEntryOfStatus($atsApplicantStatus);
  42.             return;
  43.         }
  44.         if ($mail $applicant->getManualMail()) {
  45.             $this->mailer->invokeEntryOfStatus($atsApplicantStatus$mail->getBody());
  46.             return;
  47.         }
  48.         $this->mailer->invokeEntryOfStatus($atsApplicantStatusnullfalse);
  49.     }
  50. }