src/Controller/JobOpeningsController.php line 109

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Application;
  4. use App\Entity\Candidate;
  5. use App\Entity\JobOpening;
  6. use App\Entity\Client;
  7. use Doctrine\DBAL\Exception\ForeignKeyConstraintViolationException;
  8. use Doctrine\Persistence\ManagerRegistry;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\Mailer\MailerInterface;
  13. use Symfony\Component\Mime\Email;
  14. class JobOpeningsController extends AbstractController
  15. {
  16.     public function index(ManagerRegistry $doctrine): Response {
  17.         $entityManager $doctrine->getManager()->getRepository(JobOpening::class);
  18.         return $this->render('job_openings/index.html.twig', ['jobOpenings' => $entityManager->findAll()]);
  19.     }
  20.     public function new(Request $requestManagerRegistry $doctrine): Response {
  21.         $clients $doctrine->getManager()->getRepository(Client::class)->findAll();
  22.         if($request->isMethod('post')) {
  23.             $jobOpeningData $request->request->all('jobOpening');
  24.             $jobOpeningData['createdAt'] = new \DateTime('now', new \DateTimeZone('UTC'));
  25.             $clientId $request->request->get('client');
  26.             $client $doctrine->getManager()->getRepository(Client::class)->find($clientId);
  27.             try {
  28.                 $entityManager $doctrine->getManager()->getRepository(JobOpening::class);
  29.                 $jobOpening = new JobOpening();
  30.                 $jobOpening->setClient($client);
  31.                 $jobOpening->setData($jobOpeningData);
  32.                 $entityManager->save($jobOpeningflushtrue);
  33.                 $message "Job Opening created successfully";
  34.                 unset($clientData);
  35.             } catch(\RuntimeException $e) {
  36.                 $error $e->getMessage();
  37.             }
  38.         }
  39.         return $this->render('job_openings/form.html.twig', [
  40.             'jobOpening' => $jobOpeningData ?? [],
  41.             'clients' => $clients,
  42.             'error' => $error ?? null,
  43.             'message' => $message ?? null
  44.         ]);
  45.     }
  46.     public function edit(Request $requestManagerRegistry $doctrinestring $id): Response {
  47.         $clients $doctrine->getManager()->getRepository(Client::class)->findAll();
  48.         $entityManager $doctrine->getManager()->getRepository(JobOpening::class);
  49.         $jobOpening $entityManager->find($id);
  50.         if($request->isMethod('post')) {
  51.             $jobOpeningData $request->request->all('jobOpening');
  52.             $jobOpeningData['createdAt'] = $jobOpening->getData()['createdAt'];
  53.             $jobOpeningData['updatedAt'] = new \DateTime('now', new \DateTimeZone('UTC'));
  54.             $clientId $request->request->get('client');
  55.             $client $doctrine->getManager()->getRepository(Client::class)->find($clientId);
  56.             try {
  57.                 $jobOpening->setClient($client);
  58.                 $jobOpening->setData($jobOpeningData);
  59.                 $entityManager->save($jobOpeningflushtrue);
  60.                 $message "Job Opening updated successfully";
  61.             } catch(\RuntimeException $e) {
  62.                 $error $e->getMessage();
  63.             }
  64.         }
  65.         return $this->render('job_openings/form.html.twig', [
  66.             'jobOpening' => $jobOpening,
  67.             'clients' => $clients,
  68.             'error' => $error ?? null,
  69.             'message' => $message ?? null
  70.         ]);
  71.     }
  72.     public function remove(ManagerRegistry $doctrinestring $id): Response {
  73.         $entityManager $doctrine->getManager()->getRepository(JobOpening::class);
  74.         $jobOpening $entityManager->find($id);
  75.         try {
  76.             $entityManager->remove($jobOpeningflushtrue);
  77.             $this->addFlash('success''Job Opening removed successfully.');
  78.         } catch(ForeignKeyConstraintViolationException) {
  79.             $this->addFlash('warning''The selected Job Opening cannot be removed because there is at least one Application associated with it.');
  80.         }
  81.         return $this->redirectToRoute('job_openings-index');
  82.     }
  83.     public function list(Request $requestManagerRegistry $doctrinestring $search=null): Response {
  84.         $entityManager $doctrine->getManager()->getRepository(JobOpening::class);
  85.         if($request->isMethod('post')) { // Express Interest
  86.             $candidateData $request->request->all('candidate');
  87.             try {
  88.                 $candidateEntityManager $doctrine->getManager()->getRepository(Candidate::class);
  89.                 $candidateByPhone $candidateEntityManager->findByEmail($candidateData['personal']['email']);
  90.                 $candidateByEmail $candidateEntityManager->findByPhone($candidateData['personal']['phone']);
  91.                 if(!$candidateByPhone && !$candidateByEmail) {
  92.                     $candidate = new Candidate();
  93.                     $candidate->setData($candidateData);
  94.                     $candidateEntityManager->save($candidateflushtrue);
  95.                     $message "Operation Complete Successfully.";
  96.                 } else {
  97.                     $message "Candidate Already Exists.";
  98.                 }
  99.             } catch(\RuntimeException $e) {
  100.                 $error $e->getMessage();
  101.             }
  102.         }
  103.         $search $request->query->get('search') ?? null;
  104.         $region $request->query->get('region') ?? null;
  105.         $profession $request->query->get('profession') ?? null;
  106.         $specialty $request->query->get('specialty') ?? null;
  107.         if($search || $region || $profession || $specialty) {
  108.             $jobOpenings $entityManager->filter($search$region$profession$specialty);
  109.         } else {
  110.             $jobOpenings $entityManager->findActiveJobOpenings();
  111.         }
  112.         return $this->render('job_openings/list.html.twig', [
  113.             'jobOpenings' => $jobOpenings,
  114.             'search' => $search ?? null,
  115.             'region' => $region ?? null,
  116.             'profession' => $profession ?? null,
  117.             'message' => $message ?? null,
  118.             'error' => $error ?? null
  119.         ]);
  120.     }
  121.     public function view(Request $requestManagerRegistry $doctrineMailerInterface $mailerstring $id): Response {
  122.         $jobOpeningEntityManager $doctrine->getManager()->getRepository(JobOpening::class);
  123.         $jobOpening $jobOpeningEntityManager->find($id);
  124.         $applicationEntityManager $doctrine->getManager()->getRepository(Application::class);
  125.         if($request->isMethod('post')) { // Quick Apply
  126.             $applicationData $request->request->all('application');
  127.             try {
  128.                 $candidateEntityManager $doctrine->getManager()->getRepository(Candidate::class);
  129.                 $candidate $candidateEntityManager->findByEmail($applicationData['email']);
  130.                 if(!$candidate) {
  131.                     $candidate $candidateEntityManager->findByPhone($applicationData['phone']);
  132.                     if(!$candidate) {
  133.                         $candidate = new Candidate();
  134.                         $candidate->setData(['personal' => $applicationData]);
  135.                         $candidateEntityManager->save($candidateflushtrue);
  136.                     }
  137.                 }
  138.                 $candidate $candidateEntityManager->findByEmail($applicationData['email']);
  139.                 $application = new Application();
  140.                 $application->setJobOpening($jobOpening);
  141.                 $application->setCandidate($candidate);
  142.                 $application->setData([
  143.                     'appliedAt' => new \DateTime('now', new \DateTimeZone('UTC'))
  144.                 ]);
  145.                 $applicationEntityManager->save($applicationflush:true);
  146.                 $email = (new Email())->to('van@thehireconnection.net')->subject('WeStaffGI - New Application')->text('Candidate ' $applicationData['firstName'].' '.$applicationData['lastName'] . ' has applied for ' $jobOpening->getData()['title']);
  147.                 $mailer->send($email);
  148.                 $message "Application processed successfully.";
  149.             } catch(\RuntimeException $e) {
  150.                 $error $e->getMessage();
  151.             }
  152.         }
  153.         return $this->render('job_openings/view.html.twig', [
  154.             'jobOpening' => $jobOpening,
  155.             'error' => $error ?? null,
  156.             'message' => $message ?? null
  157.         ]);
  158.     }
  159. }