<?php
declare(strict_types=1);
namespace AppBundle\Controller;
use AppBundle\Website\LinkGenerator\JobOfferLinkGenerator;
use Knp\Component\Pager\PaginatorInterface;
use Pimcore\Model\DataObject\JobOffer;
use Pimcore\Model\DataObject\JobOffer\Listing;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
class CareerController extends BaseController
{
public function defaultAction(): Response
{
$jobOffers = new Listing();
$pharmacies = $jobOffers->setCondition('department IN (:departments)', ['departments' => $this->getDepartments(['pharmacy'])]);
$pharmacies->setOrderKey('RAND()', false);
$pharmacies->setOrder('desc');
$pharmacies->setLimit(4);
$jobOffers = new Listing();
$offices = $jobOffers->setCondition('department IN (:departments)', ['departments' => $this->getDepartments(['office'])]);
$offices->setOrderKey('RAND()', false);
$offices->setOrder('desc');
$offices->setLimit(4);
$jobOffers = new Listing();
$warehouses = $jobOffers->setCondition('department IN (:departments)', ['departments' => $this->getDepartments(['warehouse'])]);
$warehouses->setOrderKey('RAND()', false);
$warehouses->setOrder('desc');
$warehouses->setLimit(4);
return $this->render('Career/default.html.twig', [
'pharmacies' => $pharmacies,
'offices' => $offices,
'warehouses' => $warehouses,
]);
}
/**
* @Route("{pathjoboffer}/{joboffertitle}~o{joboffer}", name="joboffer-detail", defaults={"pathjoboffer"=""}, requirements={"pathjoboffer"=".*?", "joboffertitle"="[\w-]+", "joboffer"="\d+"})
*/
public function detailAction(Request $request, JobOfferLinkGenerator $jobOfferLinkGenerator): Response
{
$jobOffer = JobOffer::getById($request->get('joboffer'));
if (!($jobOffer instanceof JobOffer && ($jobOffer->isPublished() || $this->verifyPreviewRequest($request, $jobOffer)))) {
throw new NotFoundHttpException('JobOffer not found. ID: ' . $request->get('joboffer'));
}
// $headTitleHelper($jobOffer->getTitle());
//
// $placeholderHelper('canonical')->set($jobOfferLinkGenerator->generate($jobOffer, ['document' => $this->document->getProperty('geminiCareerDefaultDocument')]));
return $this->render('Career/detail.html.twig', [
'jobOffer' => $jobOffer,
'officeDepartments' => $this->getDepartmentsFromMap('office'),
'warehouseDepartments' => $this->getDepartmentsFromMap('warehouse'),
'pharmacyDepartments' => $this->getDepartmentsFromMap('pharmacy'),
]);
}
public function listAction(Request $request, PaginatorInterface $paginator): Response
{
$voivodships = $request->get('voivodship');
$departments = $request->get('department');
$jobOffers = new Listing();
$jobOffers->setOrderKey('title');
$jobOffers->setOrder('asc');
if ($voivodships) {
$jobOffers->setCondition('countryRegion IN (:voivodships)', ['voivodships' => $voivodships]);
}
if ($departments && $voivodships) {
$jobOffers->addConditionParam('department IN (:departments)', ['departments' => $this->getDepartments($departments)], 'AND');
} elseif ($departments) {
$jobOffers->setCondition('department IN (:departments)', ['departments' => $this->getDepartments($departments)]);
}
$pagination = $paginator->paginate($jobOffers, (int) $request->get('page', 1), 16);
return $this->render('Career/list.html.twig', [
'jobOffers' => $pagination,
'paginationVariables' => $pagination->getPaginationData(),
'voivodships' => $voivodships,
'departments' => $departments,
]);
}
protected function getDepartments($departments): array
{
$conditionArray = [];
if (is_array($departments)) {
foreach ($departments as $department) {
$conditionArray = array_merge($conditionArray, $this->getDepartmentsFromMap($department));
}
} else {
$conditionArray = array_merge($conditionArray, $this->getDepartmentsFromMap($departments));
}
return $conditionArray;
}
protected function getDepartmentsFromMap(string $section): array
{
$map = [
'office' => ['Budowlany', 'eCommerce', 'Zakupy (dział Handlowy)', 'Zakupy', 'Zakupy ', 'zakupy', 'zakupy ', 'Rozwój', 'Kadry', 'Prawny', 'Kontroling', 'Sprzedaż', 'HR', 'Marketing', 'Obsługa klienta', 'IT', 'Administracja', 'Księgowość'],
'warehouse' => ['Dystrybucja Bysewska', 'Dystrybucja Trzy lipy'],
'pharmacy' => ['Apteki Stacjonarne'],
];
return $map[$section];
}
}