src/BackendBundle/Helper/GraphQlJobMarketHelper.php line 44

Open in your IDE?
  1. <?php
  2. namespace App\BackendBundle\Helper;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use App\BackendBundle\Helper\GraphQlCommonHelper;
  5. use App\BackendBundle\Helper\GraphQlCompanyHelper;
  6. use App\BackendBundle\Helper\GraphQlJobHelper;
  7. use App\BackendBundle\Model\GraphQL\JobMarket as JobMarketGQL;
  8. use App\BackendBundle\Model\GraphQL\JobMarketAdditionalInfo as JobMarketAdditionalInfoGQL;
  9. use App\Entity\JobMarket;
  10. use App\Entity\JobMarketStartType;
  11. class GraphQlJobMarketHelper {
  12.     private EntityManagerInterface $em;
  13.     private GraphQlCommonHelper $graphqlCommonHelper;
  14.     private GraphQlCompanyHelper $graphqlCompanyHelper;
  15.     private GraphQlJobHelper $graphqlJobHelper;
  16.     public function __construct(EntityManagerInterface $emGraphQlCommonHelper $graphqlCommonHelperGraphQlCompanyHelper $graphqlCompanyHelper,
  17.             GraphQlJobHelper $graphqlJobHelper) {
  18.         $this->em $em;
  19.         $this->graphqlCommonHelper $graphqlCommonHelper;
  20.         $this->graphqlCompanyHelper $graphqlCompanyHelper;
  21.         $this->graphqlJobHelper $graphqlJobHelper;
  22.     }
  23.     public function prepareJobMarket(JobMarket $jobMarket) {
  24.         $jobMarketGQL = new JobMarketGQL();
  25.         $jobMarketGQL->setId($jobMarket->getId());
  26.         $jobMarketGQL->setName($jobMarket->getName());
  27.         $jobMarketGQL->setNumberOfPositions($jobMarket->getNumberOfPositions());
  28.         $jobMarketGQL->setDescription($jobMarket->getDescription());
  29.         $jobMarketGQL->setDetails($jobMarket->getDetails());
  30.         $jobMarketGQL->setUrl($jobMarket->getUrl());
  31.         $jobMarketGQL->setRequirements($jobMarket->getRequirements());
  32.         $jobMarketGQL->setSalary($jobMarket->getSalary());
  33.         $jobMarketGQL->setAdditionalInfo($this->getAdditionalInfo($jobMarket));
  34.         $jobMarketGQL->setStartDate($this->graphqlCommonHelper->getDateString($jobMarket->getStartDate()));
  35.         $jobMarketGQL->setApplyUntil($this->graphqlCommonHelper->getDateString($jobMarket->getApplyUntil()));
  36.         $jobMarketGQL->setOpenDate($this->graphqlCommonHelper->getDateString($jobMarket->getOpenDate()));
  37.         $jobMarketGQL->setCloseDate($this->graphqlCommonHelper->getDateString($jobMarket->getClosedDate()));
  38.         $jobMarketGQL->setContact($this->graphqlCommonHelper->getContact($jobMarket->getContact()));
  39.         $jobMarketGQL->setPositionType($this->getPositionType($jobMarket));
  40.         $jobMarketGQL->setApplyType($this->getApplyType($jobMarket));
  41.         $jobMarketGQL->setOnlineUrl($jobMarket->getUrl());
  42.         $jobMarketGQL->setStartType($this->getStartType($jobMarket));
  43.         $jobMarketGQL->setViewCount($jobMarket->getViewCount());
  44.         $jobMarketGQL->setApplicationCount($jobMarket->getApplicationCount());
  45.         $stateGQL $this->getStateGQL($jobMarket);
  46.         $jobMarketGQL->setState($stateGQL);
  47.         $this->addAddresses($jobMarket$jobMarketGQL);
  48.         $this->addJobMarketJobs($jobMarket$jobMarketGQL);
  49.         $this->addJobMarketProfile($jobMarket$jobMarketGQL);
  50.         $this->addJobMarketImage($jobMarket$jobMarketGQL);
  51.         $this->addJobMarketCustomMedia($jobMarket$jobMarketGQL);
  52.         return $jobMarketGQL;
  53.     }
  54.     public function prepareJobMarketReduced(JobMarket $jobMarket) {
  55.         $jobMarketGQL = new JobMarketGQL();
  56.         $jobMarketGQL->setId($jobMarket->getId());
  57.         $jobMarketGQL->setName($jobMarket->getName());
  58.         $jobMarketGQL->setPositionType($this->getPositionType($jobMarket));
  59.         $jobMarketGQL->setNumberOfPositions($jobMarket->getNumberOfPositions());
  60.         $addresses $jobMarket->getAddresses();
  61.         foreach ($addresses as $address) {
  62.             $addressGQL $this->graphqlCommonHelper->getAddress($address);
  63.             if (empty($addressGQL)) {
  64.                 continue;
  65.             }
  66.             $jobMarketGQL->addAddress($addressGQL);
  67.         }
  68.         $jobs $jobMarket->getJobs();
  69.         foreach ($jobs as $job) {
  70.             $jobSimpleGQL $this->graphqlJobHelper->getJobSimple($job);
  71.             if (empty($jobSimpleGQL)) {
  72.                 continue;
  73.             }
  74.             $jobMarketGQL->addJob($jobSimpleGQL);
  75.         }
  76.         return $jobMarketGQL;
  77.     }
  78.     private function getStateGQL(JobMarket $jobMarket) {
  79.         /* @var $jobMarketState JobMarketState */
  80.         $jobMarketState $jobMarket->getJobMarketState();
  81.         if (empty($jobMarketState)) {
  82.             return "NOTSET";
  83.         }
  84.         $stateID $jobMarketState->getId();
  85.         switch ($stateID) {
  86.             case 1:
  87.                 return "ACTIVE";
  88.             case 2:
  89.                 return "INACTIVE";
  90.             case 3:
  91.                 return "DELETED";
  92.             case 4:
  93.                 return "DRAFT";
  94.             default:
  95.                 return "NOTSET";
  96.         }
  97.     }
  98.     private function getAdditionalInfo(JobMarket $jobMarket) {
  99.         $additionalInfoSrc $jobMarket->getAdditionalInfo();
  100.         if (empty($additionalInfoSrc)) {
  101.             return null;
  102.         }
  103.         $objJson json_decode($additionalInfoSrc);
  104.         $additionalInfoGQL = new JobMarketAdditionalInfoGQL();
  105.         $additionalInfoGQL->setFrom($objJson->from);
  106.         $additionalInfoGQL->setTo($objJson->to);
  107.         $additionalInfoGQL->setWorkFrom($objJson->workFrom);
  108.         $additionalInfoGQL->setWorkTo($objJson->workTo);
  109.         $additionalInfoGQL->setAge($objJson->age);
  110.         return $additionalInfoGQL;
  111.     }
  112.     private function getPositionType(JobMarket $jobMarket) {
  113.         $positionType $jobMarket->getJobMarketPositionType();
  114.         if (empty($positionType)) {
  115.             return null;
  116.         }
  117.         return strtoupper($positionType->getName());
  118.     }
  119.     public function getStartTypeByString($strStartType) {
  120.         $lowStartType strtolower($strStartType);
  121.         switch ($lowStartType) {
  122.             case "anytime":
  123.                 return $this->em->getRepository(JobMarketStartType::class)->find(2);
  124.             case "consent":
  125.                 return $this->em->getRepository(JobMarketStartType::class)->find(3);
  126.             case "date":
  127.                 return $this->em->getRepository(JobMarketStartType::class)->find(1);
  128.         }
  129.         return null;
  130.     }
  131.     private function getApplyType(JobMarket $jobMarket) {
  132.         $applyType $jobMarket->getJobMarketApplyType();
  133.         if (empty($applyType)) {
  134.             return null;
  135.         }
  136.         $applyTypeID $applyType->getId();
  137.         switch ($applyTypeID) {
  138.             case 1:
  139.                 return 'ONLINE';
  140.             case 2:
  141.                 return 'EMAIL';
  142.             case 3:
  143.                 return 'PHONE';
  144.             case 4:
  145.                 return 'POSTAL';
  146.         }
  147.         return '';
  148.     }
  149.     private function getStartType(JobMarket $jobMarket) {
  150.         $startType $jobMarket->getJobMarketStartType();
  151.         if (empty($startType)) {
  152.             return null;
  153.         }
  154.         $startTypeID $startType->getId();
  155.         switch ($startTypeID) {
  156.             case 1:
  157.                 return 'DATE';
  158.             case 2:
  159.                 return 'ANYTIME';
  160.             case 3:
  161.                 return 'CONSENT';
  162.         }
  163.         return '';
  164.     }
  165.     private function addAddresses(JobMarket $jobMarketJobMarketGQL $jobMarketGQL) {
  166.         $addresses $jobMarket->getAddresses();
  167.         foreach ($addresses as $address) {
  168.             $addressGQL $this->graphqlCommonHelper->getAddress($address);
  169.             $jobMarketGQL->addAddress($addressGQL);
  170.         }
  171.     }
  172.     private function addJobMarketJobs(JobMarket $jobMarketJobMarketGQL $jobMarketGQL) {
  173.         $jobsSrc $jobMarket->getJobs();
  174.         if (count($jobsSrc) == 0) {
  175.             return;
  176.         }
  177.         if (count($jobsSrc) == 1) {
  178.             $jobSimpleGQL $this->graphqlJobHelper->getJobSimple($jobsSrc[0]);
  179.             $jobMarketGQL->addJob($jobSimpleGQL);
  180.             return;
  181.         }
  182.         /* in the ui max 2 jobs can be selected */
  183.         if (count($jobsSrc) >= 2) {
  184.             /* @var $job1 Job */
  185.             $job1 $jobsSrc[0];
  186.             /* @var $job2 Job */
  187.             $job2 $jobsSrc[1];
  188.             $sort strcmp($job1->getName(), $job2->getName());
  189.             /* if sort -1 or 0 then job1 name is alphabetically before job2 name */
  190.             if ($sort 0) {
  191.                 $temp $job1;
  192.                 $job1 $job2;
  193.                 $job2 $temp;
  194.             }
  195.             $jobSimple1GQL $this->graphqlJobHelper->getJobSimple($job1);
  196.             $jobMarketGQL->addJob($jobSimple1GQL);
  197.             $jobSimple2GQL $this->graphqlJobHelper->getJobSimple($job2);
  198.             $jobMarketGQL->addJob($jobSimple2GQL);
  199.         }
  200.     }
  201.     private function addJobMarketProfile(JobMarket $jobMarketJobMarketGQL $jobMarketGQL) {
  202.         $jobMarketProfile $jobMarket->getCompanyProfile();
  203.         $companyProfile $this->graphqlCompanyHelper->getCompanyProfileJobMarket($jobMarketProfile);
  204.         $jobMarketGQL->setCompanyProfile($companyProfile);
  205.     }
  206.     private function addJobMarketImage(JobMarket $jobMarketJobMarketGQL $jobMarketGQL) {
  207.         $jobMarketImage $jobMarket->getImage();
  208.         $image $this->graphqlCommonHelper->generateThumbnails($jobMarketImage);
  209.         $jobMarketGQL->setImage($image);
  210.     }
  211.     private function addJobMarketCustomMedia(JobMarket $jobMarketJobMarketGQL $jobMarketGQL) {
  212.         /* @var $customMedia Media */
  213.         $customMedia $jobMarket->getCustomAdvertismentImage();
  214.         if (empty($customMedia)) {
  215.             return;
  216.         }
  217.         $customMediaGQL null;
  218.         /* it is only either pdf or image */
  219.         if ($customMedia->isPDF()) {
  220.             $customMediaGQL $this->graphqlCommonHelper->getMediaDocument($customMedia);
  221.         } else {
  222.             $customMediaGQL $this->graphqlCommonHelper->getMediaImage($customMedia);
  223.         }
  224.         $jobMarketGQL->setCustomMedia($customMediaGQL);
  225.     }
  226. }