src/DcSiteBundle/Controller/Jaguar/MainController.php line 51

Open in your IDE?
  1. <?php
  2. namespace DcSiteBundle\Controller\Jaguar;
  3. use CoreBundle\Component\CoreFormFactory;
  4. use CoreBundle\Component\FormManager;
  5. use CoreBundle\Entity\Vehicles\Vehicle;
  6. use CoreBundle\Entity\Vehicles\VehicleFile;
  7. use CoreBundle\Factory\Vehicle as VehicleFactory;
  8. use CoreBundle\Model\Api\OnlineService\ApiServer1C;
  9. use CoreBundle\Model\Post;
  10. use CoreBundle\Model\Vehicles\Repository;
  11. use CoreBundle\Model\WinnerRate;
  12. use CoreBundle\Services\MediaExtensionVidi;
  13. use DcSiteBundle\Entity\MainSlider;
  14. use DcSiteBundle\Entity\ReplacementCarCondition;
  15. use DcSiteBundle\Entity\SalesContract;
  16. use DcSiteBundle\Entity\TermsMaintenance;
  17. use DcSiteBundle\Model\Form\ServicesOrderForm;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use Exception;
  20. use PortalBundle\Model\SeoMetaTag;
  21. use Symfony\Component\Filesystem\Filesystem;
  22. use Symfony\Component\HttpFoundation\JsonResponse;
  23. use Symfony\Component\HttpFoundation\RedirectResponse;
  24. use Symfony\Component\HttpFoundation\Request;
  25. use Symfony\Component\HttpFoundation\RequestStack;
  26. use Symfony\Component\HttpFoundation\Response;
  27. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  28. use Symfony\Component\Routing\RouterInterface;
  29. use Twig\Environment;
  30. class MainController extends BaseController
  31. {
  32.     public function __construct(CoreFormFactory $coreFormFactorySeoMetaTag $seoMetaTagRequestStack $requestStackRouterInterface $routerFormManager $formManagerEntityManagerInterface $emApiServer1C $apiServer1CSessionInterface $sessionFilesystem $filesystemMediaExtensionVidi $mediaExtensionVidiRepository $vehicleRepositoryVehicleFactory $vehicleFactoryEnvironment $twig)
  33.     {
  34.         parent::__construct($coreFormFactory$seoMetaTag$requestStack$router$formManager$em$apiServer1C$session$filesystem$mediaExtensionVidi$vehicleRepository$vehicleFactory$twig);
  35.     }
  36.     public function redirectJaguar(): RedirectResponse
  37.     {
  38.         return $this->redirectToRoute('jaguar_homepage', [], 302);
  39.     }
  40.     public function testDrivePrivacy(): ?Response
  41.     {
  42.         return $this->baseJaguarRender('@DcSite/Jaguar/td-privacy.html.twig');
  43.     }
  44.     public function index(Request $request): Response
  45.     {
  46.         $specials $this->em->getRepository(\CoreBundle\Entity\Post::class)->getActionsByDealer($this->getDealer(), null4);
  47.         $news $this->em->getRepository(\CoreBundle\Entity\Post::class)->getNewsByDealer($this->getDealer(), 4);
  48.         $sliders $this->em->getRepository(MainSlider::class)->getMainSlidersByDealer($this->getDealer());
  49.         $sliders array_map(fn($row) => [
  50.             'title' => $row->getTitle($request->getLocale()),
  51.             'subTitle' => $row->getSubTitle($request->getLocale()),
  52.             'btn' => $row->getBtnFstTitle($request->getLocale()),
  53.             'url' => $row->getUrl(),
  54.             'image' => $this->mediaExtensionVidi->getPath($row->getImage(), 'reference'),
  55.             'image_webp' => $this->mediaExtensionVidi->pathWebp($row->getImage(), 'reference'),
  56.             'image_mobile' => $this->mediaExtensionVidi->getPath($row->getImageMobile(), 'reference'),
  57.             'image_webp_mobile' => $this->mediaExtensionVidi->pathWebp($row->getImageMobile(), 'reference')
  58.         ], $sliders);
  59.         $cars $this->vehicleRepository->getNewByDealer($this->getDealer());
  60.         $cars array_reduce($cars, function ($rows$row) {
  61.             try {
  62.                 $row $this->vehicleFactory->createByEntity($row);
  63.                 if (empty($row)) {
  64.                     return $rows;
  65.                 }
  66.                 $rows[] = [
  67.                     'vehicleId' => $row->getVehicleId(),
  68.                     'isNew' => $row->isNew(),
  69.                     'fullName' => $row->getFullName(),
  70.                     'price' => round($row->price()),
  71.                     'url' => $row->getUrl(),
  72.                     'image' => $row->getPreviewPath('reference'),
  73.                     'image_webp' => $row->getPreviewPathWebp('reference')
  74.                 ];
  75.                 return $rows;
  76.             } catch (Exception $e) {
  77.                 return $rows;
  78.             }
  79.         }, []);
  80.         return $this->baseJaguarRender('@DcSite/Jaguar/Main/index.html.twig', [
  81.             'buyInStockForm' => $this->CoreFormFactory()->buyInStockForm()->createView(),
  82.             'cars' => $cars,
  83.             'news' => $news,
  84.             'specials' => $specials,
  85.             'sliders' => $sliders,
  86.         ]);
  87.     }
  88.     public function modelLineup(): ?Response
  89.     {
  90.         $vehicles $this->vehicleRepository->getNewByDealer($this->getDealer());
  91.         $result = [];
  92.         foreach ($vehicles as $vehicle) {
  93.             $result[] = $this->vehicleFactory->createByEntity($vehicle);
  94.         }
  95.         $specials $this->em->getRepository(\CoreBundle\Entity\Post::class)->getActionsByDealer($this->getDealer(), null4);
  96.         $news $this->em->getRepository(\CoreBundle\Entity\Post::class)->getNewsByDealer($this->getDealer(), 4);
  97.         $sliders $this->em->getRepository(MainSlider::class)->getMainSlidersByDealer($this->getDealer());
  98.         return $this->baseJaguarRender('@DcSite/Jaguar/model-lineup.html.twig', [
  99.             'buyInStockForm' => $this->CoreFormFactory()->buyInStockForm()->createView(),
  100.             'cars' => $result,
  101.             'news' => $news,
  102.             'specials' => $specials,
  103.             'sliders' => $sliders,
  104.         ]);
  105.     }
  106.     public function notFound(): ?Response
  107.     {
  108.         $Response = new Response();
  109.         $Response->setStatusCode(Response::HTTP_NOT_FOUND);
  110.         return $this->baseJaguarRender('@DcSite/Jaguar/404.html.twig', [], $Response);
  111.     }
  112.     public function specialOffers(): ?Response
  113.     {
  114.         $specialsCars $this->em->getRepository(\CoreBundle\Entity\Post::class)->getActionsByDealer($this->getDealer(), Post::ACTION_TYPE_CAR);
  115.         $specialsService $this->em->getRepository(\CoreBundle\Entity\Post::class)->getActionsByDealer($this->getDealer(), Post::ACTION_TYPE_SERVICE);
  116.         return $this->baseJaguarRender('@DcSite/Jaguar/Specials/special-offers.html.twig', [
  117.             'specialsCars' => $specialsCars,
  118.             'specialsService' => $specialsService,
  119.         ]);
  120.     }
  121.     public function specialOffersSingle(Request $requestPost $postModel$url): ?Response
  122.     {
  123.         $post $postModel->initByUrl($this->getDealer(), $url);
  124.         return $this->baseJaguarRender('@DcSite/Jaguar/Specials/special-offers-single.html.twig', [
  125.             'post' => $post,
  126.             'serviceOrderForm' => $this->CoreFormFactory()->servicesOrderForm(ServicesOrderForm::LEASING$request->getLocale())->createView()
  127.         ]);
  128.     }
  129.     public function menuInit(Request $requestWinnerRate $winnerRate): JsonResponse
  130.     {
  131.         $vehicles $this->vehicleRepository->getNewByDealer($this->getDealer());
  132.         $rate $winnerRate->getRateWinner($this->getDealer());
  133.         $data = [];
  134.         $position = [];
  135.         /** @var $vehicle Vehicle */
  136.         foreach ($vehicles as $vehicle) {
  137.             $vehicleModel $this->vehicleFactory->createByEntity($vehicle);
  138.             if (!$vehicleModel) {
  139.                 continue;
  140.             }
  141.             $vehicleId $vehicleModel->getVehicleId();
  142.             $data[$vehicleId] = [
  143.                 'id' => $vehicleId,
  144.                 'name' => $vehicleModel->getModelName(),
  145.                 'modelName' => $vehicleModel->getModelName(),
  146.                 'preview' => $vehicleModel->getPreviewPath('big'),
  147.                 'preview_webp' => $vehicleModel->getPreviewPathWebp('reference'),
  148.                 'price' => $vehicleModel->price(),
  149.                 'isNew' => $vehicleModel->isNew(),
  150.                 'isPreOrder' => $vehicleModel->isPreOrder(),
  151.                 'slogan' => $vehicleModel->getSlogan($request->getLocale()),
  152.                 'url' => $vehicleModel->getUrl(),
  153.                 'link' => $this->router->generate('jaguar_card_car', ['car' => $vehicleModel->getUrl()]),
  154.                 'linkCarConfiguration' => $this->router->generate('jaguar_card_car_configuraion', ['car' => $vehicleModel->getUrl()]),
  155.                 'configuratorPath' => $this->router->generate('jaguar_car_configurator', ['url' => $vehicleModel->getUrl()]),
  156.             ];
  157.             $position[$vehicleId] = $vehicle->getPosition();
  158.         }
  159.         array_multisort($positionSORT_ASC$data);
  160.         return $this->json(['success' => true'data' => $data'rate' => $rate'date' => date('d.m.Y')]);
  161.     }
  162.     public function conditions(): ?Response
  163.     {
  164.         $filesByType $this->em->getRepository(SalesContract::class)->getFilesByTypes($this->getDealer());
  165.         return $this->baseJaguarRender('@DcSite/Jaguar/conditions-of-sales.html.twig', [
  166.             'filesByType' => $filesByType
  167.         ]);
  168.     }
  169.     public function termsMaintenance(): ?Response
  170.     {
  171.         $files $this->em->getRepository(TermsMaintenance::class)->findBy(['dealer' => $this->getDealer()], ['begin_date' => 'ASC']);
  172.         return $this->baseJaguarRender('@DcSite/Jaguar/terms-maintenance.html.twig', [
  173.             'mainFile' => array_pop($files),
  174.             'files' => $files,
  175.             'dealer' => $this->getDealer(),
  176.         ]);
  177.     }
  178.     public function cokie(): ?Response
  179.     {
  180.         return $this->baseJaguarRender('@DcSite/Jaguar/cokie-and-privacy-policy.html.twig');
  181.     }
  182.     public function broshure(Request $request): ?Response
  183.     {
  184.         $vehicles $this->vehicleRepository->getNewByDealer($this->getDealer());
  185.         $result = [];
  186.         /** @var Vehicle $car */
  187.         foreach ($vehicles as $car) {
  188.             $files $car->getFiles();
  189.             if (!$files->count()) {
  190.                 continue;
  191.             }
  192.             $item = [
  193.                 'car' => $car,
  194.                 'files' => [],
  195.             ];
  196.             /** @var VehicleFile $file */
  197.             foreach ($files as $file) {
  198.                 $item['files'][] = [
  199.                     'title' => $file->getTitle($request->getLocale()),
  200.                     'href' => $this->router->generate('base_download_file', ['id' => $file->getId()])
  201.                 ];
  202.             }
  203.             $result[] = $item;
  204.         }
  205.         return $this->baseJaguarRender('@DcSite/Jaguar/broshure.html.twig', ['cars' => $result]);
  206.     }
  207.     public function personalProposition(): ?Response
  208.     {
  209.         return $this->baseJaguarRender('@DcSite/Jaguar/personal-proposition.html.twig');
  210.     }
  211.     public function termsReplacement(): ?Response
  212.     {
  213.         $files $this->em->getRepository(ReplacementCarCondition::class)->findBy(['dealer' => $this->getDealer()], ['begin_date' => 'DESC']);
  214.         return $this->baseJaguarRender('@DcSite/Jaguar/Terms/terms-providing-replacement-car.html.twig', [
  215.             'files' => $files,
  216.         ]);
  217.     }
  218. }