- <?php
- namespace DcSiteBundle\Controller\LandRover;
- use CoreBundle\Component\CoreFormFactory;
- use CoreBundle\Component\FormManager;
- use CoreBundle\Entity\Vehicles\Vehicle;
- use CoreBundle\Entity\Vehicles\VehicleFile;
- use CoreBundle\Factory\Vehicle as VehicleFactory;
- use CoreBundle\Model\Api\OnlineService\ApiServer1C;
- use CoreBundle\Model\Post;
- use CoreBundle\Model\Vehicles\Repository;
- use CoreBundle\Model\WinnerRate;
- use CoreBundle\Services\MediaExtensionVidi;
- use DcSiteBundle\Entity\MainSlider;
- use DcSiteBundle\Entity\ReplacementCarCondition;
- use DcSiteBundle\Entity\SalesContract;
- use DcSiteBundle\Entity\TermsMaintenance;
- use DcSiteBundle\Model\Form\ServicesOrderForm;
- use DcSiteBundle\Services\ModelRange\Pages\PagesService;
- use Doctrine\ORM\EntityManagerInterface;
- use Exception;
- use PortalBundle\Model\SeoMetaTag;
- use Symfony\Component\Filesystem\Filesystem;
- use Symfony\Component\HttpFoundation\JsonResponse;
- use Symfony\Component\HttpFoundation\RedirectResponse;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\HttpFoundation\RequestStack;
- use Symfony\Component\HttpFoundation\Response;
- use Symfony\Component\HttpFoundation\Session\SessionInterface;
- use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
- use Symfony\Component\Routing\RouterInterface;
- use Twig\Environment;
- class MainController extends BaseController
- {
-     public function __construct(CoreFormFactory $coreFormFactory, SeoMetaTag $seoMetaTag, RequestStack $requestStack, RouterInterface $router, FormManager $formManager, EntityManagerInterface $em, ApiServer1C $apiServer1C, SessionInterface $session, Filesystem $filesystem, MediaExtensionVidi $mediaExtensionVidi, Repository $vehicleRepository, VehicleFactory $vehicleFactory, Environment $twig)
-     {
-         parent::__construct($coreFormFactory, $seoMetaTag, $requestStack, $router, $formManager, $em, $apiServer1C, $session, $filesystem, $mediaExtensionVidi, $vehicleRepository, $vehicleFactory, $twig);
-     }
-     public function redirectLandRover(): RedirectResponse
-     {
-         return $this->redirectToRoute('landrover_homepage', [], 301);
-     }
-     public function index(Request $request): Response
-     {
-         $media = $this->mediaExtensionVidi;
-         $sliders = $this->em->getRepository(MainSlider::class)->getMainSlidersByDealer($this->getDealer());
-         $sliders = array_map(fn($row) => [
-             'title' => $row->getTitle($request->getLocale()),
-             'subTitle' => $row->getSubTitle($request->getLocale()),
-             'btn' => $row->getBtnFstTitle($request->getLocale()),
-             'url' => $row->getUrl(),
-             'image' => $media->getPath($row->getImage(), 'reference'),
-             'image_webp' => $media->pathWebp($row->getImage(), 'reference'),
-             'image_mobile' => $media->getPath($row->getImageMobile(), 'reference'),
-             'image_webp_mobile' => $media->pathWebp($row->getImageMobile(), 'reference')
-         ], $sliders);
-         $cars = $this->vehicleRepository->getNewByDealer($this->getDealer());
-         $cars = array_reduce($cars, function ($rows, $row) use ($request) {
-             try {
-                 $row = $this->vehicleFactory->createByEntity($row);
-                 if (empty($row)) {
-                     return $rows;
-                 }
-                 $rows[] = [
-                     'vehicleId' => $row->getVehicleId(),
-                     'isNew' => $row->isNew(),
-                     'fullName' => $row->getFullName(),
-                     'modelName' => $row->getModelName(),
-                     'slogan' => $row->getSlogan($request->getLocale()),
-                     'price' => round($row->price()),
-                     'url' => $row->getUrl(),
-                     'image' => $row->getPreviewPath('reference'),
-                     'image_webp' => $row->getPreviewPathWebp('reference')
-                 ];
-                 return $rows;
-             } catch (Exception $e) {
-                 return $rows;
-             }
-         }, []);
-         return $this->baseLandRoverRender('@DcSite/LandRover/Main/index.html.twig', [
-             'serviceForm' => $this->CoreFormFactory()->serviceForm()->createView(),
-             'cars' => $cars,
-             'sliders' => $sliders
-         ]);
-     }
-     public function modelLineup(Request $request, PagesService $pagesService): ?Response
-     {
-         $sliders = $this->em->getRepository(MainSlider::class)->getMainSlidersByDealer($this->getDealer());
-         $vehicles = $this->vehicleRepository->getNewByDealer($this->getDealer());
-         $result = [];
-         foreach ($vehicles as $vehicle) {
-             $result[] = $this->vehicleFactory->createByEntity($vehicle);
-         }
-         return $this->baseLandRoverRender('@DcSite/LandRover/model-lineup.html.twig', [
-             'serviceForm' => $this->CoreFormFactory()->serviceForm()->createView(),
-             'cars' => $result,
-             'sliders' => $sliders,
-             'catalogModelRangePages' => $pagesService
-                 ->setLang($request->getLocale())
-                 ->getPages($this->getDealer())
-         ]);
-     }
-     public function modelLineupPage(Request $request, PagesService $pagesService, string $url): ?Response
-     {
-         $page = $pagesService
-             ->setLang($request->getLocale())
-             ->getPage($this->getDealer(), $url);
-         if (empty($page)) {
-             throw new NotFoundHttpException();
-         }
-         return $this->baseLandRoverRender('@DcSite/LandRover/model-lineup-page.html.twig', ['page' => $page]);
-     }
-     public function notFound(): ?Response
-     {
- //        $Response = new Response('',Response::HTTP_NOT_FOUND);
- //        return $this->$this->baseLandRoverRender('@DcSite/LandRover/404.html.twig', ['_locale' => $request->getLocale()]);
-         $Response = new Response();
-         $Response->setStatusCode(Response::HTTP_NOT_FOUND);
-         return $this->baseLandRoverRender('@DcSite/LandRover/404.html.twig', [], $Response);
-     }
-     public function specialOffers(): ?Response
-     {
-         $specialsCars = $this->em->getRepository(\CoreBundle\Entity\Post::class)->getActionsByDealer($this->getDealer(), Post::ACTION_TYPE_CAR);
-         $specialsService = $this->em->getRepository(\CoreBundle\Entity\Post::class)->getActionsByDealer($this->getDealer(), Post::ACTION_TYPE_SERVICE);
-         return $this->baseLandRoverRender('@DcSite/LandRover/Specials/special-offers.html.twig', [
-             'specialsCars' => $specialsCars,
-             'specialsService' => $specialsService,
-         ]);
-     }
-     public function specialOffersSingle(Request $request, Post $postModel, $url): ?Response
-     {
-         $post = $postModel->initByUrl($this->getDealer(), $url);
-         return $this->baseLandRoverRender('@DcSite/LandRover/Specials/specials-single.html.twig', [
-             'post' => $post,
-             'serviceOrderForm' => $this->CoreFormFactory()->servicesOrderForm(ServicesOrderForm::LEASING, $request->getLocale())->createView()
-         ]);
-     }
-     public function menuInit(Request $request, WinnerRate $winnerRate): JsonResponse
-     {
-         $vehicles = $this->vehicleRepository->getNewByDealer($this->getDealer());
-         $rate = $winnerRate->getRateWinner($this->getDealer());
-         $domain = $this->getDealer()->getDomain();
-         $data = [];
-         $position = [];
-         /** @var $vehicle Vehicle */
-         foreach ($vehicles as $vehicle) {
-             $vehicleModel = $this->vehicleFactory->createByEntity($vehicle);
-             if (!$vehicleModel) {
-                 continue;
-             }
-             $vehicleId = $vehicleModel->getVehicleId();
-             $data[$vehicleId] = [
-                 'id' => $vehicleId,
-                 'name' => $vehicleModel->getModelName(),
-                 'modelName' => $vehicleModel->getModelName(),
-                 'preview' => $vehicleModel->getPreviewPath('big'),
-                 'preview_webp' => $vehicleModel->getPreviewPathWebp('reference'),
-                 'price' => $vehicleModel->price(),
-                 'slogan' => $vehicleModel->getSlogan($request->getLocale()),
-                 'url' => $vehicleModel->getUrl(),
-                 'link' => 'https://' . $domain . $this->router->generate('landrover_card_car', ['car' => $vehicleModel->getUrl()]),
-                 'linkCarConfiguration' => 'https://' . $domain . $this->router->generate('landrover_card_car_configuraion', ['car' => $vehicleModel->getUrl()]),
-                 'configuratorPath' => 'https://' . $domain . $this->router->generate('landrover_car_configurator', ['url' => $vehicleModel->getUrl()]),
-             ];
-             $position[$vehicleId] = $vehicle->getPosition();
-         }
-         array_multisort($position, SORT_ASC, $data);
-         return $this->json(['success' => true, 'data' => $data, 'rate' => $rate, 'date' => date('d.m.Y')]);
-     }
-     public function consent(): ?Response
-     {
-         return $this->baseLandRoverRender('@DcSite/LandRover/consent.html.twig');
-     }
-     public function cokie(): ?Response
-     {
-         return $this->baseLandRoverRender('@DcSite/LandRover/cokie-and-privacy-policy.html.twig');
-     }
-     public function testDrivePrivacy(): ?Response
-     {
-         return $this->baseLandRoverRender('@DcSite/LandRover/td-privacy.html.twig');
-     }
-     public function conditions(): ?Response
-     {
-         $filesByType = $this->em->getRepository(SalesContract::class)->getFilesByTypes($this->getDealer());
-         return $this->baseLandRoverRender('@DcSite/LandRover/conditions-of-sales.html.twig', [
-             'filesByType' => $filesByType,
-         ]);
-     }
-     public function termsMaintenance(): ?Response
-     {
-         $files = $this->em->getRepository(TermsMaintenance::class)->findBy(['dealer' => $this->getDealer()], ['begin_date' => 'ASC']);
-         return $this->baseLandRoverRender('@DcSite/LandRover/terms-maintenance.html.twig', [
-             'mainFile' => array_pop($files),
-             'files' => $files,
-             'dealer' => $this->getDealer(),
-         ]);
-     }
-     public function broshure(Request $request): ?Response
-     {
-         $vehicles = $this->vehicleRepository->getNewByDealer($this->getDealer());
-         $result = [];
-         /** @var Vehicle $car */
-         foreach ($vehicles as $car) {
-             $vehicleId = $car->getId();
-             $files = $car->getFiles();
-             if (!$files->count()) {
-                 continue;
-             }
-             $item = [
-                 'car' => $car,
-                 'files' => [],
-             ];
-             /** @var VehicleFile $file */
-             foreach ($files as $file) {
-                 $item['files'][] = [
-                     'title' => $file->getTitle($request->getLocale()),
-                     'href' => $this->router->generate('base_download_file', ['id' => $file->getId()])
-                 ];
-             }
-             $result[$vehicleId] = $item;
-             $position[$vehicleId] = $car->getPosition();
-         }
-         array_multisort($position, SORT_ASC, $result);
-         return $this->baseLandRoverRender('@DcSite/LandRover/broshure.html.twig', ['cars' => $result]);
-     }
-     public function personalProposition(): ?Response
-     {
-         return $this->baseLandRoverRender('@DcSite/LandRover/personal-proposition.html.twig');
-     }
-     public function termsReplacement(): ?Response
-     {
-         $files = $this->em->getRepository(ReplacementCarCondition::class)->findBy(['dealer' => $this->getDealer()], ['begin_date' => 'DESC']);
-         return $this->baseLandRoverRender('@DcSite/LandRover/Terms/terms-providing-replacement-car.html.twig', [
-             'files' => $files,
-         ]);
-     }
- }
-