src/DcSiteBundle/Controller/Lexus/MainController.php line 161

Open in your IDE?
  1. <?php
  2. namespace DcSiteBundle\Controller\Lexus;
  3. use CoreBundle\Component\CoreFormFactory;
  4. use CoreBundle\Component\FormManager;
  5. use CoreBundle\Entity\Vehicles\Vehicle;
  6. use CoreBundle\Factory\Vehicle as VehicleFactory;
  7. use CoreBundle\Model\Api\OnlineService\ApiServer1C;
  8. use CoreBundle\Model\Vehicles\Repository;
  9. use CoreBundle\Services\MediaExtensionVidi;
  10. use DcSiteBundle\Entity\ReplacementCarCondition;
  11. use DcSiteBundle\Entity\SalesContract;
  12. use DcSiteBundle\Entity\TermsMaintenance;
  13. use DcSiteBundle\Services\MainSliderService;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use PortalBundle\Model\SeoMetaTag;
  16. use Symfony\Component\Asset\Packages;
  17. use Symfony\Component\Filesystem\Filesystem;
  18. use Symfony\Component\HttpFoundation\JsonResponse;
  19. use Symfony\Component\HttpFoundation\RedirectResponse;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\RequestStack;
  22. use Symfony\Component\HttpFoundation\Response;
  23. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  24. use Symfony\Component\Routing\RouterInterface;
  25. use Twig\Environment;
  26. class MainController extends BaseController
  27. {
  28.     public function __construct(CoreFormFactory $coreFormFactorySeoMetaTag $seoMetaTagRequestStack $requestStackRouterInterface $routerFormManager $formManagerEntityManagerInterface $emApiServer1C $apiServer1CSessionInterface $sessionFilesystem $filesystemMediaExtensionVidi $mediaExtensionVidiRepository $vehicleRepositoryVehicleFactory $vehicleFactoryEnvironment $twig)
  29.     {
  30.         parent::__construct($coreFormFactory$seoMetaTag$requestStack$router$formManager$em$apiServer1C$session$filesystem$mediaExtensionVidi$vehicleRepository$vehicleFactory$twig);
  31.     }
  32.     public function redirectLexus(): RedirectResponse
  33.     {
  34.         return $this->redirectToRoute('lexus_homepage', [], 301);
  35.     }
  36.     public function index(Request $requestMainSliderService $mainSliderService): ?Response
  37.     {
  38.         $mainSliderService->setLang($request->getLocale())->setSlideFirst($request->query->getInt('slide'0));
  39.         return $this->baseLexusRender('@DcSite/Lexus/Main/index.html.twig', [
  40. //            'buyForm' => $this->CoreFormFactory()->buyForm(null, null, null, $this->getDealer())->createView(),
  41.             'slides' => $mainSliderService->getSlidesNew($this->getDealer()),
  42.             'serviceForm' => $this->CoreFormFactory()->serviceForm()->createView(),
  43.         ]);
  44.     }
  45.     public function carCatalog(Request $requestPackages $manager): JsonResponse
  46.     {
  47.         $vehicles $this->vehicleRepository->getNewByDealer($this->getDealer());
  48.         $data = [];
  49.         $categories = [];
  50.         /**
  51.          * @var $vehicle Vehicle
  52.          */
  53.         foreach ($vehicles as $key => $vehicle) {
  54.             $Group $vehicle->getGroup();
  55.             if (!$Group) {
  56.                 continue;
  57.             }
  58.             $categoriesInst $vehicle->getCategories();
  59.             if (!$categoriesInst) {
  60.                 continue;
  61.             }
  62.             foreach ($categoriesInst as $category) {
  63.                 $catId $category->getId();
  64.                 if (!isset($categories[$catId])) {
  65.                     $categories[$catId] = [
  66.                         'id' => $catId,
  67.                         'title' => $category->getTitle($request->getLocale()),
  68.                     ];
  69.                 }
  70.                 $groupId $Group->getId();
  71.                 $carModel $this->vehicleFactory->createByEntity($vehicle);
  72.                 if (!$carModel) {
  73.                     continue;
  74.                 }
  75.                 if (!isset($data[$groupId])) {
  76.                     $groupImage $this->mediaExtensionVidi->getPath($Group->getPreview(), 'small');
  77.                     $groupImage $this->webpUpdate($request$groupImage$manager);
  78.                     $data[$groupId] = [
  79.                         'id' => $groupId,
  80.                         'catId' => $catId,
  81.                         'title' => $Group->getTitle($request->getLocale()),
  82.                         'slogan' => $carModel->getSlogan($request->getLocale()),
  83.                         'image' => $groupImage,
  84.                         'position' => $Group->getPosition(),
  85.                         'price' => $carModel->price(),
  86.                         'hasActionPrice' => $carModel->hasActionPrice(),
  87.                         'models' => [],
  88.                     ];
  89.                 }
  90.                 $data[$groupId]['catIds'][] = $category->getId();
  91.                 $data[$groupId]['models'][] = [
  92.                     'title' => $carModel->getModelName(),
  93.                     'link' => $this->router->generate('lexus_card_car', ['url' => $carModel->getUrl()]),
  94.                     'price' => $carModel->price(),
  95.                 ];
  96.                 if ($data[$Group->getId()]['price'] == && !($key count($vehicles))) {
  97.                     $temporaryVehicleEm $this->vehicleFactory->createByEntity($vehicles[$key 1]);
  98.                     $data[$Group->getId()]['price'] = $temporaryVehicleEm->price();
  99.                 }
  100.                 $data[$groupId]['price'] = $carModel->price();
  101.                 foreach ($data[$groupId]['models'] as $model) {
  102.                     if ($model['price'] != && $model['price'] < $data[$groupId]['price']) {
  103.                         $data[$groupId]['price'] = $model['price'];
  104.                     }
  105.                 }
  106.                 $modelExists false;
  107.                 foreach ($data[$groupId]['models'] as $existingModel) {
  108.                     if ($existingModel['title'] == $carModel->getModelName()) {
  109.                         $modelExists true;
  110.                         break;
  111.                     }
  112.                 }
  113.                 if (!$modelExists) {
  114.                     $data[$groupId]['models'][] = [
  115.                         'title' => $carModel->getModelName(),
  116.                         'link' => $this->router->generate('lexus_card_car', ['url' => $carModel->getUrl()]),
  117.                     ];
  118.                 }
  119.             }
  120.         }
  121.         usort($data, fn($a$b) => ($a['position'] == $b['position']) ? : (($a['position'] < $b['position']) ? -1));
  122.         foreach ($data as &$item) {
  123.             $uniqueModels = [];
  124.             foreach ($item['models'] as $model) {
  125.                 $uniqueModels[$model['link']] = $model;
  126.             }
  127.             $item['models'] = array_values($uniqueModels);
  128.         }
  129.         return $this->json(['data' => $data'categories' => $categories]);
  130.     }
  131.     public function notFound(Request $request): ?Response
  132.     {
  133.         $Response = new Response();
  134.         $Response->setStatusCode(Response::HTTP_NOT_FOUND);
  135.         return $this->baseLexusRender('@DcSite/Lexus/404.html.twig', ['_locale' => $request->getLocale()], $Response);
  136.     }
  137.     public function conditionOfSales(): ?Response
  138.     {
  139.         $filesByType $this->em->getRepository(SalesContract::class)->getFilesByTypes($this->getDealer());
  140.         return $this->baseLexusRender('@DcSite/Lexus/condition-of-sales.html.twig', [
  141.             'filesByType' => $filesByType,
  142.         ]);
  143.     }
  144.     public function termsMaintenance(): ?Response
  145.     {
  146.         $files $this->em->getRepository(TermsMaintenance::class)->findBy(['dealer' => $this->getDealer()], ['begin_date' => 'ASC']);
  147.         return $this->baseLexusRender('@DcSite/Lexus/terms-maintenance.html.twig', [
  148.             'mainFile' => array_pop($files),
  149.             'files' => $files,
  150.             'dealer' => $this->getDealer(),
  151.         ]);
  152.     }
  153.     public function termsReplacement(): ?Response
  154.     {
  155.         $files $this->em->getRepository(ReplacementCarCondition::class)->findBy(['dealer' => $this->getDealer()], ['begin_date' => 'DESC']);
  156.         return $this->baseLexusRender('@DcSite/Lexus/Terms/terms-providing-replacement-car.html.twig', [
  157.             'files' => $files,
  158.         ]);
  159.     }
  160.     public function onlineBooking(): ?Response
  161.     {
  162.         return $this->baseLexusRender('@DcSite/Lexus/online-booking.html.twig');
  163.     }
  164. }