<?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;
}
}