src/DcSiteBundle/Controller/Honda/CarController.php line 315

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