src/DcSiteBundle/Controller/Nissan/MainController.php line 99

Open in your IDE?
  1. <?php
  2. namespace DcSiteBundle\Controller\Nissan;
  3. use CoreBundle\Factory\InStockVehicle;
  4. use CoreBundle\Model\Vehicles\InStockRepository;
  5. use DcSiteBundle\Entity\ReplacementCarCondition;
  6. use DcSiteBundle\Entity\SalesContract;
  7. use DcSiteBundle\Entity\TermsMaintenance;
  8. use Symfony\Component\HttpFoundation\JsonResponse;
  9. use Symfony\Component\HttpFoundation\RedirectResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. class MainController extends BaseController
  13. {
  14.     /**
  15.      * @return RedirectResponse
  16.      */
  17.     public function redirectNissan(): RedirectResponse
  18.     {
  19.         return $this->redirectToRoute('nissan_homepage', [], 301);
  20.     }
  21.     public function index(Request $requestInStockVehicle $inStockVehicleFactoryInStockRepository $inStockRepositoryModel): ?Response
  22.     {
  23.         $rows $this->vehicleRepository->getNewByDealer($this->getDealer());
  24.         $rows array_map(function ($row) use ($request) {
  25.             $row $this->vehicleFactory->createByEntity($row);
  26.             return [
  27.                 'vehicleId' => $row->getVehicleId(),
  28.                 'brand' => $row->getBrand(),
  29.                 'fullName' => $row->getFullName(),
  30.                 'customName' => $row->getCustomName($request->getLocale()),
  31.                 'modelName' => $row->getModelName(),
  32.                 'price' => round($row->price()),
  33.                 'url' => $row->getUrl(),
  34.                 'image' => $row->getPreviewPath('reference'),
  35.                 'image_webp' => $row->getPreviewPathWebp('reference'),
  36.                 'hasHybrid' => $row->hasHybrid(),
  37.                 'isNew' => $row->isNew(),
  38.                 'position' => $row->getPosition(),
  39.                 'slogan' => $row->getSlogan($request->getLocale()),
  40.                 'category' => [
  41.                     'url' => $row->getCategory()->getUrl()
  42.                 ]
  43.             ];
  44.         }, $rows);
  45.         usort($rows, fn($a$b) => strcmp($a['position'], $b['position']));
  46.         $rowsStock $inStockRepositoryModel->getByDealer($this->getDealer(), 3);
  47.         $rowsStock array_map(function ($row) use ($request$inStockVehicleFactory) {
  48.             $row $inStockVehicleFactory->createByEntity($row);
  49.             return [
  50.                 'modelName' => $row->getModelName(),
  51.                 'fullName' => $row->getFullName(),
  52.                 'price' => round($row->price()),
  53.                 'url' => $row->getUrl(),
  54.                 'image' => $row->getPreviewPath('reference'),
  55.                 'image_webp' => $row->getPreviewPathWebp('reference'),
  56.                 'fuelTypeName' => $row->getFuelTypeName($request->getLocale()),
  57.                 'enginePower' => $row->getEnginePower($request->getLocale()),
  58.                 'transmissionTypeName' => $row->getTransmissionTypeName($request->getLocale()),
  59.                 'driveUnitTypeName' => $row->getDriveUnitTypeName($request->getLocale()),
  60.                 'equipment' => [
  61.                     'title' => $row->getEquipment()->getTitle()
  62.                 ]
  63.             ];
  64.         }, $rowsStock);
  65.         return $this->baseNissanRender('@DcSite/Nissan/Main/index.html.twig', [
  66.             'cars' => $rows,
  67.             'in_stock' => $rowsStock,
  68.             'dealer' => $this->getDealer(),
  69.         ]);
  70.     }
  71.     public function notFound(Request $request): ?Response
  72.     {
  73.         $Response = new Response();
  74.         $Response->setStatusCode(Response::HTTP_NOT_FOUND);
  75.         return $this->baseNissanRender('@DcSite/Nissan/404.html.twig', ['_locale' => $request->getLocale()], $Response);
  76.     }
  77.     public function initMenu(Request $request): JsonResponse
  78.     {
  79.         $menu $this->getModelMenuItems($request->getLocale(), 'reference');
  80.         foreach ($menu as &$category) {
  81.             foreach ($category['cars'] as &$car) {
  82.                 $car['url'] = $this->router->generate('nissan_one_car', ['category' => $category['url'], 'car' => $car['url']]);
  83.             }
  84.             $category['url'] = $this->router->generate('nissan_category_catalog', ['category' => $category['url']]);
  85.         }
  86.         return new JsonResponse($menu);
  87.     }
  88.     public function conditionOfSales(): ?Response
  89.     {
  90.         $filesByType $this->em->getRepository(SalesContract::class)->getFilesByTypes($this->getDealer());
  91.         return $this->baseNissanRender('@DcSite/Nissan/condition-of-sales.html.twig', [
  92.             'filesByType' => $filesByType,
  93.         ]);
  94.     }
  95.     public function termsMaintenance(): ?Response
  96.     {
  97.         $files $this->em->getRepository(TermsMaintenance::class)->findBy(['dealer' => $this->getDealer()], ['begin_date' => 'ASC']);
  98.         return $this->baseNissanRender('@DcSite/Nissan/terms-maintenance.html.twig', [
  99.             'mainFile' => array_pop($files),
  100.             'files' => $files,
  101.             'dealer' => $this->getDealer(),
  102.         ]);
  103.     }
  104.     public function personalData(): ?Response
  105.     {
  106.         return $this->baseNissanRender('@DcSite/Modules/personal-data/personal-data-new.html.twig', ['dealer' => $this->getDealer()]);
  107.     }
  108.     public function termsReplacement(): ?Response
  109.     {
  110.         $files $this->em->getRepository(ReplacementCarCondition::class)->findBy(['dealer' => $this->getDealer()], ['begin_date' => 'DESC']);
  111.         return $this->baseNissanRender('@DcSite/Nissan/Terms/terms-providing-replacement-car.html.twig', [
  112.             'files' => $files,
  113.         ]);
  114.     }
  115. }