src/PortalBundle/Controller/CarController.php line 398

Open in your IDE?
  1. <?php
  2. namespace PortalBundle\Controller;
  3. use CoreBundle\Component\CoreFormFactory;
  4. use CoreBundle\Entity\Post;
  5. use CoreBundle\Factory\InStockVehicle;
  6. use CoreBundle\Model\Leasing\LeasingClient;
  7. use CoreBundle\Model\Vehicles\Repository;
  8. use DcSiteBundle\Model\CreditModel;
  9. use DcSiteBundle\Services\HistoryManager;
  10. use DcSiteBundle\Services\VehicleViewService;
  11. use CoreBundle\Entity\Dealer;
  12. use CoreBundle\Entity\Forms;
  13. use CoreBundle\Entity\Vehicles\VehicleItem;
  14. use CoreBundle\Model\Vehicles\AbstractVehicle;
  15. use CoreBundle\Model\Vehicles\Vehicle;
  16. use CoreBundle\Model\Vehicles\VehicleType;
  17. use DateTime;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use Doctrine\ORM\OptimisticLockException;
  20. use PortalBundle\Model\Breadcrumbs;
  21. use PortalBundle\Model\Catalog;
  22. use PortalBundle\Services\ServiceService;
  23. use PortalBundle\Services\VehicleService;
  24. use Symfony\Component\HttpFoundation\Cookie;
  25. use Symfony\Component\HttpFoundation\Request;
  26. use Symfony\Component\HttpFoundation\RequestStack;
  27. use Symfony\Component\HttpFoundation\Response;
  28. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  29. use Symfony\Component\Routing\RouterInterface;
  30. class CarController extends BaseController
  31. {
  32.     private VehicleService $vehicleService;
  33.     public function __construct(VehicleService $vehicleServiceCoreFormFactory $coreFormFactoryRequestStack $requestStack,
  34.                                 RouterInterface $routerRepository      $vehicleRepositoryServiceService $serviceService)
  35.     {
  36.         parent::__construct($coreFormFactory$requestStack$router$vehicleRepository$serviceService);
  37.         $this->vehicleService $vehicleService;
  38.     }
  39.     /**
  40.      * @param Vehicle $CarModel
  41.      * @return array
  42.      */
  43.     private function buildCarForms(AbstractVehicle $CarModel): array
  44.     {
  45.         $TiForm = new Forms();
  46.         $BuyForm = new Forms();
  47.         $CreditForm = new Forms();
  48.         $TiForm->setVehicle($CarModel->getVehicleEntity());
  49.         $CreditForm->setVehicle($CarModel->getVehicleEntity());
  50.         return [
  51.             'testDrive' => $this->CoreFormFactory()->testDriveForm($CarModel->getDealer())->createView(),
  52.             'buyForm' => $this->CoreFormFactory()->buyForm($BuyForm$CarModel->getVehicleEntity())->createView(),
  53.             'creditForm' => $this->CoreFormFactory()->creditForm($CarModel->getDealer(), $CreditForm)->createView()
  54.         ];
  55.     }
  56.     public function index(Request $request\CoreBundle\Factory\Vehicle $vehicleFactoryHistoryManager $historyManager,
  57.                           \DcSiteBundle\Services\VehicleService $vehicleServiceCreditModel $creditModel,
  58.                           LeasingClient $leasingClientEntityManagerInterface $em): Response
  59.     {
  60.         $vehicleItemId $request->get('variation');
  61.         $buyForm = new Forms();
  62.         /** @var Dealer $dealer */
  63.         $dealer $em->getRepository(Dealer::class)->findOneBy(['url' => $request->get('dealer')]);
  64.         $variation null;
  65.         if ($vehicleItemId) {
  66.             /** @var VehicleItem $vehicleItem */
  67.             $vehicleItem $em->getRepository(VehicleItem::class)->getVehicleItemByVariation($vehicleItemId$dealer);
  68.             if($vehicleItem && $vehicleItem->getSold()) {
  69.                 throw new NotFoundHttpException();
  70.             }
  71.             if($vehicleItem){
  72.                 $variation $vehicleItem->getVariation()->getId();
  73.                 $vehicle $vehicleFactory->createByVehicleItem($vehicleItem);
  74.                 $historyManager->setUserCarHistory($this->getUser(), $vehicle->getVehicleEntity(), $vehicleItem);
  75.             }
  76.         }
  77.         if(!$variation){
  78.             $vehicle $vehicleFactory->createByUrl($request->get('url'), $dealer);
  79.         }
  80.         if (!$vehicle || $vehicle->isUsed()) {
  81.             throw new NotFoundHttpException();
  82.         }
  83.         $vehicleTypeData VehicleType::getTypeDataById($vehicle->getVehicleType());
  84.         $vehicleTypeId $vehicleTypeData['id'];
  85.         $vehicleEm $vehicle->getVehicleEntity();
  86.         $vehicleService->addViews($vehicleEm);
  87.         $vehicleInStock $this->vehicleService->getVehicleInStockByBrand($vehicleEm->getModel()->getBrand(), $this->getUser(), $vehicleTypeId10);
  88.         $countModelInStock count($this->vehicleService->getVehicleInStock($vehicleEm->getModel(), $this->getUser()));
  89.         $vehicleUsed $this->vehicleService->getVehicleUsedByBrand($vehicleEm->getModel()->getBrand(), $this->getUser(), $vehicleTypeId10);
  90.         $characteristicId = ($vehicle->getBodyType())? $vehicle->getBodyType()->getId() : null;
  91.         $vehiclePrice $vehicle->price();
  92.         $modelId $vehicle->getModel()->getId();
  93.         $vehicleBodyType $this->vehicleService
  94.             ->getVehicleByCharacteristicId($this->getUser(), $characteristicIdfalse,null$vehiclePrice$modelId11);
  95.         $urlParams = [
  96.           'routeName' => 'portal_new_car',
  97.             'params' => [
  98.                 'dealer' => $dealer->getUrl(),
  99.                 'url'=> $vehicle->getModel()->getUrl(),
  100.             ]
  101.         ];
  102.         $vehicleColor $vehicleService->getVehicleColor($vehicleEm);
  103.         $compareVehicleEquipment = ($vehicleTypeData['url'] == 'car')?$vehicleService->getCompareVehicleEquipment($vehicleEm$urlParams):null;
  104.         $creditPayment $creditModel->getMinPayment($vehicle);
  105.         $featuresIds $this->vehicleService->getFeatures($this->getUser());
  106.         $leasingPayment $leasingClient->getFirstAnnuitetData($vehicle->fullPrice(), $vehicle->getVehicleType());
  107.         $inArchive = ($vehicle->getShowDisabled() == && $vehicle->getState() == && $vehicle->isUsed() == 0);
  108.         return $this->basePortalRender('@Portal/Car/new-card-car.html.twig', [
  109.             'vehicle' => $vehicle,
  110.             'vehicleInStock' => $vehicleInStock,
  111.             'inArchive' => $inArchive,
  112.             'countModelInStock' => $countModelInStock,
  113.             'vehicleUsed' => $vehicleUsed,
  114.             'vehicleBodyType' => $vehicleBodyType,
  115.             'vehicleColor' => $vehicleColor,
  116.             'creditPayment' => $creditPayment,
  117.             'leasingPayment' => $leasingPayment->payment,
  118.             'compareVehicleEquipment' => $compareVehicleEquipment,
  119.             'leasingCalculatorForm' => $this->CoreFormFactory()->leasingForm()->createView(),
  120.             'dealer' => $dealer,
  121.             'type' => $vehicleTypeData['url'],
  122.             'state' => 'new',
  123.             'featuredId' => $featuresIds[$vehicle->getVehicleItemId()] ?? null,
  124.             'comparedId' => $this->vehicleService->getComparison($vehicle),
  125.             'buyForm' => $this->CoreFormFactory()->buyForm($buyForm$vehicleEm$vehicle->getVehicleItemId(),  nullfalsefalse$vehicle->getPrice())->createView(),
  126.         ]);
  127.     }
  128.     public function vehicleInStock(Request $requestInStockVehicle $inStockVehicleFactoryEntityManagerInterface $em,
  129.                                    \CoreBundle\Factory\Vehicle $vehicleFactory\DcSiteBundle\Services\VehicleService $vehicleService,
  130.                                    CreditModel $creditModelLeasingClient $leasingClient): Response
  131.     {
  132.         $buyForm = new Forms();
  133.         $dealer $em->getRepository(Dealer::class)->findOneBy(['url' => $request->get('dealer')]);
  134.         if (!$dealer) {
  135.             throw $this->createNotFoundException();
  136.         }
  137.         /** @var Dealer $dealer */
  138.         $vehicle $inStockVehicleFactory->createByUrl($request->get('url'), $dealer);
  139.         if (!$vehicle ) {
  140.             throw $this->createNotFoundException();
  141.         }
  142.         $vehicleEm $vehicle->getVehicle();
  143.         $vehicleEntity $vehicleFactory->createByEntity($vehicleEm);
  144.         $vehicleTypeData VehicleType::getTypeDataById($vehicleEm->getVehicleType());
  145.         $vehicleInStock $this->vehicleService->getVehicleInStock($vehicleEm->getModel(), $this->getUser(), $vehicleEm->getDealer(), 6);
  146.         $countModelInStock count($this->vehicleService->getVehicleInStock($vehicleEm->getModel(), $this->getUser()));
  147.         $vehicleUsed $this->vehicleService->getVehicleUsed($vehicleEm->getModel(), $this->getUser(), 6);
  148.         $vehiclePrice $vehicle->Price();
  149.         $characteristicId $vehicle->getBodyType()->getId();
  150.         $vehicleBodyType $this->vehicleService
  151.             ->getVehicleInStockByBodyType($this->getUser(), $characteristicId$vehiclePrice10);
  152.         $vehicleService->addViews($vehicleEm);
  153.         $featuresIds $this->vehicleService->getFeatures($this->getUser());
  154.         $creditPayment $creditModel->getMinPayment($vehicleEntity);
  155.         $leasingPayment $leasingClient->getFirstAnnuitetData($vehicleEntity->fullPrice(), $vehicleEntity->getVehicleType());
  156.         return $this->basePortalRender('@Portal/Car/new-in-stock-card-car.html.twig', [
  157.             'vehicle' => $vehicle,
  158.             'vehicleInStock' => $vehicleInStock,
  159.             'countModelInStock' => $countModelInStock,
  160.             'vehicleUsed' => $vehicleUsed,
  161.             'vehicleBodyType' => $vehicleBodyType,
  162.             'creditPayment' => $creditPayment,
  163.             'leasingPayment' => $leasingPayment->payment,
  164.             'dealer' => $dealer,
  165.             'type' => $vehicleTypeData['url'],
  166.             'state' => 'new',
  167.             'featuredId' => $featuresIds[$vehicle->getVehicleItemId()] ?? null,
  168.             'comparedId' => $this->vehicleService->getComparison($vehicleEntity),
  169.             'leasingCalculatorForm' => $this->CoreFormFactory()->leasingForm()->createView(),
  170.             'buyForm' => $this->CoreFormFactory()
  171.                 ->buyForm($buyForm$vehicleEm$vehicle->getVehicleItemId(), nullfalsetrue)->createView(),
  172.         ]);
  173.     }
  174.     public function vehicleUsed(Request $request\CoreBundle\Factory\Vehicle $vehicleFactory,
  175.                                 VehicleViewService $vehicleViewServiceCreditModel $creditModelLeasingClient $leasingClient): Response
  176.     {
  177.         $vehicle $vehicleFactory->createUsedByUrl($request->get('url'));
  178.         if(!$vehicle) {
  179.             throw new NotFoundHttpException();
  180.         }
  181.         $vehicleViewService->saveViewVehicle($vehicle$request->getClientIp(), new DateTime());
  182.         $buyForm = new Forms();
  183.         $vehicleTypeData VehicleType::getTypeDataById($vehicle->getVehicleType());
  184.         $dealer $vehicle->getDealer();
  185.         $vehicleEm $vehicle->getVehicleEntity();
  186.         $characteristicId = ($vehicle->getBodyType())? $vehicle->getBodyType()->getId() : null;
  187.         $vehicleInStock $this->vehicleService->getVehicleInStock($vehicleEm->getModel(), $this->getUser(), $dealer6);
  188.         $vehicleUsed $this->vehicleService->getVehicleUsed($vehicleEm->getModel(), $this->getUser(), 6);
  189.         $price $vehicle->Price();
  190.         $vehicleBodyType $this->vehicleService->getVehicleByCharacteristicId($this->getUser(), $characteristicIdtrue,100$pricenull11);
  191.         $featuresIds $this->vehicleService->getFeatures($this->getUser());
  192.         $creditPayment $creditModel->getMinPayment($vehicle);
  193.         $leasingPayment $leasingClient->getFirstAnnuitetData($vehicle->fullPrice(), $vehicle->getVehicleType());
  194.         return $this->basePortalRender('@Portal/Car/new-used-card-car.html.twig', [
  195.             'vehicle' => $vehicle,
  196.             'vehicleInStock' => $vehicleInStock,
  197.             'vehicleUsed' => $vehicleUsed,
  198.             'vehicleBodyType' => $vehicleBodyType,
  199.             'creditPayment' => $creditPayment,
  200.             'leasingPayment' => $leasingPayment->payment,
  201.             'dealer' => $dealer,
  202.             'type' => $vehicleTypeData['url'],
  203.             'state' => 'new',
  204.             'featuredId' =>  $featuresIds[$vehicle->getVehicleItemId()] ?? null,
  205.             'comparedId' => $this->vehicleService->getComparison($vehicle),
  206.             'leasingCalculatorForm' => $this->CoreFormFactory()->leasingForm()->createView(),
  207.             'buyForm' => $this->CoreFormFactory()->buyForm($buyForm$vehicleEm$vehicle->getVehicleItemId(), nulltruefalse$vehicle->getPrice())->createView(),
  208.             'orderTestDriveForm' => $this->CoreFormFactory()->buyForm($buyForm$vehicleEm$vehicle->getVehicleItemId())->createView(),
  209.             'hasNds' => $vehicle->getHasNds(),
  210.             'isSelect' => !in_array($vehicle->getDealer()->getId(), Catalog::NOT_VIDI_SELECT_DEALERS),
  211.         ]);
  212.     }
  213.     public function catalog(Request $request\CoreBundle\Factory\Vehicle $vehicleFactory): Response
  214.     {
  215.         throw $this->createNotFoundException();
  216.         $carsCookie $request->cookies->get('viewed-cars');
  217.         $models = [];
  218.         if ($carsCookie) {
  219.             $carsId explode(','$carsCookie);
  220.             foreach ($carsId as $oneId) {
  221.                 if (count($models) >= 2) continue;
  222.                 if (!($Car $vehicleFactory->createById($oneId))) {
  223.                     continue;
  224.                 }
  225.                 $models[] = $Car;
  226.             }
  227.         }
  228.         return $this->basePortalRender('@Portal/Car/catalog.html.twig', [
  229.             'vModels' => $models,
  230.         ]);
  231.     }
  232.     /**
  233.      * @param Request $request
  234.      * @return Response
  235.      * @throws OptimisticLockException
  236.      */
  237.     public function usedCar(Request $request\CoreBundle\Factory\Vehicle $vehicleFactoryEntityManagerInterface $em,
  238.                             HistoryManager $historyManagerBreadcrumbs $breadcrumbs): Response
  239.     {
  240.         $url $request->get('url');
  241.         $CarModel $vehicleFactory->createUsedByUrl($url);
  242.         if (!$CarModel) {
  243.             throw new NotFoundHttpException();
  244.         }
  245.         $CarModel->getVehicleEntity()->setViews((int)$CarModel->getVehicleEntity()->getViews() + 1);
  246.         $em->persist($CarModel->getVehicleEntity());
  247.         $em->flush();
  248.         $historyManager->setUserCarHistory($this->getUser(), $CarModel->getVehicleEntity());
  249.         $carsCookie $request->cookies->get('viewed-cars');
  250.         $models = [];
  251.         $carsId = [];
  252.         if ($carsCookie) {
  253.             $carsId explode(','$carsCookie);
  254.             foreach ($carsId as $oneId) {
  255.                 if ($CarModel->getVehicleId() == $oneId) {
  256.                     continue;
  257.                 }
  258.                 //TODO remove magic numbers
  259.                 if (count($models) >= 2) {
  260.                     continue;
  261.                 }
  262.                 $car $vehicleFactory->createById($oneId);
  263.                 if (!$car) {
  264.                     continue;
  265.                 }
  266.                 $models[] = $car;
  267.             }
  268.         }
  269.         //TODO remove magic numbers
  270.         if (!in_array($CarModel->getVehicleId(), $carsId)) {
  271.             if (count($carsId) >= 2) {
  272.                 $carsId array_slice($carsId01);
  273.             }
  274.             $carsId[] = $CarModel->getVehicleId();
  275.         }
  276.         $Response = new Response();
  277.         if ($carsId) {
  278.             $cookie = new Cookie('viewed-cars'implode(','$carsId));
  279.             $Response->headers->setCookie($cookie);
  280.         }
  281.         $creditPaymentDisabled false;
  282.         $TdForm = new Forms();
  283.         $TdForm->setVehicle($CarModel->getVehicleEntity());
  284.         return $this->basePortalRender(
  285.             '@Portal/Car/used-car.html.twig',
  286.             array_merge(
  287.                 ['forms' => $this->buildCarForms($CarModel)],
  288.                 [
  289.                     'model' => $CarModel,
  290.                     'tdForm' =>
  291.                         $this->CoreFormFactory()
  292.                             ->testDriveForm($CarModel->getDealer(), $TdForm, ['is_used' => true])
  293.                             ->createView(),
  294.                     'creditForm' => $this->CoreFormFactory()->creditForm($CarModel->getDealer())->createView(),
  295.                     'vModels' => $models,
  296.                     'creditPayment' => $creditPaymentDisabled,
  297.                     'options' => [],
  298.                     'breadcrumbs' => $breadcrumbs->generateByCarCard($CarModel),
  299.                 ]
  300.             ),
  301.             $Response
  302.         );
  303.     }
  304.     public function inStockOne(Request $requestEntityManagerInterface $emInStockVehicle $inStockVehicleFactory): Response
  305.     {
  306.         $dealer $em
  307.             ->getRepository(Dealer::class)
  308.             ->findOneBy(['url' => $request->get('dealer')]);
  309.         if (!$dealer) {
  310.             throw $this->createNotFoundException();
  311.         }
  312.         /** @var Dealer $dealer */
  313.         $inStockVehicle $inStockVehicleFactory->createByUrl($request->get('url'), $dealer);
  314.         if (!$inStockVehicle) {
  315.             throw $this->createNotFoundException();
  316.         }
  317.         //TODO remove magic numbers
  318.         $posts['used'] = $em->getRepository(Post::class)->getUsedCarActions(3);
  319.         $posts['service'] = $em->getRepository(Post::class)->getServiceActions(3);
  320.         $posts['new'] = $em->getRepository(Post::class)->getNewCarActions(3);
  321.         $BuyForm = new Forms();
  322.         $TdForm = new Forms();
  323.         $TdForm->setVehicle($inStockVehicle->getVehicle());
  324.         $BuyForm->setVehicle($inStockVehicle->getVehicle());
  325.         return $this->basePortalRender('@Portal/Car/in-stock-card-car.html.twig', [
  326.             'model' => $inStockVehicle,
  327.             'buyForm' =>
  328.                 $this->CoreFormFactory()
  329.                     ->buyForm($BuyForm$inStockVehicle->getVehicle(), $inStockVehicle->getVehicleItemId())
  330.                     ->createView(),
  331.             'testDrivePageForm' =>
  332.                 $this->CoreFormFactory()
  333.                 ->testDriveForm($inStockVehicle->getDealer(), $TdForm)
  334.                 ->createView(),
  335.             'creditForm' => $this->CoreFormFactory()->creditForm($inStockVehicle->getDealer())->createView(),
  336.             'dealer' => $dealer,
  337.             'posts' => $posts,
  338.             'leasingCalculatorForm' => $this->CoreFormFactory()->leasingForm()->createView(),
  339.         ]);
  340.     }
  341.     public function archive(\CoreBundle\Factory\Vehicle $vehicleFactory): Response
  342.     {
  343.         $vehicles $this->vehicleRepository->getAllDisabled();
  344.         $result = [];
  345.         foreach ($vehicles as $vehicle) {
  346.             $model $vehicleFactory->createByEntity($vehicle);
  347.             if (!$model) {
  348.                 continue;
  349.             }
  350.             $result[] = $model;
  351.         }
  352.         return $this->basePortalRender('@Portal/Car/archive.html.twig', ['cars' => $result]);
  353.     }
  354. }