src/DcSiteBundle/Controller/Jeep/CarController.php line 47

Open in your IDE?
  1. <?php
  2. namespace DcSiteBundle\Controller\Jeep;
  3. use BmpGatewayBundle\Entity\VehicleTestDrive;
  4. use CoreBundle\Component\CoreFormFactory;
  5. use CoreBundle\Component\FormManager;
  6. use CoreBundle\Entity\Forms;
  7. use CoreBundle\Entity\Vehicles\InStock;
  8. use CoreBundle\Entity\Vehicles\VehicleItem;
  9. use CoreBundle\Factory\InStockVehicle;
  10. use CoreBundle\Factory\Vehicle as VehicleFactory;
  11. use CoreBundle\Model\Api\OnlineService\ApiServer1C;
  12. use CoreBundle\Model\Vehicles\Repository;
  13. use CoreBundle\Services\MediaExtensionVidi;
  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\UsedVehicleService;
  21. use DcSiteBundle\Services\VehicleService;
  22. use Doctrine\ORM\EntityManagerInterface;
  23. use PortalBundle\Model\SeoMetaTag;
  24. use Symfony\Component\Filesystem\Filesystem;
  25. use Symfony\Component\HttpFoundation\Request;
  26. use Symfony\Component\HttpFoundation\RequestStack;
  27. use Symfony\Component\HttpFoundation\Response;
  28. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  29. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  30. use Symfony\Component\Routing\RouterInterface;
  31. use Twig\Environment;
  32. class CarController extends BaseController
  33. {
  34.     private CarInStockService $carInStockService;
  35.     private UsedVehicleService $usedVehicleService;
  36.     public function __construct(CoreFormFactory $coreFormFactorySeoMetaTag $seoMetaTagRequestStack $requestStackRouterInterface $routerFormManager $formManagerEntityManagerInterface $emApiServer1C $apiServer1CSessionInterface $sessionFilesystem $filesystemMediaExtensionVidi $mediaExtensionVidiRepository $vehicleRepositoryVehicleFactory $vehicleFactoryEnvironment $twigCarInStockService $carInStockServiceUsedVehicleService $usedVehicleService)
  37.     {
  38.         $this->carInStockService $carInStockService;
  39.         $this->usedVehicleService $usedVehicleService;
  40.         parent::__construct($coreFormFactory$seoMetaTag$requestStack$router$formManager$em$apiServer1C$session$filesystem$mediaExtensionVidi$vehicleRepository$vehicleFactory$twig);
  41.     }
  42.     public function list(Request $requestPagesService $pagesService): ?Response
  43.     {
  44.         $vehiclesRepo $this->vehicleRepository->getNewByDealer($this->getDealer(), [], true);
  45.         $vehicles $this->vehicleFactory->createByEntities($vehiclesRepo);
  46.         return $this->baseJeepRender('@DcSite/Jeep/Car/car-catalog.html.twig', [
  47.             'vehicles' => $vehicles,
  48.             'catalogModelRangePages' => $pagesService->setLang($request->getLocale())->getPages($this->getDealer())
  49.         ]);
  50.     }
  51.     public function listPage(Request $requestPagesService $pagesServicestring $url): ?Response
  52.     {
  53.         $page $pagesService->setLang($request->getLocale())->getPage($this->getDealer(), $url);
  54.         if (empty($page)) {
  55.             throw new NotFoundHttpException();
  56.         }
  57.         return $this->baseJeepRender('@DcSite/Jeep/Car/car-catalog-page.html.twig', ['page' => $page]);
  58.     }
  59.     public function car(Request        $requestVehicleService $vehicleServiceCreditModel $creditModelAccessoryService $accessoryService,
  60.                         HistoryManager $historyManager$car): ?Response
  61.     {
  62.         $dealer $this->getDealer();
  63.         $vehicle $this->vehicleFactory->createByUrl($car$dealer);
  64.         if (!$vehicle) {
  65.             throw new NotFoundHttpException();
  66.         }
  67.         $vehicleEm $vehicle->getVehicleEntity();
  68.         $vehiclePrice $vehicleService->getVehiclePrice($vehicleEm);
  69.         $vehicleEquipment $vehicleService->getVehicleEquipment($vehicleEm);
  70.         $vehicleColor $vehicleService->getVehicleColor($vehicleEm);
  71.         $vehicleFile $vehicleService->getVehicleFile($vehicleEm);
  72.         $vehicleAccessory $accessoryService->getAccessoriesByDealerVehicleType($dealer);
  73.         $vehicleFaqs $vehicleService->getVehicleFaqs($vehicleEm);
  74.         $carInStock $this->carInStockService->getCarInStockByModel($this->getDealer(), $request->getLocale(), $vehicleEm->getModel(), 4);
  75.         $carUsed $this->usedVehicleService->getUsedVehicles($this->getDealer(), DealerPathEnum::JEEP$request->getLocale(), null4);
  76.         $creditPayment $creditModel->getMinPayment($vehicle);
  77.         $variationId = (isset($vehiclePrice['variations'][0])) ? $vehiclePrice['variations'][0]['id'] : null;
  78.         $historyManager->setUserCarHistory($this->getUser(), $vehicleEm);
  79.         $TdForm = new Forms();
  80.         $TdForm->setVehicle($vehicle->getVehicleEntity());
  81.         $form $this->CoreFormFactory()
  82.             ->callMeForm(new Forms(), true);
  83.         $form->get('dealer')->setData($this->getDealer());
  84.         return $this->baseJeepRender('@DcSite/Jeep/Car/car-card-single.html.twig', [
  85.             'model' => $vehicle,
  86.             'variationId' => $variationId,
  87.             'vehiclePrice' => $vehiclePrice,
  88.             'vehicleEquipment' => $vehicleEquipment,
  89.             'vehicleColor' => $vehicleColor,
  90.             'vehicleFile' => $vehicleFile,
  91.             'vehicleAccessory' => $vehicleAccessory,
  92.             'carInStock' => $carInStock,
  93.             'carUsed' => $carUsed,
  94.             'faqs' => $vehicleFaqs,
  95.             'creditPayment' => $creditPayment,
  96.             'structuredData' => $this->getCarPageStructuredData($request$vehicle),
  97.             'buyForm' => $this->CoreFormFactory()->buyForm(null$vehicle->getVehicleEntity(), nullnullfalsefalse$vehicle->getPrice())->createView(),
  98.             'buyPartsForm' => $this->CoreFormFactory()->buyPartsForm($this->getDealer())->createView(),
  99.             'creditForm' => $this->CoreFormFactory()->creditForm($this->getDealer())->createView(),
  100.             'leasingCalculatorForm' => $this->CoreFormFactory()->leasingForm()->createView(),
  101.             'orderCascoForm' => $this->CoreFormFactory()->orderCascoForm()->createView(),
  102.             'tradeInFrom' => $this->CoreFormFactory()->tradeInFrom($this->getDealer())->createView(),
  103.             'testDrivePageForm' => $this->CoreFormFactory()->testDriveForm($this->getDealer(), $TdForm)->createView(),
  104.             'hasTestDrive' => $this->em
  105.                 ->getRepository(VehicleTestDrive::class)
  106.                 ->hasTestDrive($dealer$vehicle->getModel()),
  107.             'callMeForm' => $form->createView()
  108.         ]);
  109.     }
  110.     public function carInStockCatalog(Request $request): ?Response
  111.     {
  112.         $vehicles $this->carInStockService->getCarInStockByDealer($this->getDealer(), null$request->getLocale());
  113.         $this->carInStockService->sortVehicleByDealer($vehicles$this->getDealer()->getUniqueId());
  114.         return $this->baseJeepRender('@DcSite/Jeep/Car/car-in-stock-catalog.html.twig', [
  115.             'vehicles' => $vehicles
  116.         ]);
  117.     }
  118.     public function carInStockSingle(Request $requestInStockVehicle $inStockVehicleCreditModel $creditModel$url)
  119.     {
  120.         $model $inStockVehicle->createByUrl($url$this->getDealer());
  121.         if (!$model) {
  122.             $model $inStockVehicle->createByUrl($url$this->getDealer(), false);
  123.             if ($model) {
  124.                 return $this->redirectToRoute('jeep_car', ['car' => $model->getVehicle()->getUrl()], 301);
  125.             } else {
  126.                 return $this->redirectToRoute('jeep_car_in_stock_catalog', [], 301);
  127.             }
  128.         }
  129.         $vehicleModel $this->vehicleFactory->createByEntity($model->getVehicle());
  130.         $creditPayment $creditModel->getMinPayment($vehicleModel);
  131.         $options $model->getOptions($request->getLocale());
  132.         $TdForm = new Forms();
  133.         $TdForm->setVehicle($model->getVehicle());
  134.         $form $this->CoreFormFactory()
  135.             ->callMeForm(new Forms(), true);
  136.         $form->get('dealer')->setData($this->getDealer());
  137.         return $this->baseJeepRender('@DcSite/Jeep/Car/car-in-stock-single.html.twig', [
  138.             'model' => $model,
  139.             'vehicleItemPrice' => $this->em->getRepository(VehicleItem::class)->findBy(['id' => $model->getVehicleItemId()])[0]->getPrice(),
  140.             'vehicleActionPrice' => $this->em->getRepository(InStock::class)->findBy(['id' => $model->getId()])[0]->getActionPrice(),
  141.             'vehicleModel' => $vehicleModel,
  142.             'creditPayment' => $creditPayment,
  143.             'characterisatics' => $model->getCharacterisaticsByGroup($request->getLocale()),
  144.             'options' => $options,
  145.             'testDriveForm' => $this->CoreFormFactory()->testDriveForm($this->getDealer())->createView(),
  146.             'creditForm' => $this->CoreFormFactory()->creditForm($this->getDealer())->createView(),
  147.             'leasingCalculatorForm' => $this->CoreFormFactory()->leasingForm()->createView(),
  148.             'tradeInFrom' => $this->CoreFormFactory()->tradeInFrom($this->getDealer())->createView(),
  149.             'testDrivePageForm' => $this->CoreFormFactory()->testDriveForm($this->getDealer(), $TdForm)->createView(),
  150.             'buyInStockForm' => $this->CoreFormFactory()->buyInStockForm(null$model->getInStockEntity())->createView(),
  151.             'structuredCarData' => $this->getCarStructuredDataCarInStock($request$model),
  152.             'callMeForm' => $form->createView()
  153.         ]);
  154.     }
  155.     public function usedCarCatalog(Request $request): ?Response
  156.     {
  157.         $vehicles $this->usedVehicleService->getUsedVehicles($this->getDealer(), DealerPathEnum::JEEP$request->getLocale());
  158.         return $this->baseJeepRender('@DcSite/Jeep/Car/used-car-catalog.html.twig', [
  159.             'vehicles' => $vehicles
  160.         ]);
  161.     }
  162.     public function usedCarSingle(Request $requestCreditModel $creditModel$url): ?Response
  163.     {
  164.         $vehicle $this->vehicleFactory->createUsedByUrl($url);
  165.         if (!$vehicle) {
  166.             throw new NotFoundHttpException();
  167.         }
  168.         $creditPayment $creditModel->getMinPayment($vehicle);
  169.         $options $vehicle->getOptions($request->getLocale());
  170.         return $this->baseJeepRender('@DcSite/Jeep/Car/used-car-single.html.twig', [
  171.             'vehicle' => $vehicle,
  172.             'characterisatics' => $vehicle->getCharacterisaticsWithGroup($request->getLocale()),
  173.             'options' => $options,
  174.             'creditPayment' => $creditPayment,
  175.             'buyForm' => $this->CoreFormFactory()->buyForm(null$vehicle->getVehicleEntity(), nullnulltruefalse$vehicle->getPrice())->createView(),
  176.             'structuredCarData' => $this->getCarStructuredDataCarUsed($request$vehicle)
  177.         ]);
  178.     }
  179.     public function technicalCharacteristics(VehicleService $vehicleService$model): ?Response
  180.     {
  181.         $Dealer $this->getDealer();
  182.         $Vehicle $this->vehicleFactory->createByUrl($model$Dealer);
  183.         if (!$Vehicle) {
  184.             throw new NotFoundHttpException();
  185.         }
  186.         $technicalCharacteristic $vehicleService->getVehicleTechnicalCharacteristic($Vehicle->getVehicleEntity());
  187.         return $this->baseJeepRender('@DcSite/Jeep/Car/technical-characteristics.html.twig', [
  188.             'model' => $Vehicle,
  189.             'technicalCharacteristic' => $technicalCharacteristic,
  190.         ]);
  191.     }
  192. }