src/DcSiteBundle/Controller/Volvo/MainController.php line 43

Open in your IDE?
  1. <?php
  2. namespace DcSiteBundle\Controller\Volvo;
  3. use CoreBundle\Component\CoreFormFactory;
  4. use CoreBundle\Component\FormManager;
  5. use CoreBundle\Component\MailManager;
  6. use CoreBundle\Entity\Vehicles\Vehicle;
  7. use CoreBundle\Factory\Vehicle as VehicleFactory;
  8. use CoreBundle\Model\Api\OnlineService\ApiServer1C;
  9. use CoreBundle\Model\Post;
  10. use CoreBundle\Model\Vehicles\Repository;
  11. use CoreBundle\Model\WinnerRate;
  12. use CoreBundle\Services\MediaExtensionVidi;
  13. use DcSiteBundle\Entity\ReplacementCarCondition;
  14. use DcSiteBundle\Entity\SalesContract;
  15. use DcSiteBundle\Entity\TermsMaintenance;
  16. use DcSiteBundle\Services\ActionsService;
  17. use Doctrine\ORM\EntityManagerInterface;
  18. use Exception;
  19. use PortalBundle\Model\SeoMetaTag;
  20. use Symfony\Component\Filesystem\Filesystem;
  21. use Symfony\Component\HttpFoundation\JsonResponse;
  22. use Symfony\Component\HttpFoundation\RedirectResponse;
  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\Mailer\MailerInterface;
  28. use Symfony\Component\Mime\Email;
  29. use Symfony\Component\Routing\RouterInterface;
  30. use Twig\Environment;
  31. class MainController extends BaseController
  32. {
  33.     public function __construct(WinnerRate $winnerRateCoreFormFactory $coreFormFactorySeoMetaTag $seoMetaTagRequestStack $requestStackRouterInterface $routerFormManager $formManagerEntityManagerInterface $emApiServer1C $apiServer1CSessionInterface $sessionFilesystem $filesystemMediaExtensionVidi $mediaExtensionVidiRepository $vehicleRepositoryVehicleFactory $vehicleFactoryEnvironment $twig)
  34.     {
  35.         parent::__construct($winnerRate$coreFormFactory$seoMetaTag$requestStack$router$formManager$em$apiServer1C$session$filesystem$mediaExtensionVidi$vehicleRepository$vehicleFactory$twig);
  36.     }
  37.     public function redirectVolvo(): RedirectResponse
  38.     {
  39.         return $this->redirectToRoute('volvo_homepage', [], 301);
  40.     }
  41.     public function seveTempForm(Request $requestMailerInterface $mailer): JsonResponse
  42.     {
  43.         $data $request->request->all();
  44.         $body '<html>
  45.         <body>
  46.             <h3>Заказ электрокар Volvo XC40 Rechar</h3>
  47.             <p>Имя: ' $data['name'] . '
  48.             <p>Телефон: ' $data['phone'] . '</p>
  49.             <p>Email: ' $data['email'] . '</p>
  50.         </body>
  51.         </html>';
  52.         $massage = (new Email())
  53.             ->subject('Заказ электрокар Volvo XC40 Rechar')
  54.             ->to('sales@airport.volvocarsdealer.com''web-leads@vidi.ua')
  55.             ->from('info@vidi.ua')
  56.             ->html($body);
  57.         $mailer->send($massage);
  58.         return $this->json(['success' => true]);
  59.     }
  60.     public function index(Request $requestActionsService $actionsService): Response
  61.     {
  62.         $actionsService->setLocale($request->getLocale());
  63.         $groups = [];
  64.         $cars $this->vehicleRepository->getNewByDealer($this->getDealer());
  65.         $cars array_reduce($cars, function ($rows$row) use ($request, &$groups) {
  66.             try {
  67.                 $row $this->vehicleFactory->createByEntity($row);
  68.                 if (empty($row)) {
  69.                     return $rows;
  70.                 }
  71.                 $groupId $row->getCategory()->getId();
  72.                 $groups[$groupId] = [
  73.                     'id' => $groupId,
  74.                     'name' => $row->getCategory()->getTitle($request->getLocale()),
  75.                     'inner' => $row->getCategory()->getUrl()
  76.                 ];
  77.                 $rows[$groupId][] = [
  78.                     'vehicleId' => $row->getVehicleId(),
  79.                     'modelName' => $row->getModelName(),
  80.                     'price' => round($row->price()),
  81.                     'url' => $row->getUrl(),
  82.                     'image' => $row->getPreviewPath('reference'),
  83.                     'image_webp' => $row->getPreviewPathWebp('reference')
  84.                 ];
  85.                 return $rows;
  86.             } catch (Exception $e) {
  87.                 return $rows;
  88.             }
  89.         }, []);
  90.         return $this->baseVolvoRender('@DcSite/Volvo/Main/index.html.twig', [
  91.             'cars' => $cars,
  92.             'groups' => $groups,
  93.             'carActions' => $actionsService->getActions($this->getDealer(), nullPost::ACTION_TYPE_CAR),
  94.             'serviceActions' => $actionsService->getActions($this->getDealer(), nullPost::ACTION_TYPE_SERVICE)
  95.         ]);
  96.     }
  97.     public function notFound(Request $request): ?Response
  98.     {
  99.         $Response = new Response();
  100.         $Response->setStatusCode(Response::HTTP_NOT_FOUND);
  101.         return $this->baseVolvoRender('@DcSite/Volvo/404.html.twig', ['_locale' => $request->getLocale()], $Response);
  102.     }
  103.     public function specialOffers(): ?Response
  104.     {
  105.         $saleActions $this->em->getRepository(\CoreBundle\Entity\Post::class)->getActionsByDealer($this->getDealer(), Post::ACTION_TYPE_CAR);
  106.         $serviceActions $this->em->getRepository(\CoreBundle\Entity\Post::class)->getActionsByDealer($this->getDealer(), Post::ACTION_TYPE_SERVICE);
  107.         return $this->baseVolvoRender('@DcSite/Volvo/Special-offers/special-offers.html.twig', [
  108.             'service' => $serviceActions,
  109.             'sale' => $saleActions,
  110.         ]);
  111.     }
  112.     public function specialOffersSingle(Post $postModel$url): ?Response
  113.     {
  114.         $special $postModel->initByUrl($this->getDealer(), $url);
  115.         return $this->baseVolvoRender('@DcSite/Volvo/Special-offers/special-offers-single.html.twig', [
  116.             'post' => $special,
  117.         ]);
  118.     }
  119.     public function menuInit(Request $request): JsonResponse
  120.     {
  121.         $cars $this->vehicleRepository->getNewByDealer($this->getDealer());
  122.         $data = [];
  123.         $groups = [];
  124.         /** @var $car Vehicle */
  125.         foreach ($cars as $car) {
  126.             $vModel $this->vehicleFactory->createByEntity($car);
  127.             if (!$vModel) {
  128.                 continue;
  129.             }
  130.             $carId $vModel->getVehicleId();
  131.             $groupId $vModel->getCategory()->getId();
  132.             $groups[$groupId] = [
  133.                 'id' => $groupId,
  134.                 'name' => $vModel->getCategory()->getTitle($request->getLocale()),
  135.                 'technical' => $vModel->getCategory()->getUrl(),
  136.             ];
  137.             $data[] = [
  138.                 'id' => $carId,
  139.                 'groupId' => $groupId,
  140.                 'position' => $vModel->getPosition(),
  141.                 'groupName' => $vModel->getCategory()->getTitle($request->getLocale()),
  142.                 'groupTech' => $vModel->getCategory()->getUrl(),
  143.                 'name' => $vModel->getFullName(),
  144.                 'preview' => $this->mediaExtensionVidi->getPath($vModel->getPreview(), 'big'),
  145.                 'preview_webp' => $this->mediaExtensionVidi->pathWebp($vModel->getPreview(), 'reference'),
  146.                 'price' => number_format($vModel->price()),
  147.                 'slogan' => $vModel->getSlogan($request->getLocale()),
  148.                 'fuelRate' => $vModel->getFuelRateMixed(),
  149.                 'url' => $vModel->getUrl(),
  150.                 'link' => $this->router->generate('volvo_card_car', ['url' => $vModel->getUrl()]),
  151.                 'configuratorPath' => $this->router->generate('volvo_card_car_configuraion', ['url' => $vModel->getUrl()]),
  152.             ];
  153.         }
  154.         usort($data, fn($a$b) => $a['position'] <=> $b['position']);
  155.         return $this->json(['success' => true'data' => $data'groups' => $groups'date' => date('d.m.Y')]);
  156.     }
  157.     public function conditionOfSales(): ?Response
  158.     {
  159.         $filesByType $this->em->getRepository(SalesContract::class)->getFilesByTypes($this->getDealer());
  160.         return $this->baseVolvoRender('@DcSite/Volvo/condition-of-sales.html.twig', [
  161.             'filesByType' => $filesByType,
  162.         ]);
  163.     }
  164.     public function termsMaintenance(): ?Response
  165.     {
  166.         $files $this->em->getRepository(TermsMaintenance::class)->findBy(['dealer' => $this->getDealer()], ['begin_date' => 'ASC']);
  167.         return $this->baseVolvoRender('@DcSite/Volvo/terms-maintenance.html.twig', [
  168.             'mainFile' => array_pop($files),
  169.             'files' => $files,
  170.             'dealer' => $this->getDealer(),
  171.         ]);
  172.     }
  173.     public function termsReplacement(): ?Response
  174.     {
  175.         $files $this->em->getRepository(ReplacementCarCondition::class)->findBy(['dealer' => $this->getDealer()], ['begin_date' => 'DESC']);
  176.         return $this->baseVolvoRender('@DcSite/Volvo/Terms/terms-providing-replacement-car.html.twig', [
  177.             'files' => $files,
  178.         ]);
  179.     }
  180.     public function volvoTour($sending): ?Response
  181.     {
  182.         return $this->baseVolvoRender('@DcSite/Volvo/Landing/landing-tour.html.twig'compact('sending'));
  183.     }
  184.     public function volvoTourSave(Request $requestMailManager $mailManager): RedirectResponse
  185.     {
  186.         $result $mailManager->processVolvoTour($request->request->all());
  187.         return $this->redirectToRoute('volvo_tour', ['sending' => $result 'success' 'test']);
  188.     }
  189.     public function volvoTour17($sending): ?Response
  190.     {
  191.         return $this->baseVolvoRender('@DcSite/Volvo/Landing/landing-tour-17.html.twig'compact('sending'));
  192.     }
  193.     public function volvoTour17Save(Request $requestMailManager $mailManager): RedirectResponse
  194.     {
  195.         $result $mailManager->processVolvoTour($request->request->all());
  196.         return $this->redirectToRoute('volvo_tour_17', ['sending' => $result 'success' 'test']);
  197.     }
  198. }