- <?php
- namespace AutomarketBundle\Controller;
- use AutomarketBundle\Services\MainService;
- use CoreBundle\Component\CoreFormFactory;
- use CoreBundle\Factory\Vehicle;
- use DateTime;
- use DcSiteBundle\Model\CreditModel;
- use DcSiteBundle\Services\VehicleViewService;
- use Doctrine\ORM\EntityManagerInterface;
- use PortalBundle\Model\SeoMetaTag;
- use Symfony\Component\HttpFoundation\RequestStack;
- use Symfony\Component\HttpFoundation\Response;
- use CoreBundle\Entity\Featured;
- use CoreBundle\Model\Vehicles\AbstractVehicle;
- use DcSiteBundle\Form\SendQuestionType;
- use PortalBundle\Model\Catalog;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
- use Symfony\Component\Routing\RouterInterface;
- class CarController extends BaseController
- {
-     private MainService $mainService;
-     private RouterInterface $router;
-     public function __construct(CoreFormFactory $coreFormFactory, RequestStack $requestStack, EntityManagerInterface $em,
-                                 SeoMetaTag $seoMetaTag, RouterInterface $router, MainService $mainService)
-     {
-         parent::__construct($coreFormFactory, $requestStack, $em, $seoMetaTag);
-         $this->router = $router;
-         $this->mainService = $mainService;
-     }
-     public function car(Request $request, VehicleViewService $vehicleViewService, CreditModel $creditModel, Vehicle $vehicleFactory): Response
-     {
-         $lang = $request->getLocale();
-         $id = $request->get('id');
-         $vehicle = $vehicleFactory->createUsedById($id);
-         if (!$vehicle || (!$vehicle->getState() && !$vehicle->getSold())) {
-             throw new NotFoundHttpException();
-         }
-         $vehicleViewService->saveViewVehicle($vehicle, $request->getClientIp(), new DateTime());
-         $vehicle->getVehicleEntity()->setViews((int)$vehicle->getVehicleEntity()->getViews() + 1);
-         $this->em->persist($vehicle->getVehicleEntity());
-         $this->em->flush();
-         $this->mainService->setLang($request->getLocale());
-         //TODO Видалити коли буде merge VIDI карточки авто
-         $featuresIds = $this->getFeatures($this->getUser());
-         $isFeature = $featuresIds[$vehicle->getVehicleItemId()] ?? null;
-         //TODO Видалити коли буде merge VIDI карточки авто
-         $isCompared = $this->getComparison($vehicle);
-         if($this->getUser() && $this->getUser()->hasRole('ROLE_EMPLOYEE_MANAGER') && $vehicle->getFiles() && $vehicle->getFiles()->first()){
-             $file = $vehicle->getFiles()->first();
-             $pathFile = $this->router->generate('base_download_file', ['id' => $file->getId()]);
-         }
-         return $this->baseAutomarketRender('@Automarket/Car/card-car.html.twig', [
-             'vehicle' => $vehicle,
-             'pathFile' => $pathFile ?? null,
-             'featuredId' => $isFeature,
-             'comparedId' => $isCompared,
-             'isSelect' => !in_array($vehicle->getDealer()->getId(), Catalog::NOT_VIDI_SELECT_DEALERS),
-             'creditPayment' => $creditModel->getMinPayment($vehicle),
-             'vehicleType1' => $this->mainService->getProposeVehicles($this->getDealer(), $this->getUser(), true, $lang, $vehicle, $vehicle->getVehicleItemId(), true),
-             'vehicleType2' => $this->mainService->getProposeVehicles($this->getDealer(), $this->getUser(), true, $lang, $vehicle, $vehicle->getVehicleItemId()),
-             'vehicleType3' => $this->mainService->getNewArrivals($this->getDealer(), $this->getUser(), true, $lang),
-             'buyForm' => $this->CoreFormFactory()->buyForm(null, $vehicle->getVehicleEntity())->createView(),
-             'sendQuestionForm' => $this->CoreFormFactory()->sendQuestionForm(null, $this->getDealer(), null, SendQuestionType::NOTIFY_ABOUT_PRICE_TYPE)->createView(),
-             'vehicleUrl' => $request->getSchemeAndHttpHost().$this->router->generate('automarket_vehicle', ['state' => $request->get('state'), 'type' => $request->get('type'), 'brand' => $request->get('brand'), 'model' => $request->get('model'), 'id' => $request->get('id')]),
-             'privacyLink' => $this->router->generate('automarket_personal_data_agreement'),
-         ]);
-     }
-     //TODO Видалити коли буде merge VIDI карточки авто
-     public function getComparison(AbstractVehicle $vehicle)
-     {
-         $request = $this->requestStack->getCurrentRequest();
-         $compareCookie = $request->cookies->get('compare');
-         $vehicleComparison = explode(',', $compareCookie);
-         return in_array($vehicle->getVehicleItemId(), $vehicleComparison) ? $vehicle->getVehicleItemId() : null;
-     }
-     //TODO Видалити коли буде merge VIDI карточки авто
-     public function getFeatures($user): array
-     {
-         $featuresIds = [];
-         if (!$user) {
-             return $featuresIds;
-         }
-         $features = $this->em->getRepository(Featured::class)->findBy(['type' => 'vehicle', 'user' => $user]);
-         /** @var Featured $feature */
-         foreach ($features as $feature) {
-             $favData = json_decode($feature->getData());
-             if (!isset($favData->vehicleItemId)) {
-                 continue;
-             }
-             $featuresIds[$favData->vehicleItemId] = $feature->getId();
-         }
-         return $featuresIds;
-     }
- }
-