src/DcSiteBundle/Controller/Opel/CarController.php line 52

Open in your IDE?
  1. <?php
  2. namespace DcSiteBundle\Controller\Opel;
  3. use CoreBundle\Component\CoreFormFactory;
  4. use CoreBundle\Component\FormManager;
  5. use CoreBundle\Entity\Forms;
  6. use CoreBundle\Entity\Vehicles\Category;
  7. use CoreBundle\Entity\Vehicles\Vehicle;
  8. use CoreBundle\Factory\InStockVehicle;
  9. use CoreBundle\Factory\Vehicle as VehicleFactory;
  10. use CoreBundle\Model\Api\OnlineService\ApiServer1C;
  11. use CoreBundle\Model\Vehicles\Repository;
  12. use CoreBundle\Services\MediaExtensionVidi;
  13. use DateTime;
  14. use DcSiteBundle\Enum\DealerPathEnum;
  15. use DcSiteBundle\Model\CreditModel;
  16. use DcSiteBundle\Services\CarInStockService;
  17. use DcSiteBundle\Services\CatalogService;
  18. use DcSiteBundle\Services\HistoryManager;
  19. use DcSiteBundle\Services\ModelRange\Pages\PagesService;
  20. use DcSiteBundle\Services\UsedVehicleService;
  21. use DcSiteBundle\Services\VehicleService;
  22. use DcSiteBundle\Services\VehicleViewService;
  23. use Doctrine\ORM\EntityManagerInterface;
  24. use PortalBundle\Model\SeoMetaTag;
  25. use Symfony\Component\Filesystem\Filesystem;
  26. use Symfony\Component\HttpFoundation\Request;
  27. use Symfony\Component\HttpFoundation\RequestStack;
  28. use Symfony\Component\HttpFoundation\Response;
  29. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  30. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  31. use Symfony\Component\Routing\RouterInterface;
  32. use Twig\Environment;
  33. class CarController extends BaseController
  34. {
  35.     private CarInStockService $carInStockService;
  36.     private UsedVehicleService $usedVehicleService;
  37.     private CatalogService $catalogService;
  38.     public function __construct(CarInStockService $carInStockServiceUsedVehicleService $usedVehicleServiceCatalogService $catalogServiceCoreFormFactory $coreFormFactorySeoMetaTag $seoMetaTagRequestStack $requestStackRouterInterface $routerFormManager $formManagerEntityManagerInterface $emApiServer1C $apiServer1CSessionInterface $sessionFilesystem $filesystemMediaExtensionVidi $mediaExtensionVidiRepository $vehicleRepositoryVehicleFactory $vehicleFactoryEnvironment $twig)
  39.     {
  40.         $this->carInStockService $carInStockService;
  41.         $this->usedVehicleService $usedVehicleService;
  42.         $this->catalogService $catalogService;
  43.         parent::__construct($coreFormFactory$seoMetaTag$requestStack$router$formManager$em$apiServer1C$session$filesystem$mediaExtensionVidi$vehicleRepository$vehicleFactory$twig);
  44.     }
  45.     public function car(Request $requestVehicleService $vehicleServiceHistoryManager $historyManager$car): ?Response
  46.     {
  47.         $Dealer $this->getDealer();
  48.         $vehicle $this->vehicleFactory->createByUrl($car$Dealer);
  49.         if (!$vehicle) {
  50.             throw new NotFoundHttpException();
  51.         }
  52.         $vehicleEm $vehicle->getVehicleEntity();
  53.         $vehiclePrice $vehicleService->getVehiclePrice($vehicleEm);
  54.         $vehicleEquipment $vehicleService->getVehicleEquipment($vehicleEm);
  55.         $vehicleColor $vehicleService->getVehicleColor($vehicleEm);
  56.         $vehicleFaqs $vehicleService->getVehicleFaqs($vehicleEm);
  57.         $carInStock $this->carInStockService->getCarInStockByModel($this->getDealer(), $request->getLocale(), $vehicleEm->getModel(), 4);
  58.         $historyManager->setUserCarHistory($this->getUser(), $vehicleEm);
  59.         $TdForm = new Forms();
  60.         $TdForm->setVehicle($vehicle->getVehicleEntity());
  61.         $form $this->CoreFormFactory()
  62.             ->callMeForm(new Forms(), true);
  63.         $form->get('dealer')->setData($this->getDealer());
  64.         return $this->baseOpelRender('@DcSite/Opel/Car/car-card.html.twig', [
  65.             'model' => $vehicle,
  66.             'vehiclePrice' => $vehiclePrice,
  67.             'vehicleEquipment' => $vehicleEquipment,
  68.             'vehicleColor' => $vehicleColor,
  69.             'carInStock' => $carInStock,
  70.             'faqs' => $vehicleFaqs,
  71.             'buyForm' => $this->CoreFormFactory()->buyForm(null$vehicle->getVehicleEntity(), nullnullfalsefalse$vehicle->getPrice())->createView(),
  72.             'buyPartsForm' => $this->CoreFormFactory()->buyPartsForm($this->getDealer())->createView(),
  73.             'testDrivePageForm' => $this->CoreFormFactory()->testDriveForm($this->getDealer(), $TdForm)->createView(),
  74.             'structuredData' => $this->getCarPageStructuredData($request$vehicle),
  75.             'leasingCalculatorForm' => $this->CoreFormFactory()->leasingForm()->createView(),
  76.             'callMeForm' => $form->createView()
  77.         ]);
  78.     }
  79.     public function carConfiguraion(VehicleService $vehicleService$car): ?Response
  80.     {
  81.         $Dealer $this->getDealer();
  82.         $Vehicle $this->vehicleFactory->createByUrl($car$Dealer);
  83.         if (!$Vehicle) {
  84.             throw new NotFoundHttpException();
  85.         }
  86.         $vehicleEm $Vehicle->getVehicleEntity();
  87.         $vehicleCharacteristic $vehicleService->getVehicleCharacteristic($vehicleEm);
  88.         return $this->baseOpelRender('@DcSite/Opel/Car/configuration.html.twig', [
  89.             'model' => $Vehicle,
  90.             'vehicleCharacteristic' => $vehicleCharacteristic,
  91.         ]);
  92.     }
  93.     public function list(Request $requestPagesService $pagesService): ?Response
  94.     {
  95.         $catalog $this->catalogService->getCategoryVehicles($this->getDealer());
  96.         $catalogVehicle $this->catalogService->getCatalogVehicleByCategory($this->getDealer());
  97.         return $this->baseOpelRender('@DcSite/Opel/Car/catalog.html.twig', [
  98.             'category' => null,
  99.             'catalog' => $catalog,
  100.             'catalogVehicle' => $catalogVehicle,
  101.             'catalogModelRangePages' => $pagesService->setLang($request->getLocale())->getPages($this->getDealer())
  102.         ]);
  103.     }
  104.     public function listPage(Request $requestPagesService $pagesServicestring $url): ?Response
  105.     {
  106.         $page $pagesService
  107.             ->setLang($request->getLocale())
  108.             ->getPage($this->getDealer(), $url);
  109.         if (empty($page)) {
  110.             throw new NotFoundHttpException();
  111.         }
  112.         return $this->baseOpelRender('@DcSite/Opel/Car/catalog-page.html.twig', ['page' => $page]);
  113.     }
  114.     public function category(Request $requestPagesService $pagesService$category): ?Response
  115.     {
  116.         $vehicleCategory $this->em->getRepository(Category::class)->findOneBy(['url' => $category]);
  117.         if (!$vehicleCategory) {
  118.             throw new NotFoundHttpException();
  119.         }
  120.         $catalog $this->catalogService->getCategoryVehicles($this->getDealer());
  121.         $catalogVehicle $this->catalogService->getCatalogVehicleByCategory($this->getDealer(), $category);
  122.         $category $this->catalogService->getCatalogCategory($catalog$category);
  123.         return $this->baseOpelRender('@DcSite/Opel/Car/catalog.html.twig', [
  124.             'category' => $category,
  125.             'catalog' => $catalog,
  126.             'catalogVehicle' => $catalogVehicle,
  127.             'catalogModelRangePages' => $pagesService
  128.                 ->setLang($request->getLocale())
  129.                 ->getPages($this->getDealer())
  130.         ]);
  131.     }
  132.     public function commercialList(): Response
  133.     {
  134.         $models $this->vehicleRepository->getNewByDealer($this->getDealer());
  135.         $result = [];
  136.         /** @var Vehicle $model */
  137.         foreach ($models as $model) {
  138.             if ($model->getCategory()->getId() != 4) {
  139.                 continue;
  140.             }
  141.             $model $this->vehicleFactory->createByEntity($model);
  142.             if (!$model) {
  143.                 continue;
  144.             }
  145.             array_push($result, [
  146.                 'title' => $model->getModelName(),
  147.                 'isNew' => $model->isNew(),
  148.                 'isPreOrder' => $model->isPreOrder(),
  149.                 'image' => $model->getPreview(),
  150.                 'price' => $model->price(),
  151.                 'url' => $model->getUrl()
  152.             ]);
  153.         }
  154.         return $this->baseOpelRender('@DcSite/Opel/Car/comercial-list.html.twig', [
  155.             'models' => $result
  156.         ]);
  157.     }
  158.     public function carInStock(Request $request): ?Response
  159.     {
  160.         $vehicles $this->carInStockService->getCarInStockByDealer(
  161.             $this->getDealer(),
  162.             null,
  163.             $request->getLocale()
  164.         );
  165.         $this->carInStockService->sortVehicleByDealer($vehicles$this->getDealer()->getUniqueId());
  166.         return $this->baseOpelRender('@DcSite/Opel/Car/car-in-stocks.html.twig', ['vehicles' => $vehicles]);
  167.     }
  168.     public function carInStockSingle(Request $requestInStockVehicle $inStockVehicleFactory$url): ?Response
  169.     {
  170.         $car $inStockVehicleFactory->createByUrl($url$this->getDealer());
  171.         if (!$car) {
  172.             throw new NotFoundHttpException();
  173.         }
  174.         $options $car->getOptions($request->getLocale());
  175.         $form $this->CoreFormFactory()
  176.             ->callMeForm(new Forms(), true);
  177.         $form->get('dealer')->setData($this->getDealer());
  178.         return $this->baseOpelRender('@DcSite/Opel/Car/car-in-stock-card.html.twig', [
  179.             'model' => $car,
  180.             'buyInStockForm' => $this->CoreFormFactory()->buyInStockForm(null$car->getInStockEntity())->createView(),
  181.             'options' => $options,
  182.             'structuredCarData' => $this->getCarStructuredDataCarInStock($request$car),
  183.             'callMeForm' => $form->createView()
  184.         ]);
  185.     }
  186.     public function archive(): ?Response
  187.     {
  188.         $vehicles $this->vehicleRepository->getDisabled($this->getDealer());
  189.         $result = [];
  190.         foreach ($vehicles as $vehicle) {
  191.             $model $this->vehicleFactory->createByEntity($vehicle);
  192.             if (!$model) {
  193.                 continue;
  194.             }
  195.             $result[] = $model;
  196.         }
  197.         return $this->baseOpelRender('@DcSite/Opel/Car/archive.html.twig', ['cars' => $result]);
  198.     }
  199.     public function usedCarCatalog(Request $request): ?Response
  200.     {
  201.         $vehicles $this->usedVehicleService->getUsedVehicles(
  202.             $this->getDealer(),
  203.             DealerPathEnum::OPEL,
  204.             $request->getLocale()
  205.         );
  206.         return $this->baseOpelRender('@DcSite/Opel/Car/used-car-catalog.html.twig', ['vehicles' => $vehicles]);
  207.     }
  208.     public function secondhandSingle(Request $requestCreditModel $creditModelVehicleViewService $vehicleViewService$url): Response
  209.     {
  210.         if (!$url) {
  211.             throw new NotFoundHttpException();
  212.         }
  213.         $vehicle $this->vehicleFactory->createUsedByUrl($url);
  214.         if (!$vehicle) {
  215.             throw new NotFoundHttpException();
  216.         }
  217.         $vehicleViewService->saveViewVehicle($vehicle$request->getClientIp(), new DateTime());
  218.         $viewedCars = [];
  219.         if (isset($_COOKIE['viewedCars'])) {
  220.             $viewedCars json_decode($_COOKIE['viewedCars']);
  221.             if (!in_array($vehicle->getVehicleId(), $viewedCars)) {
  222.                 $viewedCars[] = $vehicle->getVehicleId();
  223.             }
  224.         } else {
  225.             setcookie('viewedCars'json_encode([$vehicle->getVehicleId()]));
  226.         }
  227.         $viewedCarEntities $this->em->getRepository(Vehicle::class)
  228.             ->findBy(['id' => array_slice(array_reverse(array_diff($viewedCars, [$vehicle->getVehicleId()])), 03)]);
  229.         $viewedCarFactories = [];
  230.         foreach ($viewedCarEntities as $viewedCarEntity) {
  231.             $viewedCarFactory $this->vehicleFactory->createByEntity($viewedCarEntity);
  232.             $galleryItems $viewedCarFactory->getGallery()
  233.                 ? $viewedCarFactory->getGallery()->getGalleryItems()
  234.                 : null;
  235.             $image $galleryItems && $galleryItems->count()
  236.                 ? $galleryItems->first()->getMedia()
  237.                 : $viewedCarFactory->getPreview();
  238.             $viewedCarFactories[] = [
  239.                 'vehicle' => $viewedCarFactory,
  240.                 'image' => $this->mediaExtensionVidi->getPath($image'reference'),
  241.                 'link' => $this->router->generate('opel_used_car_single', ['url' => $viewedCarFactory->getUrl()]),
  242.             ];
  243.         }
  244.         $galleryItems $vehicle->getGallery()->getGalleryItems();
  245.         $gallery_images = [];
  246.         if ($galleryItems && $galleryItems->count()) {
  247.             foreach ($galleryItems as $galleryItem) {
  248.                 $gallery_images[] = $this->mediaExtensionVidi->getPath($galleryItem->getMedia(), 'reference');
  249.             }
  250.         }
  251.         $similarVehicles = [];
  252.         $similar $this->vehicleRepository->getSimilarVehicles($vehicletruefalsetrue);
  253.         foreach ($similar as $vehicleItem) {
  254.             $vehicleItemHasGallery $this->vehicleFactory->createByEntity($vehicleItem->getVariation()->getVehicle())->getGallery();
  255.             $vehicleItemGallery null;
  256.             if ($vehicleItemHasGallery) {
  257.                 $vehicleItemGallery $vehicleItemHasGallery->getGalleryItems();
  258.             }
  259.             $vehicleItemGalleryImages = [];
  260.             if ($vehicleItemGallery && $vehicleItemGallery->count()) {
  261.                 foreach ($vehicleItemGallery as $vehicleItemGallery_item) {
  262.                     $vehicleItemGalleryImages[] = $this->mediaExtensionVidi->getPath($vehicleItemGallery_item->getMedia(), 'reference');
  263.                 }
  264.             }
  265.             $similarVehicles[] = [
  266.                 'vehicle' => $this->vehicleFactory->createByEntity($vehicleItem->getVariation()->getVehicle()),
  267.                 'creditPayment' => $creditModel->getMinPayment($this->vehicleFactory->createByEntity($vehicleItem->getVariation()->getVehicle())),
  268.                 'link' => $this->router->generate('opel_used_car_single', ['url' => $vehicle->getUrl()]),
  269.                 'gallery' => $vehicleItemGalleryImages
  270.             ];
  271.         }
  272.         $options $vehicle->getOptionsArray($request->getLocale());
  273.         return $this->baseOpelRender('@DcSite/Opel/Car/used-car-single.html.twig', [
  274.             'secondhand' => $vehicle,
  275.             'options' => $options,
  276.             'buyForm' => $this->CoreFormFactory()->buyForm(null$vehicle->getVehicleEntity(), nullnulltruefalse$vehicle->getPrice())->createView(),
  277.             'consultationForm' => $this->CoreFormFactory()->buyForm(null$vehicle->getVehicleEntity())->createView(),
  278.             'gallary' => $gallery_images,
  279.             'creditPayment' => $creditModel->getMinPayment($vehicle),
  280.             'similarCars' => $similarVehicles,
  281.             'viewedCars' => $viewedCarFactories,
  282.             'structuredCarData' => $this->getCarStructuredDataCarUsed($request$vehicle)
  283.         ]);
  284.     }
  285. }