src/DcSiteBundle/Controller/LandRover/CarController.php line 94

Open in your IDE?
  1. <?php
  2. namespace DcSiteBundle\Controller\LandRover;
  3. use CoreBundle\Component\CoreFormFactory;
  4. use CoreBundle\Component\FormManager;
  5. use CoreBundle\Entity\Forms;
  6. use CoreBundle\Factory\InStockVehicle;
  7. use CoreBundle\Factory\Vehicle as VehicleFactory;
  8. use CoreBundle\Model\Api\OnlineService\ApiServer1C;
  9. use CoreBundle\Model\DealerModel;
  10. use CoreBundle\Model\Vehicles\Repository;
  11. use CoreBundle\Model\WinnerRate;
  12. use CoreBundle\Services\MediaExtensionVidi;
  13. use DcSiteBundle\Services\AccessoryService;
  14. use DcSiteBundle\Services\CarInStockService;
  15. use DcSiteBundle\Services\HistoryManager;
  16. use DcSiteBundle\Services\UsedVehicleService;
  17. use DcSiteBundle\Services\VehicleService;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use Doctrine\ORM\NonUniqueResultException;
  20. use InsuranceBundle\Model\Program;
  21. use PortalBundle\Model\SeoMetaTag;
  22. use Symfony\Component\Filesystem\Filesystem;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\HttpFoundation\RequestStack;
  25. use Symfony\Component\HttpFoundation\Response;
  26. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  27. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  28. use Symfony\Component\Routing\RouterInterface;
  29. use Twig\Environment;
  30. use Twig\Error\Error;
  31. use Twig_Error_Loader;
  32. use Twig_Error_Runtime;
  33. use Twig_Error_Syntax;
  34. /**
  35.  * Class CarController
  36.  * @package DcSiteBundle\Controller\LandRover
  37.  */
  38. class CarController extends BaseController
  39. {
  40.     const USED_DEALER 6;
  41.     private CarInStockService $carInStockService;
  42.     private UsedVehicleService $usedVehicleService;
  43.     public function __construct(CarInStockService $carInStockServiceUsedVehicleService $usedVehicleServiceCoreFormFactory $coreFormFactorySeoMetaTag $seoMetaTagRequestStack $requestStackRouterInterface $routerFormManager $formManagerEntityManagerInterface $emApiServer1C $apiServer1CSessionInterface $sessionFilesystem $filesystemMediaExtensionVidi $mediaExtensionVidiRepository $vehicleRepositoryVehicleFactory $vehicleFactoryEnvironment $twig)
  44.     {
  45.         $this->carInStockService $carInStockService;
  46.         $this->usedVehicleService $usedVehicleService;
  47.         parent::__construct($coreFormFactory$seoMetaTag$requestStack$router$formManager$em$apiServer1C$session$filesystem$mediaExtensionVidi$vehicleRepository$vehicleFactory$twig);
  48.     }
  49.     public function car(Request $requestVehicleService $vehicleServiceHistoryManager $historyManagerAccessoryService $accessoryService$car): ?Response
  50.     {
  51.         $Dealer $this->getDealer();
  52.         $vehicle $this->vehicleFactory->createByUrl($car$Dealer);
  53.         if (!$vehicle) {
  54.             throw new NotFoundHttpException();
  55.         }
  56.         $VehicleEm $vehicle->getVehicleEntity();
  57.         $vehicleColor $vehicleService->getVehicleColor($VehicleEm);
  58.         $carInStock $this->carInStockService->getCarInStockByModel($this->getDealer(), $request->getLocale(), $VehicleEm->getModel(), 4);
  59.         $vehicleFaqs $vehicleService->getVehicleFaqs($VehicleEm);
  60.         $vehicleAccessory $accessoryService->getAccessoriesByDealerVehicleType($Dealer);
  61.         $historyManager->setUserCarHistory($this->getUser(), $vehicle->getVehicleEntity());
  62.         $TdForm = new Forms();
  63.         $TdForm->setVehicle($vehicle->getVehicleEntity());
  64.         $form $this->CoreFormFactory()
  65.             ->callMeForm(new Forms(), true);
  66.         $form->get('dealer')->setData($this->getDealer());
  67.         return $this->baseLandRoverRender('@DcSite/LandRover/Car/car-card.html.twig', [
  68.             'model' => $vehicle,
  69.             'vehicleColor' => $vehicleColor,
  70.             'carInStock' => $carInStock,
  71.             'faqs' => $vehicleFaqs,
  72.             'vehicleAccessory' => $vehicleAccessory,
  73.             'buyForm' => $this->CoreFormFactory()->buyForm(null$vehicle->getVehicleEntity(), nullnullfalsefalse$vehicle->getPrice())->createView(),
  74.             'buyPartsForm' => $this->CoreFormFactory()->buyPartsForm($this->getDealer())->createView(),
  75.             'testDrivePageForm' => $this->CoreFormFactory()->testDriveForm($this->getDealer(), $TdForm)->createView(),
  76.             'structuredData' => $this->getCarPageStructuredData($request$vehicle),
  77.             'callMeForm' => $form->createView()
  78.         ]);
  79.     }
  80.     public function carConfiguraion(VehicleService $vehicleService$car): ?Response
  81.     {
  82.         $Dealer $this->getDealer();
  83.         $Vehicle $this->vehicleFactory->createByUrl($car$Dealer);
  84.         if (!$Vehicle) {
  85.             throw new NotFoundHttpException();
  86.         }
  87.         $VehicleEm $Vehicle->getVehicleEntity();
  88.         $vehiclePrice $vehicleService->getVehiclePrice($VehicleEm);
  89.         $vehicleEquipment $vehicleService->getVehicleEquipment($VehicleEm);
  90.         return $this->baseLandRoverRender('@DcSite/LandRover/Car/configuration.html.twig', [
  91.             'model' => $Vehicle,
  92.             'vehiclePrice' => $vehiclePrice,
  93.             'vehicleEquipment' => $vehicleEquipment,
  94.         ]);
  95.     }
  96.     public function modelLineup(Request $request): ?Response
  97.     {
  98.         $vehicles $this->carInStockService->getCarInStockByDealer(
  99.             $this->getDealer(),
  100.             null,
  101.             $request->getLocale()
  102.         );
  103.         $this->carInStockService->sortVehicleByDealer($vehicles$this->getDealer()->getUniqueId());
  104.         return $this->baseLandRoverRender('@DcSite/LandRover/Car/model-lineup.html.twig', [
  105.             'buyInStockForm' => $this->CoreFormFactory()->buyInStockForm()->createView(),
  106.             'vehicles' => $vehicles
  107.         ]);
  108.     }
  109.     public function carInStock(Request $requestInStockVehicle $inStockVehicle$url)
  110.     {
  111.         $car $inStockVehicle->createByUrl($url$this->getDealer());
  112.         if (!$car) {
  113.             $car $inStockVehicle->createByUrl($url$this->getDealer(), false);
  114.             if ($car) {
  115.                 return $this->redirectToRoute('landrover_card_car', ['car' => $car->getVehicle()->getUrl()], 301);
  116.             } else {
  117.                 return $this->redirectToRoute('landrover_car_stock', [], 301);
  118.             }
  119.         }
  120.         $options $car->getOptions($request->getLocale());
  121.         $form $this->CoreFormFactory()
  122.             ->callMeForm(new Forms(), true);
  123.         $form->get('dealer')->setData($this->getDealer());
  124.         return $this->baseLandRoverRender('@DcSite/LandRover/Car/in-stock-single.html.twig', [
  125.             'model' => $car,
  126.             'buyInStockForm' => $this->CoreFormFactory()->buyInStockForm(null$car->getInStockEntity())->createView(),
  127.             'options' => $options,
  128.             'structuredCarData' => $this->getCarStructuredDataCarInStock($request$car),
  129.             'callMeForm' => $form->createView()
  130.         ]);
  131.     }
  132.     public function configurator(Request $request$url): ?Response
  133.     {
  134.         $Car false;
  135.         if ($url !== 'start') {
  136.             $Car $this->vehicleFactory->createByUrl($url$this->getDealer());
  137.             if (!$Car) {
  138.                 throw new NotFoundHttpException();
  139.             }
  140.         }
  141.         $hash $request->query->get('hash');
  142.         return $this->baseLandRoverRender('@DcSite/LandRover/Configurator/index.html.twig', [
  143.             'carId' => $Car $Car->getVehicleId() : 0,
  144.             'baseType' => Program::BASE_COEFFICIENT_TYPE,
  145.             'listType' => Program::LIST_COEFFICIENT_TYPE,
  146.             'optionType' => Program::OPTION_COEFFICIENT_TYPE,
  147.             'hash' => $hash,
  148.         ]);
  149.     }
  150.     public function testDrive(): ?Response
  151.     {
  152.         return $this->baseLandRoverRender('@DcSite/LandRover/Car/test-drive.html.twig', [
  153.             'testDrivePageForm' => $this->CoreFormFactory()->testDriveForm($this->getDealer(), null, [
  154.                 'child' => false,
  155.                 'widthTime' => true,
  156.                 'privacyUrl' => $this->router->generate('landrover_cokie')
  157.             ])->createView()
  158.         ]);
  159.     }
  160.     public function used(Request $request): Response
  161.     {
  162.         $vehicles $this->usedVehicleService->getUsedVehiclesForLandRover($this->getDealer(), $request->getLocale(), true);
  163.         return $this->baseLandRoverRender('@DcSite/LandRover/Used/used.html.twig', ['vehicles' => array_slice($vehicles08)]);
  164.     }
  165.     public function usedCard(Request $requestWinnerRate $winnerRate$id): ?Response
  166.     {
  167.         $vehicle $this->vehicleFactory->createById($id);
  168.         if (!$vehicle) {
  169.             throw new NotFoundHttpException();
  170.         }
  171.         $rate $winnerRate->getRateWinner($this->getDealer());
  172.         if ($vehicle->getDealer()->getId() === DealerModel::SECOND_HAND_DEALER) {
  173.             $priceEU $vehicle->price() / $this->getDealer()->getRate();
  174.         } else {
  175.             $priceEU $vehicle->getVehicleItemPrice();
  176.         }
  177.         return $this->baseLandRoverRender('@DcSite/LandRover/Used/card-used.html.twig', [
  178.             'vehicle' => $vehicle,
  179.             'consultationForm' => $this->CoreFormFactory()->buyForm(null$vehicle->getVehicleEntity(), nullnulltruefalse$vehicle->getPrice())->createView(),
  180.             'priceUA' => $vehicle->price(),
  181.             'priceEU' => $priceEU,
  182.             'structuredCarData' => $this->getCarStructuredDataCarUsed($request$vehicle)
  183.         ]);
  184.     }
  185.     public function archive(): ?Response
  186.     {
  187.         $vehicles $this->vehicleRepository->getDisabled($this->getDealer());
  188.         $result = [];
  189.         foreach ($vehicles as $vehicle) {
  190.             $model $this->vehicleFactory->createByEntity($vehicle);
  191.             if (!$model) {
  192.                 continue;
  193.             }
  194.             $result[] = $model;
  195.         }
  196.         return $this->baseLandRoverRender('@DcSite/LandRover/Car/archive.html.twig', ['cars' => $result]);
  197.     }
  198. }