<?php
namespace DcSiteBundle\Controller;
use BmpGatewayBundle\Entity\CrmCreditLeadCalculation;
use CoreBundle\Component\CoreFormFactory;
use CoreBundle\Component\FormManager;
use CoreBundle\Entity\Brand;
use CoreBundle\Entity\Dealer;
use CoreBundle\Entity\Forms;
use CoreBundle\Entity\Model;
use CoreBundle\Entity\Vehicles\Equipment;
use CoreBundle\Entity\Vehicles\Vehicle;
use CoreBundle\Entity\Vehicles\VehicleItem;
use CoreBundle\Factory\Vehicle as VehicleFactory;
use CoreBundle\Model\Api\OnlineService\ApiServer1C;
use CoreBundle\Model\DealerModel;
use CoreBundle\Model\Vehicles\Repository;
use CoreBundle\Services\MediaExtensionVidi;
use DateTime;
use DcSiteBundle\Entity\CreditProgram;
use DcSiteBundle\Model\CreditModel;
use DcSiteBundle\Services\CarInStockService;
use DcSiteBundle\Services\CatalogService;
use Doctrine\ORM\EntityManagerInterface;
use Exception;
use Mpdf\Mpdf;
use Mpdf\MpdfException;
use Mpdf\Output\Destination;
use PortalBundle\Model\SeoMetaTag;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\JsonResponse;
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 Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Twig\Environment;
class CreditController extends BaseDcController
{
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 getVehicleBrand(Request $request): JsonResponse
{
$isUsed = (bool)($request->get('isUsed') === 'true');
$brands = [];
if ($request->get('dealer_id') && $isUsed) {
$dealer = $this->em->getRepository(Dealer::class)->find($request->get('dealer_id'));
$isAutomarket = $dealer && $dealer->getId() === DealerModel::SECOND_HAND_DEALER;
$brands = $this->em->getRepository(Brand::class)
->getCarAvailBrandsInstance($isUsed, false, $isAutomarket ? null : $dealer, $isAutomarket);
}
if (empty($brands)) {
$brands = $this->em->getRepository(Brand::class)->getCarAvailBrandsInstance($isUsed);
}
$result = [];
/** @var Brand $brand */
foreach ($brands as $brand) {
$result[] = [
'id' => current($brand)->getId(),
'title' => current($brand)->getName(),
'min_price' => ceil($brand['min_price']),
];
}
return new JsonResponse(['success' => true, 'brands' => $result]);
}
public function getVehicleModel(Request $request): JsonResponse
{
$isUsed = (bool)($request->get('isUsed') === 'true');
$brand = $this->em->getRepository(Brand::class)->find($request->get('brand_id'));
$models = [];
if ($request->get('dealer_id')) {
$dealer = $this->em->getRepository(Dealer::class)->find($request->get('dealer_id'));
$isAutomarket = $dealer && $dealer->getId() === DealerModel::SECOND_HAND_DEALER;
$models = $this->em->getRepository(Model::class)
->getCarAvailModelsInstanceByBrand($brand, $isUsed, false, $isAutomarket ? null : $dealer, $isAutomarket);
}
if (empty($models)) {
$models = $this->em->getRepository(Model::class)->getCarAvailModelsInstanceByBrand($brand, $isUsed);
}
$result = [];
/** @var Model $model */
foreach ($models as $model) {
$result[] = [
'id' => current($model)->getId(),
'title' => current($model)->getTitle(),
'min_price' => ceil($model['min_price']),
];
}
return new JsonResponse(['success' => true, 'models' => $result]);
}
public function getVehicleEquipment(Request $request): JsonResponse
{
$isUsed = (bool)($request->get('isUsed') === 'true');
$modelId = $request->get('model_id');
/* @var Dealer $dealer */
$dealer = null;
if ($request->get('dealer_id')) {
$dealer = $this->em->getRepository(Dealer::class)->find($request->get('dealer_id'));
}
$model = $this->em->getRepository(Model::class)->find($modelId);
$vehicleItems = [];
if ($isUsed && $request->get('dealer_id') && $request->get('brand_id')) {
$vehicleItems = $this->em->getRepository(VehicleItem::class)->getCarAvailVehicleItemInstanceByModel($model, $isUsed, false, $dealer);
}
if (empty($vehicleItems)) {
$vehicleItems = $this->em->getRepository(VehicleItem::class)->getCarAvailVehicleItemInstanceByModel($model, $isUsed);
}
$result = [];
$existEquipment = [];
/** @var VehicleItem $vehicleItem */
foreach ($vehicleItems as $vehicleItem) {
$min_price = $vehicleItem['min_price'];
$vehicleItem = current($vehicleItem);
if ($dealer && in_array($dealer->getId(), DealerModel::NISSAN_DEALERS)
&& $vehicleItem->getVehicle()->getDealer()->getId() !== $dealer->getId()) {
continue;
}
if (isset($existEquipment[$vehicleItem->getEquipment()->getId()])) {
continue;
}
$result[] = [
'id' => $vehicleItem->getEquipment()->getId(),
'title' => $vehicleItem->getEquipment()->getTitle(),
'year' => $vehicleItem->getYear(),
'millage' => $vehicleItem->getMileage(),
'min_price' => ceil($min_price),
'vehicleItemId' => $vehicleItem->getId(),
];
$existEquipment[$vehicleItem->getEquipment()->getId()] = true;
}
return new JsonResponse(['success' => true, 'equipments' => $result]);
}
public function getVehicleVariation(Request $request): JsonResponse
{
$isUsed = (bool)($request->get('isUsed') === 'true');
$equipmentId = $request->get('equipment_id');
$vehicleItemId = $request->get('vehicleItemId');
$dealer = null;
if ($request->get('dealer_id')) {
$dealer = $this->em->getRepository(Dealer::class)->find($request->get('dealer_id'));
}
$equipment = $this->em->getRepository(Equipment::class)->find($equipmentId);
$vehicleItems = $this->em->getRepository(VehicleItem::class)->getCarAvailVehicleItemInstanceByEquipment($equipment, $isUsed, false, $dealer, $vehicleItemId);
$result = [];
/** @var VehicleItem $vehicleItem */
foreach ($vehicleItems as $vehicleItem) {
$min_price = $vehicleItem['min_price'];
$vehicleItem = current($vehicleItem);
$result[] = [
'id' => $vehicleItem->getId(),
'vehicleId' => $vehicleItem->getVehicle()->getId(),
'title' => $vehicleItem->getVariation()->getTitle(),
'min_price' => ceil($min_price),
'vehicleItemId' => $vehicleItem->getId()
];
}
return new JsonResponse(['success' => true, 'variations' => $result]);
}
public function getVehicleByVehicleItem(Request $request, CarInStockService $carInStockService, CatalogService $catalogService): JsonResponse
{
$vehicleItemId = $request->get('vehicleItemId');
$inStockId = $request->get('inStockId');
$routeSettings = [];
if (isset($request->request->all()['newCarUrl'])) {
$routeSettings['new_car'] = $request->get('newCarUrl');
}
if (isset($request->request->all()['usedCarUrl'])) {
$routeSettings['used_car'] = $request->get('usedCarUrl');
}
$vehicleItem = $this->em->getRepository(VehicleItem::class)->find($vehicleItemId);
if ($inStockId) {
$inStockVehicles = $carInStockService->getCarInStockByVehicle($vehicleItem->getVehicle()->getId(), $request->getLocale(), null);
$currentInStock = [];
foreach ($inStockVehicles['vehicles'] as $inStock) {
if ($inStock['id'] == $inStockId) {
$currentInStock = $inStock;
}
}
}
$vehicle = $this->vehicleFactory->createByVehicleItem($vehicleItem);
try {
$dealer = $this->getDealer();
} catch (Exception $e) {
$dealer = null;
}
$response = $catalogService->getAjaxResult([['vehicle' => $vehicle]], $request->getLocale(), $routeSettings, $dealer);
$data = array_shift($response)['vehicle'];
$data = array_merge($data, [
'id' => $vehicle->getVehicleId(),
'hasActionPrice' => $vehicle->hasActionPrice(),
'dealerId' => $vehicle->getDealer()->getId(),
'characteristicsWithGroup' => $vehicle->getCharacterisaticsWithGroup($request->getLocale()),
'fullPrice' => $vehicle->fullPrice(),
'image' => $this->mediaExtensionVidi->getPath($vehicle->getPreviewOrGalleryImage(), 'reference'),
'fullOptionsByEquipment' => $vehicle->getOptionsByEquipment($vehicle->getEquipment(), $request->getLocale()),
]);
if ($vehicle->isUsed()) {
$data['href'] = $this->router->generate('portal_used_car',['url' => $vehicle->getUrl()]);
} else {
$data['href'] = $this->router->generate('portal_new_car',
['dealer' => $vehicle->getDealer()->getUrl(), 'url' => $vehicle->getUrl(), 'variation' => $vehicle->getVehicleItemId()]);
}
if (!empty($currentInStock)) {
$data['price'] = number_format($currentInStock['price'], 0, ' ', ' ');
$data['inStockPrice'] = $currentInStock['price'];
$data['fullPrice'] = $currentInStock['fullPrice'];
$data['image'] = $currentInStock['image'];
}
return new JsonResponse(['success' => true, 'vehicle' => $data]);
}
public function brand(Request $request): JsonResponse
{
$brands = $this->em->getRepository(Brand::class)->getAvailBrandsInstance(true, true);
$result = [];
$mediaTwig = $this->mediaExtensionVidi;
$locale = $request->getLocale();
/**
* @var int $key
* @var Brand $brand
*/
foreach ($brands as $key => $brand) {
$result[$key] = [
'id' => $brand->getId(),
'name' => $brand->getName(),
'image' => $mediaTwig->getPath($brand->getLogo(), 'menu'),
];
if (count($brand->getDealer()) == 1) {
$result[$key]['dealerId'] = $brand->getDealer()->first()->getId();
$result[$key]['path'] = $this->router->generate('portal_finance_credit_single', ['dealer' => $brand->getDealer()->first()->getId()]);
} else {
/** @var Dealer $dealer */
foreach ($brand->getDealer() as $dealer) {
$result[$key]['dealers'][] = [
'id' => $dealer->getId(),
'title' => $dealer->getNameByLocale($locale),
'adres' => $dealer->getAddressByLocale($locale),
'path' => $this->router->generate('portal_finance_credit_single', ['dealer' => $dealer->getId()]),
];
}
}
}
return new JsonResponse(['success' => true, 'brands' => $result]);
}
public function creditInit(): JsonResponse
{
try {
$dealer = $this->getDealer();
$dealerId = $dealer->getId();
} catch (NotFoundHttpException $e) {
$dealerId = false;
}
return new JsonResponse(['success' => true, 'dealer' => $dealerId]);
}
public function loadCreditTpl(): Response
{
return new Response($this->renderView('@DcSite/Modules/n-credit-tpl.html.twig', [
'creditForm' => $this->CoreFormFactory()->creditForm()->createView(),
'dealerId' => $this->getDealer()->getId(),
]));
}
public function initByDealer(Request $request): JsonResponse
{
$dealerId = $request->request->get('dealer');
$Dealer = $dealerId ? $this->em->getRepository(Dealer::class)->find($dealerId) : null;
if (!$Dealer) {
return new JsonResponse(['success' => false]);
}
if ($request->get('isUsed')) {
$vehicles = $this->vehicleRepository->getUsedByDealer($Dealer);
$vehicleArray = $this->buildUsedVehicles($vehicles);
} else {
$vehicles = $this->vehicleRepository->getNewByDealer($Dealer);
$vehicleArray = $this->buildNewVehicles($vehicles, $request);
}
$brandData = [
'id' => '',
'name' => '',
];
if ($Dealer->getBrand()) {
$brandData = [
'id' => $Dealer->getBrand()->getId(),
'name' => $Dealer->getBrand()->getName(),
];
}
return new JsonResponse(['success' => true, 'cars' => $vehicleArray, 'brand' => $brandData]);
}
private function buildNewVehicles($vehicles, Request $request): array
{
$vehicleArray = [];
$imageProvider = $this->mediaExtensionVidi;
/** @var Vehicle $vehicle */
foreach ($vehicles as $vehicle) {
if (!$vehicle->getCreditAvailable()) continue;
$vehicleModel = $this->vehicleFactory->createByEntity($vehicle);
if (!$vehicleModel) continue;
$groupId = $vehicleModel->getCategory() ? $vehicleModel->getCategory()->getId() : null;
$categories = $vehicleModel->getCategories();
$category = count($categories) ? $categories->first() : null;
if (!isset($vehicleArray[$groupId])) {
$vehicleArray[$groupId] = [
'id' => $groupId,
'title' => $category ? $category->getTitle($request->getLocale()) : null,
'cars' => [],
];
}
$hasHybrid = $vehicleModel->hasHybrid() ? ' Hybrid' : '';
$carItem = [
'image' => $imageProvider->getPath($vehicleModel->getPreview(), 'small'),
'carName' => $vehicleModel->getModelName() . $hasHybrid,
'position' => $vehicleModel->getPosition(),
'priceFrom' => $vehicleModel->price(),
'isUsed' => $vehicleModel->isUsed(),
'id' => $vehicleModel->getVehicleId(),
'hasHybrid' => $vehicleModel->hasHybrid(),
'equipments' => []
];
/** @var Equipment $equipment */
foreach ($vehicleModel->getAvailEquipments() as $equipment) {
$equipmentItem = [
'id' => $equipment->getId(),
'title' => $equipment->getTitle(),
'priceFrom' => $equipment->minPrice(),
'variations' => []
];
/** @var VehicleItem $vehicleItem */
foreach ($equipment->getVehicleItems() as $vehicleItem) {
if (!$vehicleItem->getState()) {
continue;
}
if ($vehicleItem->calcPrice() == 0) {
continue;
}
$Vehicle = $this->vehicleFactory->createByVehicleItem($vehicleItem);
$equipmentItem['variations'][] = [
'id' => $vehicleItem->getId(),
'price' => $Vehicle->price(),
'fuel' => $Vehicle->getFuelTypeName($request->getLocale()),
'drive' => $Vehicle->getDriveUnitTypeName($request->getLocale()),
'body' => $Vehicle->getBodyTypeName($request->getLocale()),
'transmission' => $Vehicle->getTransmissionTypeName($request->getLocale()),
];
}
if (count($equipmentItem['variations'])) {
$carItem['equipments'][] = $equipmentItem;
}
}
if (count($carItem['equipments'])) {
$vehicleArray[$groupId]['cars'][] = $carItem;
}
}
foreach ($vehicleArray as $group => $item) {
if (count($item['cars']) == 0) {
unset($vehicleArray[$group]);
continue;
}
usort($vehicleArray[$group]['cars'], fn($a, $b) => $a['position'] <=> $b['position']);
}
return $vehicleArray;
}
private function buildUsedVehicles($vehicles): array
{
$vehicleArray = [];
$imageProvider = $this->mediaExtensionVidi;
/** @var Vehicle $vehicle */
foreach ($vehicles as $vehicle) {
if (!$vehicle->getCreditAvailable()) continue;
$vehicleModel = $this->vehicleFactory->createByEntity($vehicle);
if (!$vehicleModel) {
continue;
}
$groupId = 'used';
$groupName = 'used';
if (!isset($vehicleArray[$groupId])) {
$vehicleArray[$groupId] = [
'id' => $groupId,
'title' => $groupName,
'cars' => [],
];
}
$carItem = [
'image' => $imageProvider->getPath($vehicleModel->getPreview(), 'small'),
'carName' => $vehicleModel->getFullName(),
'isUsed' => $vehicleModel->isUsed(),
'price' => $vehicleModel->price(),
'position' => $vehicleModel->getPosition(),
'priceFrom' => $vehicleModel->price(),
'id' => $vehicleModel->getVehicleId(),
];
$vehicleArray[$groupId]['cars'][] = $carItem;
}
foreach ($vehicleArray as $group => $item) {
usort($vehicleArray[$group]['cars'], fn($a, $b) => $a['position'] <=> $b['position']);
}
return $vehicleArray;
}
public function programs(Request $request, CreditModel $creditModel): JsonResponse
{
$vehicleId = $request->request->get('id');
$vId = $request->request->get('vId');
$Vehicle = null;
if ($vId) {
$VehicleItem = $this->em->getRepository(VehicleItem::class)->find($vId);
if ($VehicleItem) {
$Vehicle = $this->vehicleFactory->createByVehicleItem($VehicleItem);
}
} else {
$Vehicle = $this->vehicleFactory->createById($vehicleId);
}
$dealerId = $request->request->get('dealer');
if ($dealerId) {
$dealer = $this->em->getRepository(Dealer::class)->find($dealerId);
} else {
$dealer = $this->getDealer();
}
$programs = $creditModel->findInDb($dealer, $Vehicle);
$minPayment = false;
if ($Vehicle) {
$minPayment = $creditModel->getMinPayment($Vehicle);
}
return new JsonResponse(['success' => true, 'programs' => $programs, 'minPayment' => $minPayment]);
}
public function saveForm(Request $request, TokenStorageInterface $tokenStorage): JsonResponse
{
$vehicleId = $request->request->get('id');
$vehicleItemId = $request->request->get('vId');
$Vehicle = null;
if ($vehicleItemId) {
$VehicleItem = $this->em->getRepository(VehicleItem::class)->find($vehicleItemId);
if ($VehicleItem) {
$Vehicle = $this->vehicleFactory->createByVehicleItem($VehicleItem);
}
} elseif ($vehicleId) {
$Vehicle = $this->vehicleFactory->createById($vehicleId);
}
if (!$Vehicle) {
throw new NotFoundHttpException();
}
$dealerId = $request->request->get('dealer');
if ($dealerId) {
$dealer = $this->em->getRepository(Dealer::class)->find($dealerId);
} else {
try {
$dealer = $this->getDealer();
} catch (NotFoundHttpException $exception) {
$dealer = null;
}
}
$Token = $tokenStorage->getToken();
$User = $Token && $Token->getUser() != 'anon.' ? $Token->getUser() : null;
$Form = new Forms();
$Form->setUser($User);
$Form->setName($request->request->get('name'));
$Form->setEmail($request->request->get('email'));
$Form->setPhone($request->request->get('phone'));
if ($Vehicle) {
$Form->setVehicle($Vehicle->getVehicleEntity());
}
$Form->setType(FormManager::TYPE_CREDIT_FORM);
$Form->setDealer($dealer);
$Form->setReferrer($request->request->get('referrer'));
$Form->setHref($request->request->get('href'));
$Form->setUtm($request->request->get('utm'));
$Form->setGaClientId($request->request->get('clientId'));
$Form->setGclId($request->request->get('gclid'));
$programId = $request->request->get('program');
$data = [
'program' => '',
'carName' => '',
'term' => $request->request->get('term'),
'percent' => $request->request->get('percent'),
'avance' => $request->request->get('avance'),
'price' => $request->request->get('price'),
'payment' => $request->request->get('payment'),
'equipment' => $request->request->get('equipment'),
'calculationId' => $request->request->get('calculationId'),
];
if ($programId) {
$programm = $this->em->getRepository(CreditProgram::class)->find($programId);
if ($programm) {
$data['program'] = $programm->getTitleRu();
$data['programId'] = $programId;
}
}
if ($Vehicle) {
$data['carName'] = $Vehicle->getFullName();
if ($request->request->get('vehicleHref')) {
$data['carUrl'] = $request->request->get('vehicleHref');
}
}
$Form->setData(json_encode($data));
$Form->setDateCreate(new DateTime());
$this->em->persist($Form);
$this->em->flush($Form);
return new JsonResponse(['success' => true]);
}
public function getCreditListDocument(Request $request, Filesystem $filesystem): Response
{
try {
$mpdf = $this->prepareFolderForPdf($filesystem);
$isLLC = json_decode($request->get('isLLS'));
$html = $this->twig->render('@DcSite/Modules/credit-pdf/list_document.html.twig', compact(['isLLC']));
$mpdf->WriteHTML($html);
return new Response(
$mpdf->Output('list_document.pdf', Destination::STRING_RETURN),
Response::HTTP_OK,
[
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'inline; filename="list_document.pdf"',
'Cache-Control' => 'public, must-revalidate, max-age=0',
]
);
} catch (MpdfException $exception) {
throw new NotFoundHttpException();
}
}
public function getScheduleListDocument(Request $request, Filesystem $filesystem): Response
{
try {
$mpdf = $this->prepareFolderForPdf($filesystem);
$mpdf->curlAllowUnsafeSslRequests = true;
/** @var CrmCreditLeadCalculation $calculation */
$calculation = $this->em->getRepository(CrmCreditLeadCalculation::class)->find($request->get('calculationId'));
$json = json_decode($calculation->getCalculationJson());
$json->schedule = array_chunk(json_decode($json->schedule), 12); //group by 1 year
$json->vehicleItem = $this->em
->getRepository(VehicleItem::class)
->find($json->vehicleItem);
$vehicle = $this->vehicleFactory->createByVehicleItem($json->vehicleItem);
$power = $vehicle->getEnginePower($request->getLocale());
$creditAmount = array_sum([
$json->firstPayment,
$json->cascoPayment,
$json->commission,
$json->registration,
$vehicle->isUsed() ? 0 : $json->notary
]);
$companyName = $vehicle->getDealer()->getNameByLocale($request->getLocale());
$address = $vehicle->getDealer()->getAddressByLocale($request->getLocale());
$domain = $vehicle->getDealer()->getDomain();
$phone = $vehicle->getDealer()->getPhone();
$dealerUniqueId = $vehicle->getDealer()->getUniqueId();
$vehicleMediaUrl = $this->mediaExtensionVidi
->getPath($vehicle->getGalleryImageOrPreview(), 'reference');
$vehicleImage = parse_url($vehicleMediaUrl, PHP_URL_PATH);
$logoMediaUrl = $vehicle->getDealer()->getBrand() ? $this->mediaExtensionVidi
->getPath($vehicle->getDealer()->getBrand()->getLogoWhite(), 'reference') : null;
$logoImage = parse_url($logoMediaUrl, PHP_URL_PATH);
$html = $this->twig->render('@DcSite/Modules/credit-pdf/payment_schedule.html.twig',
compact([
'json', 'vehicle', 'power', 'creditAmount', 'companyName',
'address', 'domain', 'phone', 'vehicleImage', 'dealerUniqueId', 'logoImage'
]));
$mpdf->WriteHTML($html);
return new Response(
$mpdf->Output('payment_schedule.pdf', Destination::STRING_RETURN),
Response::HTTP_OK,
[
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'inline; filename="payment_schedule.pdf"',
'Cache-Control' => 'public, must-revalidate, max-age=0',
]
);
} catch (MpdfException $exception) {
throw new NotFoundHttpException();
}
}
public function getScheduleListDocumentTest(Request $request, Filesystem $filesystem): Response
{
try {
$mpdf = $this->prepareFolderForPdf($filesystem);
/** @var CrmCreditLeadCalculation $calculation */
$calculation = $this->em->getRepository(CrmCreditLeadCalculation::class)->find($request->get('calculationId'));
$json = json_decode($calculation->getCalculationJson());
$json->schedule = array_chunk(json_decode($json->schedule), 12); //group by 1 year
$json->vehicleItem = $this->em->getRepository(VehicleItem::class)->find($json->vehicleItem);
$vehicle = $this->vehicleFactory->createByVehicleItem($json->vehicleItem);
$power = $vehicle->getEnginePower($request->getLocale());
$creditAmount = array_sum([
$json->firstPayment,
$json->cascoPayment,
$json->commission,
$json->registration,
$vehicle->isUsed() ? 0 : $json->notary
]);
$companyName = $vehicle->getDealer()->getNameByLocale($request->getLocale());
$address = $vehicle->getDealer()->getAddressByLocale($request->getLocale());
$domain = $vehicle->getDealer()->getDomain();
$phone = $vehicle->getDealer()->getPhone();
$dealerId = $vehicle->getDealer()->getId();
$vehicleMediaUrl = $this->mediaExtensionVidi
->getPath($vehicle->getGalleryImageOrPreview(), 'reference');
$vehicleImage = parse_url($vehicleMediaUrl, PHP_URL_PATH);
$logoMediaUrl = $vehicle->getDealer()->getBrand() ? $this->mediaExtensionVidi
->getPath($vehicle->getDealer()->getBrand()->getLogoWhite(), 'reference') : null;
$logoImage = parse_url($logoMediaUrl, PHP_URL_PATH);
return $this->render('@DcSite/Modules/credit-pdf/payment_schedule.html.twig',
compact([
'json', 'vehicle', 'power', 'creditAmount', 'companyName',
'address', 'domain', 'phone', 'vehicleImage', 'dealerId', 'logoImage'
]));
} catch (MpdfException $exception) {
throw new NotFoundHttpException();
}
}
private function prepareFolderForPdf(Filesystem $filesystem): Mpdf
{
$newTempDir = $this->getParameter('file_directory_mpdf');
if (!$filesystem->exists($newTempDir)) {
$filesystem->mkdir($newTempDir, 0777);
}
$mpdf = new Mpdf(['mode' => 'utf-8', 'tempDir' => $newTempDir]);
return $mpdf;
}
}