src/DcSiteBundle/Controller/Subaru/CarController.php line 137

Open in your IDE?
  1. <?php
  2. namespace DcSiteBundle\Controller\Subaru;
  3. use CoreBundle\Component\CoreFormFactory;
  4. use CoreBundle\Component\FormManager;
  5. use CoreBundle\Entity\Forms;
  6. use CoreBundle\Entity\Vehicles\Vehicle;
  7. use CoreBundle\Entity\Vehicles\VehicleFile;
  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\AccessoryService;
  17. use DcSiteBundle\Services\CarInStockService;
  18. use DcSiteBundle\Services\HistoryManager;
  19. use DcSiteBundle\Services\ModelRange\Pages\PagesService;
  20. use DcSiteBundle\Services\Subaru\VehicleService;
  21. use DcSiteBundle\Services\UsedVehicleService;
  22. use DcSiteBundle\Services\VehicleViewService;
  23. use Doctrine\ORM\EntityManagerInterface;
  24. use InsuranceBundle\Model\Program;
  25. use PortalBundle\Model\SeoMetaTag;
  26. use Symfony\Component\Filesystem\Filesystem;
  27. use Symfony\Component\HttpFoundation\Request;
  28. use Symfony\Component\HttpFoundation\RequestStack;
  29. use Symfony\Component\HttpFoundation\Response;
  30. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  31. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  32. use Symfony\Component\Routing\RouterInterface;
  33. use Symfony\Contracts\Translation\TranslatorInterface;
  34. use Twig\Environment;
  35. class CarController extends MainController
  36. {
  37.     private CarInStockService $carInStockService;
  38.     private UsedVehicleService $usedVehicleService;
  39.     public function __construct(CarInStockService $carInStockServiceUsedVehicleService $usedVehicleServiceCoreFormFactory $coreFormFactorySeoMetaTag $seoMetaTagRequestStack $requestStackRouterInterface $routerFormManager $formManagerEntityManagerInterface $emApiServer1C $apiServer1CSessionInterface $sessionFilesystem $filesystemMediaExtensionVidi $mediaExtensionVidiRepository $vehicleRepositoryVehicleFactory $vehicleFactoryEnvironment $twig)
  40.     {
  41.         $this->carInStockService $carInStockService;
  42.         $this->usedVehicleService $usedVehicleService;
  43.         parent::__construct($coreFormFactory$seoMetaTag$requestStack$router$formManager$em$apiServer1C$session$filesystem$mediaExtensionVidi$vehicleRepository$vehicleFactory$twig);
  44.     }
  45.     public function car(Request                               $request$carVehicleService $vehicleSubaruServiceAccessoryService $accessoryService,
  46.                         \DcSiteBundle\Services\VehicleService $vehicleServiceHistoryManager $historyManager): Response
  47.     {
  48.         $Dealer $this->getDealer();
  49.         $vehicle $this->vehicleFactory->createByUrl($car$Dealer);
  50.         if (!$vehicle) {
  51.             throw new NotFoundHttpException();
  52.         }
  53.         $VehicleEm $vehicle->getVehicleEntity();
  54.         $vehicleColor $vehicleService->getVehicleColor($VehicleEm);
  55.         $carInStock $this->carInStockService->getCarInStockByModelWithPriority($this->getDealer(), $request->getLocale(), $VehicleEm->getModel(), 4);
  56.         $vehicleFaqs $vehicleService->getVehicleFaqs($VehicleEm);
  57.         $vehicleAccessory $accessoryService->getAccessoriesByDealerVehicleType($Dealer);
  58.         $historyManager->setUserCarHistory($this->getUser(), $vehicle->getVehicleEntity());
  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->baseSubaruRender('@DcSite/Subaru/Car/car-card.html.twig', [
  65.             'model' => $vehicle,
  66.             'vehicleColor' => $vehicleColor,
  67.             'carInStock' => $carInStock,
  68.             'faqs' => $vehicleFaqs,
  69.             'vehicleAccessory' => $vehicleAccessory,
  70.             'buyForm' => $this->CoreFormFactory()->buyForm(null$vehicle->getVehicleEntity(), nullnullfalsefalse$vehicle->getPrice())->createView(),
  71.             'buyPartsForm' => $this->CoreFormFactory()->buyPartsForm($this->getDealer())->createView(),
  72.             'testDrivePageForm' => $this->CoreFormFactory()->testDriveForm($this->getDealer(), $TdForm)->createView(),
  73.             'cars' => $vehicleSubaruService->getVehiclesForHeader($this->getDealer(), $request),
  74.             'structuredData' => $this->getCarPageStructuredData($request$vehicle),
  75.             'callMeForm' => $form->createView()
  76.         ]);
  77.     }
  78.     public function carConfiguraion(\DcSiteBundle\Services\VehicleService $vehicleService$car): ?Response
  79.     {
  80.         $Dealer $this->getDealer();
  81.         $Vehicle $this->vehicleFactory->createByUrl($car$Dealer);
  82.         if (!$Vehicle) {
  83.             throw new NotFoundHttpException();
  84.         }
  85.         $VehicleEm $Vehicle->getVehicleEntity();
  86.         $vehiclePrice $vehicleService->getVehiclePrice($VehicleEm);
  87.         $vehicleEquipment $vehicleService->getVehicleEquipment($VehicleEm);
  88.         return $this->baseSubaruRender('@DcSite/Subaru/Car/configuration.html.twig', [
  89.             'model' => $Vehicle,
  90.             'vehiclePrice' => $vehiclePrice,
  91.             'vehicleEquipment' => $vehicleEquipment,
  92.         ]);
  93.     }
  94.     public function priceList(Request $request): ?Response
  95.     {
  96.         $vehicles $this->vehicleRepository->getNewByDealer($this->getDealer());
  97.         $result = [];
  98.         /** @var Vehicle $car */
  99.         foreach ($vehicles as $car) {
  100.             $vehicleId $car->getId();
  101.             $files $car->getFiles();
  102.             if (!$files->count()) {
  103.                 continue;
  104.             }
  105.             $item = [
  106.                 'car' => $car,
  107.                 'files' => [],
  108.             ];
  109.             /** @var VehicleFile $file */
  110.             foreach ($files as $file) {
  111.                 $item['files'][] = [
  112.                     'title' => $file->getTitle($request->getLocale()),
  113.                     'href' => $this->router->generate('base_download_file', ['id' => $file->getId()])
  114.                 ];
  115.             }
  116.             $result[$vehicleId] = $item;
  117.             $position[$vehicleId] = $car->getPosition();
  118.         }
  119.         array_multisort($positionSORT_ASC$result);
  120.         return $this->baseSubaruRender('@DcSite/Subaru/Car/price-list-and-catalog.html.twig', ['cars' => $result]);
  121.     }
  122.     public function modelLineup(Request $requestPagesService $pagesService): ?Response
  123.     {
  124.         $cars $this->vehicleRepository->getNewByDealer($this->getDealer());
  125.         $result = [];
  126.         foreach ($cars as $car) {
  127.             $result[] = $this->vehicleFactory->createByEntity($car);
  128.         }
  129.         return $this->baseSubaruRender('@DcSite/Subaru/Car/model-lineup.html.twig', [
  130.             'cars' => $result,
  131.             'catalogModelRangePages' => $pagesService->setLang($request->getLocale())->getPages($this->getDealer())
  132.         ]);
  133.     }
  134.     public function listPage(Request $requestPagesService $pagesServicestring $url): ?Response
  135.     {
  136.         $page $pagesService->setLang($request->getLocale())->getPage($this->getDealer(), $url);
  137.         if (empty($page)) {
  138.             throw new NotFoundHttpException();
  139.         }
  140.         return $this->baseSubaruRender('@DcSite/Subaru/Car/catalog-page.html.twig', ['page' => $page]);
  141.     }
  142.     public function configurator(Request $requestTranslatorInterface $translator): ?Response
  143.     {
  144.         $url $request->get('url');
  145.         $Vehicle false;
  146.         if ($url != 'start') {
  147.             $Vehicle $this->vehicleFactory->createByUrl($url$this->getDealer());
  148.             if (!$Vehicle) {
  149.                 throw new NotFoundHttpException();
  150.             }
  151.         }
  152.         $hash $request->query->get('hash');
  153.         $h1Tag $Vehicle $translator->trans('base.seo.configurator.h1_car', ['%model%' => $Vehicle->getModel()->getTitle()], 'dc_toyota') : $translator->trans('base.seo.configurator.h1', [], 'dc_toyota');
  154.         return $this->baseSubaruRender('@DcSite/Subaru/Configurator/index.html.twig', [
  155.             'carId' => $Vehicle $Vehicle->getVehicleId() : 0,
  156.             'car' => $Vehicle,
  157.             'h1Tag' => $h1Tag,
  158.             'baseType' => Program::BASE_COEFFICIENT_TYPE,
  159.             'listType' => Program::LIST_COEFFICIENT_TYPE,
  160.             'optionType' => Program::OPTION_COEFFICIENT_TYPE,
  161.             'hash' => $hash,
  162.         ]);
  163.     }
  164.     public function inStockList(Request $request): ?Response
  165.     {
  166.         $vehicles $this->carInStockService->getCarInStockByDealer(
  167.             $this->getDealer(),
  168.             null,
  169.             $request->getLocale()
  170.         );
  171.         $this->carInStockService->sortVehicleByDealer($vehicles$this->getDealer()->getUniqueId());
  172.         return $this->baseSubaruRender('@DcSite/Subaru/Car/instock-lineup.html.twig', ['vehicles' => $vehicles]);
  173.     }
  174.     public function inStockSingle(Request $request$urlVehicleService $vehicleServiceInStockVehicle $inStockVehicle): Response
  175.     {
  176.         $car $inStockVehicle->createByUrl($url$this->getDealer());
  177.         if (!$car) {
  178.             $car $inStockVehicle->createByUrl($url$this->getDealer(), false);
  179.             if ($car) {
  180.                 return $this->redirectToRoute('subaru_card_car', ['car' => $car->getVehicle()->getUrl()], 301);
  181.             } else {
  182.                 return $this->redirectToRoute('subaru_car_stock', [], 301);
  183.             }
  184.         }
  185.         $options $car->getOptions($request->getLocale());
  186.         $form $this->CoreFormFactory()
  187.             ->callMeForm(new Forms(), true);
  188.         $form->get('dealer')->setData($this->getDealer());
  189.         return $this->baseSubaruRender('@DcSite/Subaru/Car/card-instock.html.twig', [
  190.             'cars' => $vehicleService->getVehiclesForHeader($this->getDealer(), $request),
  191.             'model' => $car,
  192.             'buyInStockForm' => $this->CoreFormFactory()->buyInStockForm(null$car->getInStockEntity())->createView(),
  193.             'options' => $options,
  194.             'structuredCarData' => $this->getCarStructuredDataCarInStock($request$car),
  195.             'callMeForm' => $form->createView()
  196.         ]);
  197.     }
  198.     public function testDrive(): ?Response
  199.     {
  200.         return $this->baseSubaruRender('@DcSite/Subaru/Car/test-drive.html.twig', [
  201.             'testDrivePageForm' => $this->CoreFormFactory()->testDriveForm($this->getDealer(), null, [
  202.                 'child' => false,
  203.                 'widthTime' => true
  204.             ])->createView()
  205.         ]);
  206.     }
  207.     public function archive(): ?Response
  208.     {
  209.         $vehicles $this->vehicleRepository->getDisabled($this->getDealer());
  210.         $result = [];
  211.         foreach ($vehicles as $vehicle) {
  212.             $model $this->vehicleFactory->createByEntity($vehicle);
  213.             if (!$model) {
  214.                 continue;
  215.             }
  216.             $result[] = $model;
  217.         }
  218.         return $this->baseSubaruRender('@DcSite/Subaru/Car/archive.html.twig', ['cars' => $result]);
  219.     }
  220.     public function usedCarCatalog(Request $request): ?Response
  221.     {
  222.         $vehicles $this->usedVehicleService->getUsedVehicles(
  223.             $this->getDealer(),
  224.             DealerPathEnum::SUBARU,
  225.             $request->getLocale()
  226.         );
  227.         return $this->baseSubaruRender('@DcSite/Subaru/Car/used-car-catalog.html.twig', ['vehicles' => $vehicles]);
  228.     }
  229.     public function secondhandSingle(Request $requestVehicleViewService $vehicleViewServiceCreditModel $creditModel$url): ?Response
  230.     {
  231.         if (!$url) {
  232.             throw new NotFoundHttpException();
  233.         }
  234.         $vehicle $this->vehicleFactory->createUsedByUrl($url);
  235.         if (!$vehicle) {
  236.             throw new NotFoundHttpException();
  237.         }
  238.         $vehicleViewService->saveViewVehicle($vehicle$request->getClientIp(), new DateTime());
  239.         $viewedCars = [];
  240.         if (isset($_COOKIE['viewedCars'])) {
  241.             $viewedCars json_decode($_COOKIE['viewedCars']);
  242.             if (!in_array($vehicle->getVehicleId(), $viewedCars)) {
  243.                 $viewedCars[] = $vehicle->getVehicleId();
  244.             }
  245.         } else {
  246.             setcookie('viewedCars'json_encode([$vehicle->getVehicleId()]));
  247.         }
  248.         $viewedCarEntities $this->em->getRepository(Vehicle::class)
  249.             ->findBy(['id' => array_slice(array_reverse(array_diff($viewedCars, [$vehicle->getVehicleId()])), 03)]);
  250.         $viewedCarFactories = [];
  251.         foreach ($viewedCarEntities as $viewedCarEntity) {
  252.             $viewedCarFactory $this->vehicleFactory->createByEntity($viewedCarEntity);
  253.             $galleryItems $viewedCarFactory->getGallery()
  254.                 ? $viewedCarFactory->getGallery()->getGalleryItems()
  255.                 : null;
  256.             $image $galleryItems && $galleryItems->count()
  257.                 ? $galleryItems->first()->getMedia()
  258.                 : $viewedCarFactory->getPreview();
  259.             $viewedCarFactories[] = [
  260.                 'vehicle' => $viewedCarFactory,
  261.                 'image' => $this->mediaExtensionVidi->getPath($image'reference'),
  262.                 'link' => $this->router->generate('mazda_used_car_single', ['url' => $viewedCarFactory->getUrl()]),
  263.             ];
  264.         }
  265.         $galleryItems $vehicle->getGallery()->getGalleryItems();
  266.         $gallery_images = [];
  267.         if ($galleryItems && $galleryItems->count()) {
  268.             foreach ($galleryItems as $galleryItem) {
  269.                 $gallery_images[] = $this->mediaExtensionVidi->getPath($galleryItem->getMedia(), 'reference');
  270.             }
  271.         }
  272.         $similarVehicles = [];
  273.         $similar $this->vehicleRepository->getSimilarVehicles($vehicletruefalsetrue);
  274.         foreach ($similar as $vehicleItem) {
  275.             $vehicleItemGallery $this->vehicleFactory->createByEntity($vehicleItem->getVariation()->getVehicle())->getGallery()->getGalleryItems();
  276.             $vehicleItemGalleryImages = [];
  277.             if ($vehicleItemGallery && $vehicleItemGallery->count()) {
  278.                 foreach ($vehicleItemGallery as $vehicleItemGallery_item) {
  279.                     $vehicleItemGalleryImages[] = $this->mediaExtensionVidi->getPath($vehicleItemGallery_item->getMedia(), 'reference');
  280.                 }
  281.             }
  282.             $similarVehicles[] = [
  283.                 'vehicle' => $this->vehicleFactory->createByEntity($vehicleItem->getVariation()->getVehicle()),
  284.                 'creditPayment' => $creditModel->getMinPayment($this->vehicleFactory->createByEntity($vehicleItem->getVariation()->getVehicle())),
  285.                 'link' => $this->router->generate('mazda_used_car_single', ['url' => $vehicle->getUrl()]),
  286.                 'gallery' => $vehicleItemGalleryImages
  287.             ];
  288.         }
  289.         $options $vehicle->getOptionsArray($request->getLocale());
  290.         return $this->baseSubaruRender('@DcSite/Subaru/Car/used-car-single.html.twig', [
  291.             'secondhand' => $vehicle,
  292.             'options' => $options,
  293.             'buyForm' => $this->CoreFormFactory()->buyForm(null$vehicle->getVehicleEntity(), nullnulltruefalse$vehicle->getPrice())->createView(),
  294.             'consultationForm' => $this->CoreFormFactory()->buyForm(null$vehicle->getVehicleEntity())->createView(),
  295.             'gallary' => $gallery_images,
  296.             'creditPayment' => $creditModel->getMinPayment($vehicle),
  297.             'similarCars' => $similarVehicles,
  298.             'viewedCars' => $viewedCarFactories,
  299.             'structuredCarData' => $this->getCarStructuredDataCarUsed($request$vehicle)
  300.         ]);
  301.     }
  302. }