src/Controller/JobOpeningsController.php line 110
<?phpnamespace App\Controller;use App\Entity\Application;use App\Entity\Candidate;use App\Entity\JobOpening;use App\Entity\Client;use Doctrine\DBAL\Exception\ForeignKeyConstraintViolationException;use Doctrine\Persistence\ManagerRegistry;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\Mailer\MailerInterface;use Symfony\Component\Mime\Email;class JobOpeningsController extends AbstractController{public function index(ManagerRegistry $doctrine): Response {$entityManager = $doctrine->getManager()->getRepository(JobOpening::class);return $this->render('job_openings/index.html.twig', ['jobOpenings' => $entityManager->findAll()]);}public function new(Request $request, ManagerRegistry $doctrine): Response {$clients = $doctrine->getManager()->getRepository(Client::class)->findAll();if($request->isMethod('post')) {$jobOpeningData = $request->request->all('jobOpening');$jobOpeningData['createdAt'] = new \DateTime('now', new \DateTimeZone('UTC'));$clientId = $request->request->get('client');$client = $doctrine->getManager()->getRepository(Client::class)->find($clientId);try {$entityManager = $doctrine->getManager()->getRepository(JobOpening::class);$jobOpening = new JobOpening();$jobOpening->setClient($client);$jobOpening->setData($jobOpeningData);$entityManager->save($jobOpening, flush: true);$message = "Job Opening created successfully";unset($clientData);} catch(\RuntimeException $e) {$error = $e->getMessage();}}return $this->render('job_openings/form.html.twig', ['jobOpening' => $jobOpeningData ?? [],'clients' => $clients,'error' => $error ?? null,'message' => $message ?? null]);}public function edit(Request $request, ManagerRegistry $doctrine, string $id): Response {$clients = $doctrine->getManager()->getRepository(Client::class)->findAll();$entityManager = $doctrine->getManager()->getRepository(JobOpening::class);$jobOpening = $entityManager->find($id);if($request->isMethod('post')) {$jobOpeningData = $request->request->all('jobOpening');$jobOpeningData['createdAt'] = $jobOpening->getData()['createdAt'];$jobOpeningData['updatedAt'] = new \DateTime('now', new \DateTimeZone('UTC'));$clientId = $request->request->get('client');$client = $doctrine->getManager()->getRepository(Client::class)->find($clientId);try {$jobOpening->setClient($client);$jobOpening->setData($jobOpeningData);$entityManager->save($jobOpening, flush: true);$message = "Job Opening updated successfully";} catch(\RuntimeException $e) {$error = $e->getMessage();}}return $this->render('job_openings/form.html.twig', ['jobOpening' => $jobOpening,'clients' => $clients,'error' => $error ?? null,'message' => $message ?? null]);}public function remove(ManagerRegistry $doctrine, string $id): Response {$entityManager = $doctrine->getManager()->getRepository(JobOpening::class);$jobOpening = $entityManager->find($id);try {$entityManager->remove($jobOpening, flush: true);$this->addFlash('success', 'Job Opening removed successfully.');} catch(ForeignKeyConstraintViolationException) {$this->addFlash('warning', 'The selected Job Opening cannot be removed because there is at least one Application associated with it.');}return $this->redirectToRoute('job_openings-index');}public function list(Request $request, ManagerRegistry $doctrine, string $search=null): Response {$entityManager = $doctrine->getManager()->getRepository(JobOpening::class);if($request->isMethod('post')) { // Express Interest$candidateData = $request->request->all('candidate');try {$candidateEntityManager = $doctrine->getManager()->getRepository(Candidate::class);$candidateByPhone = $candidateEntityManager->findByEmail($candidateData['personal']['email']);$candidateByEmail = $candidateEntityManager->findByPhone($candidateData['personal']['phone']);if(!$candidateByPhone && !$candidateByEmail) {$candidate = new Candidate();$candidate->setData($candidateData);$candidateEntityManager->save($candidate, flush: true);$message = "Operation Complete Successfully.";} else {$message = "Candidate Already Exists.";}} catch(\RuntimeException $e) {$error = $e->getMessage();}}$search = $request->query->get('search') ?? null;$region = $request->query->get('region') ?? null;$profession = $request->query->get('profession') ?? null;$specialty = $request->query->get('specialty') ?? null;if($search || $region || $profession || $specialty) {$jobOpenings = $entityManager->filter($search, $region, $profession, $specialty);} else {$jobOpenings = $entityManager->findActiveJobOpenings();}return $this->render('job_openings/list.html.twig', ['jobOpenings' => $jobOpenings,'search' => $search ?? null,'region' => $region ?? null,'profession' => $profession ?? null,'message' => $message ?? null,'error' => $error ?? null]);}public function view(Request $request, ManagerRegistry $doctrine, MailerInterface $mailer, string $id): Response {$jobOpeningEntityManager = $doctrine->getManager()->getRepository(JobOpening::class);$jobOpening = $jobOpeningEntityManager->find($id);$applicationEntityManager = $doctrine->getManager()->getRepository(Application::class);if($request->isMethod('post')) { // Quick Apply$applicationData = $request->request->all('application');try {$candidateEntityManager = $doctrine->getManager()->getRepository(Candidate::class);$candidate = $candidateEntityManager->findByEmail($applicationData['email']);if(!$candidate) {$candidate = $candidateEntityManager->findByPhone($applicationData['phone']);if(!$candidate) {$candidate = new Candidate();$candidate->setData(['personal' => $applicationData]);$candidateEntityManager->save($candidate, flush: true);}}$candidate = $candidateEntityManager->findByEmail($applicationData['email']);$application = new Application();$application->setJobOpening($jobOpening);$application->setCandidate($candidate);$application->setData(['appliedAt' => new \DateTime('now', new \DateTimeZone('UTC'))]);$applicationEntityManager->save($application, flush:true);$email = (new Email())->to('van@thehireconnection.net')->subject('WeStaffGI - New Application')->text('Candidate ' . $applicationData['firstName'].' '.$applicationData['lastName'] . ' has applied for ' . $jobOpening->getData()['title']);$mailer->send($email);$message = "Application processed successfully.";} catch(\RuntimeException $e) {$error = $e->getMessage();}}return $this->render('job_openings/view.html.twig', ['jobOpening' => $jobOpening,'error' => $error ?? null,'message' => $message ?? null]);}}