<?php
namespace DcSiteBundle\Controller\Unicommerce;
use CoreBundle\Component\CoreFormFactory;
use CoreBundle\Component\FormManager;
use CoreBundle\Entity\Vehicles\Category;
use CoreBundle\Entity\Vehicles\Group;
use CoreBundle\Factory\Vehicle as VehicleFactory;
use CoreBundle\Model\Api\OnlineService\ApiServer1C;
use CoreBundle\Model\Vehicles\Repository;
use CoreBundle\Services\MediaExtensionVidi;
use DcSiteBundle\Services\VehicleService;
use Doctrine\ORM\EntityManagerInterface;
use PortalBundle\Model\SeoMetaTag;
use Symfony\Component\Filesystem\Filesystem;
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 CarController 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 carCatalog(Request $request, $category): ?Response
{
$category = $request->get('category');
$catalogCategory = $this->em->getRepository(Category::class)->findOneBy(['url' => $category]);
if (!$catalogCategory) {
throw new NotFoundHttpException();
}
$catalogGroup = $this->em->getRepository(Group::class)->getGroupByCategory($catalogCategory, $this->getDealer());
$vehicleGroup = [];
if ($catalogGroup) {
/** @var Group $group */
foreach ($catalogGroup as $group) {
$vehiclesRepo = $this->vehicleRepository->getByCategoryGroup($catalogCategory, $group, $this->getDealer());
$vehicles = $this->vehicleFactory->createByEntities($vehiclesRepo);
$vehicleGroup[] = [
'group' => $group,
'vehicles' => $vehicles,
];
}
} else {
$vehiclesRepo = $this->vehicleRepository->getByCategory($catalogCategory, $this->getDealer());
$vehicleGroup[] = [
'group' => null,
'vehicles' => $this->vehicleFactory->createByEntities($vehiclesRepo),
];
}
return $this->baseUnicommerceRender('@DcSite/Unicommerce/Car/car-catalog.html.twig', [
'seoMeta' => $this->seoMetaTag->getSeoMeta($request),
'catalogCategory' => $catalogCategory,
'vehicleGroup' => $vehicleGroup,
]);
}
public function carCatalogGroup(Request $request): ?Response
{
$category = $request->get('category');
$group = $request->get('group');
$catalogCategory = $this->em->getRepository(Category::class)->findOneBy(['url' => $category]);
if (!$catalogCategory) {
throw new NotFoundHttpException();
}
$catalogGroup = $this->em->getRepository(Group::class)->findOneBy(['dealer' => $this->getDealer(), 'url' => $group]);
if (!$catalogGroup) {
throw new NotFoundHttpException();
}
$vehiclesRepo = $this->vehicleRepository->getByCategoryGroup($catalogCategory, $catalogGroup, $this->getDealer());
$vehicles = $this->vehicleFactory->createByEntities($vehiclesRepo);
return $this->baseUnicommerceRender('@DcSite/Unicommerce/Car/car-catalog-group.html.twig', [
'catalogCategory' => $catalogCategory,
'catalogGroup' => $catalogGroup,
'vehicles' => $vehicles,
]);
}
public function carSingle(Request $request, VehicleService $vehicleService): ?Response
{
$category = $request->get('category');
$group = $request->get('group');
$vehicleUrl = $request->get('vehicleUrl');
$catalogCategory = $this->em->getRepository(Category::class)->findOneBy(['url' => $category]);
if (!$catalogCategory) {
throw new NotFoundHttpException();
}
$catalogGroup = null;
if ($group) {
$catalogGroup = $this->em->getRepository(Group::class)->findOneBy(['dealer' => $this->getDealer(), 'url' => $group]);
if (!$catalogGroup) {
throw new NotFoundHttpException();
}
}
$vehicle = $this->vehicleFactory->createByUrl($vehicleUrl, $this->getDealer());
$galleryImages = [];
if ($vehicle->getGallery()) {
$galleryItems = $vehicle->getGallery()->getGalleryItems();
foreach ($galleryItems as $galleryItem) {
$galleryImages[] = $this->mediaExtensionVidi->getPath($galleryItem->getMedia(), 'reference');
}
}
if (!$vehicle) {
throw new NotFoundHttpException();
}
$vehicleEm = $vehicle->getVehicleEntity();
$vehiclePrice = $vehicleService->getVehiclePrice($vehicleEm);
$vehicleEquipment = $vehicleService->getVehicleEquipment($vehicleEm);
$vehicleFile = $vehicleService->getVehicleFile($vehicleEm);
$vehicleFaqs = $vehicleService->getVehicleFaqs($vehicleEm);
return $this->baseUnicommerceRender('@DcSite/Unicommerce/Car/car-card-single.html.twig', [
'catalogCategory' => $catalogCategory,
'catalogGroup' => $catalogGroup,
'vehicle' => $vehicle,
'vehiclePrice' => $vehiclePrice,
'vehicleEquipment' => $vehicleEquipment,
'vehicleFile' => $vehicleFile,
'faqs' => $vehicleFaqs,
'serviceOrderForm' => $this->CoreFormFactory()->subFeedbackQuestionForm()->createView(),
'galleryImages' => $galleryImages
]);
}
}