src/DcSiteBundle/Controller/CreditController.php line 203

Open in your IDE?
  1. <?php
  2. namespace DcSiteBundle\Controller;
  3. use BmpGatewayBundle\Entity\CrmCreditLeadCalculation;
  4. use CoreBundle\Component\CoreFormFactory;
  5. use CoreBundle\Component\FormManager;
  6. use CoreBundle\Entity\Brand;
  7. use CoreBundle\Entity\Dealer;
  8. use CoreBundle\Entity\Forms;
  9. use CoreBundle\Entity\Model;
  10. use CoreBundle\Entity\Vehicles\Equipment;
  11. use CoreBundle\Entity\Vehicles\Vehicle;
  12. use CoreBundle\Entity\Vehicles\VehicleItem;
  13. use CoreBundle\Factory\Vehicle as VehicleFactory;
  14. use CoreBundle\Model\Api\OnlineService\ApiServer1C;
  15. use CoreBundle\Model\DealerModel;
  16. use CoreBundle\Model\Vehicles\Repository;
  17. use CoreBundle\Services\MediaExtensionVidi;
  18. use DateTime;
  19. use DcSiteBundle\Entity\CreditProgram;
  20. use DcSiteBundle\Model\CreditModel;
  21. use DcSiteBundle\Services\CarInStockService;
  22. use DcSiteBundle\Services\CatalogService;
  23. use Doctrine\ORM\EntityManagerInterface;
  24. use Exception;
  25. use Mpdf\Mpdf;
  26. use Mpdf\MpdfException;
  27. use Mpdf\Output\Destination;
  28. use PortalBundle\Model\SeoMetaTag;
  29. use Symfony\Component\Filesystem\Filesystem;
  30. use Symfony\Component\HttpFoundation\JsonResponse;
  31. use Symfony\Component\HttpFoundation\Request;
  32. use Symfony\Component\HttpFoundation\RequestStack;
  33. use Symfony\Component\HttpFoundation\Response;
  34. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  35. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  36. use Symfony\Component\Routing\RouterInterface;
  37. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  38. use Twig\Environment;
  39. class CreditController extends BaseDcController
  40. {
  41.     public function __construct(CoreFormFactory $coreFormFactorySeoMetaTag $seoMetaTagRequestStack $requestStackRouterInterface $routerFormManager $formManagerEntityManagerInterface $emApiServer1C $apiServer1CSessionInterface $sessionFilesystem $filesystemMediaExtensionVidi $mediaExtensionVidiRepository $vehicleRepositoryVehicleFactory $vehicleFactoryEnvironment $twig)
  42.     {
  43.         parent::__construct($coreFormFactory$seoMetaTag$requestStack$router$formManager$em$apiServer1C$session$filesystem$mediaExtensionVidi$vehicleRepository$vehicleFactory$twig);
  44.     }
  45.     public function getVehicleBrand(Request $request): JsonResponse
  46.     {
  47.         $isUsed = (bool)($request->get('isUsed') === 'true');
  48.         $brands = [];
  49.         if ($request->get('dealer_id') && $isUsed) {
  50.             $dealer $this->em->getRepository(Dealer::class)->find($request->get('dealer_id'));
  51.             $isAutomarket $dealer && $dealer->getId() === DealerModel::SECOND_HAND_DEALER;
  52.             $brands $this->em->getRepository(Brand::class)
  53.                 ->getCarAvailBrandsInstance($isUsedfalse$isAutomarket null $dealer$isAutomarket);
  54.         }
  55.         if (empty($brands)) {
  56.             $brands $this->em->getRepository(Brand::class)->getCarAvailBrandsInstance($isUsed);
  57.         }
  58.         $result = [];
  59.         /** @var Brand $brand */
  60.         foreach ($brands as $brand) {
  61.             $result[] = [
  62.                 'id' => current($brand)->getId(),
  63.                 'title' => current($brand)->getName(),
  64.                 'min_price' => ceil($brand['min_price']),
  65.             ];
  66.         }
  67.         return new JsonResponse(['success' => true'brands' => $result]);
  68.     }
  69.     public function getVehicleModel(Request $request): JsonResponse
  70.     {
  71.         $isUsed = (bool)($request->get('isUsed') === 'true');
  72.         $brand $this->em->getRepository(Brand::class)->find($request->get('brand_id'));
  73.         $models = [];
  74.         if ($request->get('dealer_id')) {
  75.             $dealer $this->em->getRepository(Dealer::class)->find($request->get('dealer_id'));
  76.             $isAutomarket $dealer && $dealer->getId() === DealerModel::SECOND_HAND_DEALER;
  77.             $models $this->em->getRepository(Model::class)
  78.                 ->getCarAvailModelsInstanceByBrand($brand$isUsedfalse$isAutomarket null $dealer$isAutomarket);
  79.         }
  80.         if (empty($models)) {
  81.             $models $this->em->getRepository(Model::class)->getCarAvailModelsInstanceByBrand($brand$isUsed);
  82.         }
  83.         $result = [];
  84.         /** @var Model $model */
  85.         foreach ($models as $model) {
  86.             $result[] = [
  87.                 'id' => current($model)->getId(),
  88.                 'title' => current($model)->getTitle(),
  89.                 'min_price' => ceil($model['min_price']),
  90.             ];
  91.         }
  92.         return new JsonResponse(['success' => true'models' => $result]);
  93.     }
  94.     public function getVehicleEquipment(Request $request): JsonResponse
  95.     {
  96.         $isUsed = (bool)($request->get('isUsed') === 'true');
  97.         $modelId $request->get('model_id');
  98.         /* @var Dealer $dealer */
  99.         $dealer null;
  100.         if ($request->get('dealer_id')) {
  101.             $dealer $this->em->getRepository(Dealer::class)->find($request->get('dealer_id'));
  102.         }
  103.         $model $this->em->getRepository(Model::class)->find($modelId);
  104.         $vehicleItems = [];
  105.         if ($isUsed && $request->get('dealer_id') && $request->get('brand_id')) {
  106.             $vehicleItems $this->em->getRepository(VehicleItem::class)->getCarAvailVehicleItemInstanceByModel($model$isUsedfalse$dealer);
  107.         }
  108.         if (empty($vehicleItems)) {
  109.             $vehicleItems $this->em->getRepository(VehicleItem::class)->getCarAvailVehicleItemInstanceByModel($model$isUsed);
  110.         }
  111.         $result = [];
  112.         $existEquipment = [];
  113.         /** @var VehicleItem $vehicleItem */
  114.         foreach ($vehicleItems as $vehicleItem) {
  115.             $min_price $vehicleItem['min_price'];
  116.             $vehicleItem current($vehicleItem);
  117.             if ($dealer && in_array($dealer->getId(), DealerModel::NISSAN_DEALERS)
  118.                 && $vehicleItem->getVehicle()->getDealer()->getId() !== $dealer->getId()) {
  119.                 continue;
  120.             }
  121.             if (isset($existEquipment[$vehicleItem->getEquipment()->getId()])) {
  122.                 continue;
  123.             }
  124.             $result[] = [
  125.                 'id' => $vehicleItem->getEquipment()->getId(),
  126.                 'title' => $vehicleItem->getEquipment()->getTitle(),
  127.                 'year' => $vehicleItem->getYear(),
  128.                 'millage' => $vehicleItem->getMileage(),
  129.                 'min_price' => ceil($min_price),
  130.                 'vehicleItemId' => $vehicleItem->getId(),
  131.             ];
  132.             $existEquipment[$vehicleItem->getEquipment()->getId()] = true;
  133.         }
  134.         return new JsonResponse(['success' => true'equipments' => $result]);
  135.     }
  136.     public function getVehicleVariation(Request $request): JsonResponse
  137.     {
  138.         $isUsed = (bool)($request->get('isUsed') === 'true');
  139.         $equipmentId $request->get('equipment_id');
  140.         $vehicleItemId $request->get('vehicleItemId');
  141.         $dealer null;
  142.         if ($request->get('dealer_id')) {
  143.             $dealer $this->em->getRepository(Dealer::class)->find($request->get('dealer_id'));
  144.         }
  145.         $equipment $this->em->getRepository(Equipment::class)->find($equipmentId);
  146.         $vehicleItems $this->em->getRepository(VehicleItem::class)->getCarAvailVehicleItemInstanceByEquipment($equipment$isUsedfalse$dealer$vehicleItemId);
  147.         $result = [];
  148.         /** @var VehicleItem $vehicleItem */
  149.         foreach ($vehicleItems as $vehicleItem) {
  150.             $min_price $vehicleItem['min_price'];
  151.             $vehicleItem current($vehicleItem);
  152.             $result[] = [
  153.                 'id' => $vehicleItem->getId(),
  154.                 'vehicleId' => $vehicleItem->getVehicle()->getId(),
  155.                 'title' => $vehicleItem->getVariation()->getTitle(),
  156.                 'min_price' => ceil($min_price),
  157.                 'vehicleItemId' => $vehicleItem->getId()
  158.             ];
  159.         }
  160.         return new JsonResponse(['success' => true'variations' => $result]);
  161.     }
  162.     public function getVehicleByVehicleItem(Request $requestCarInStockService $carInStockServiceCatalogService $catalogService): JsonResponse
  163.     {
  164.         $vehicleItemId $request->get('vehicleItemId');
  165.         $inStockId $request->get('inStockId');
  166.         $routeSettings = [];
  167.         if (isset($request->request->all()['newCarUrl'])) {
  168.             $routeSettings['new_car'] = $request->get('newCarUrl');
  169.         }
  170.         if (isset($request->request->all()['usedCarUrl'])) {
  171.             $routeSettings['used_car'] = $request->get('usedCarUrl');
  172.         }
  173.         $vehicleItem $this->em->getRepository(VehicleItem::class)->find($vehicleItemId);
  174.         if ($inStockId) {
  175.             $inStockVehicles $carInStockService->getCarInStockByVehicle($vehicleItem->getVehicle()->getId(), $request->getLocale(), null);
  176.             $currentInStock = [];
  177.             foreach ($inStockVehicles['vehicles'] as $inStock) {
  178.                 if ($inStock['id'] == $inStockId) {
  179.                     $currentInStock $inStock;
  180.                 }
  181.             }
  182.         }
  183.         $vehicle $this->vehicleFactory->createByVehicleItem($vehicleItem);
  184.         try {
  185.             $dealer $this->getDealer();
  186.         } catch (Exception $e) {
  187.             $dealer null;
  188.         }
  189.         $response $catalogService->getAjaxResult([['vehicle' => $vehicle]], $request->getLocale(), $routeSettings$dealer);
  190.         $data array_shift($response)['vehicle'];
  191.         $data array_merge($data, [
  192.             'id' => $vehicle->getVehicleId(),
  193.             'hasActionPrice' => $vehicle->hasActionPrice(),
  194.             'dealerId' => $vehicle->getDealer()->getId(),
  195.             'characteristicsWithGroup' => $vehicle->getCharacterisaticsWithGroup($request->getLocale()),
  196.             'fullPrice' => $vehicle->fullPrice(),
  197.             'image' => $this->mediaExtensionVidi->getPath($vehicle->getPreviewOrGalleryImage(), 'reference'),
  198.             'fullOptionsByEquipment' => $vehicle->getOptionsByEquipment($vehicle->getEquipment(), $request->getLocale()),
  199.         ]);
  200.         if ($vehicle->isUsed()) {
  201.             $data['href'] = $this->router->generate('portal_used_car',['url' => $vehicle->getUrl()]);
  202.         } else {
  203.             $data['href'] =  $this->router->generate('portal_new_car',
  204.                 ['dealer' => $vehicle->getDealer()->getUrl(), 'url' => $vehicle->getUrl(), 'variation' => $vehicle->getVehicleItemId()]);
  205.         }
  206.         if (!empty($currentInStock)) {
  207.             $data['price'] = number_format($currentInStock['price'], 0' '' ');
  208.             $data['inStockPrice'] = $currentInStock['price'];
  209.             $data['fullPrice'] = $currentInStock['fullPrice'];
  210.             $data['image'] = $currentInStock['image'];
  211.         }
  212.         return new JsonResponse(['success' => true'vehicle' => $data]);
  213.     }
  214.     public function brand(Request $request): JsonResponse
  215.     {
  216.         $brands $this->em->getRepository(Brand::class)->getAvailBrandsInstance(truetrue);
  217.         $result = [];
  218.         $mediaTwig $this->mediaExtensionVidi;
  219.         $locale $request->getLocale();
  220.         /**
  221.          * @var int $key
  222.          * @var Brand $brand
  223.          */
  224.         foreach ($brands as $key => $brand) {
  225.             $result[$key] = [
  226.                 'id' => $brand->getId(),
  227.                 'name' => $brand->getName(),
  228.                 'image' => $mediaTwig->getPath($brand->getLogo(), 'menu'),
  229.             ];
  230.             if (count($brand->getDealer()) == 1) {
  231.                 $result[$key]['dealerId'] = $brand->getDealer()->first()->getId();
  232.                 $result[$key]['path'] = $this->router->generate('portal_finance_credit_single', ['dealer' => $brand->getDealer()->first()->getId()]);
  233.             } else {
  234.                 /** @var Dealer $dealer */
  235.                 foreach ($brand->getDealer() as $dealer) {
  236.                     $result[$key]['dealers'][] = [
  237.                         'id' => $dealer->getId(),
  238.                         'title' => $dealer->getNameByLocale($locale),
  239.                         'adres' => $dealer->getAddressByLocale($locale),
  240.                         'path' => $this->router->generate('portal_finance_credit_single', ['dealer' => $dealer->getId()]),
  241.                     ];
  242.                 }
  243.             }
  244.         }
  245.         return new JsonResponse(['success' => true'brands' => $result]);
  246.     }
  247.     public function creditInit(): JsonResponse
  248.     {
  249.         try {
  250.             $dealer $this->getDealer();
  251.             $dealerId $dealer->getId();
  252.         } catch (NotFoundHttpException $e) {
  253.             $dealerId false;
  254.         }
  255.         return new JsonResponse(['success' => true'dealer' => $dealerId]);
  256.     }
  257.     public function loadCreditTpl(): Response
  258.     {
  259.         return new Response($this->renderView('@DcSite/Modules/n-credit-tpl.html.twig', [
  260.             'creditForm' => $this->CoreFormFactory()->creditForm()->createView(),
  261.             'dealerId' => $this->getDealer()->getId(),
  262.         ]));
  263.     }
  264.     public function initByDealer(Request $request): JsonResponse
  265.     {
  266.         $dealerId $request->request->get('dealer');
  267.         $Dealer $dealerId $this->em->getRepository(Dealer::class)->find($dealerId) : null;
  268.         if (!$Dealer) {
  269.             return new JsonResponse(['success' => false]);
  270.         }
  271.         if ($request->get('isUsed')) {
  272.             $vehicles $this->vehicleRepository->getUsedByDealer($Dealer);
  273.             $vehicleArray $this->buildUsedVehicles($vehicles);
  274.         } else {
  275.             $vehicles $this->vehicleRepository->getNewByDealer($Dealer);
  276.             $vehicleArray $this->buildNewVehicles($vehicles$request);
  277.         }
  278.         $brandData = [
  279.             'id' => '',
  280.             'name' => '',
  281.         ];
  282.         if ($Dealer->getBrand()) {
  283.             $brandData = [
  284.                 'id' => $Dealer->getBrand()->getId(),
  285.                 'name' => $Dealer->getBrand()->getName(),
  286.             ];
  287.         }
  288.         return new JsonResponse(['success' => true'cars' => $vehicleArray'brand' => $brandData]);
  289.     }
  290.     private function buildNewVehicles($vehiclesRequest $request): array
  291.     {
  292.         $vehicleArray = [];
  293.         $imageProvider $this->mediaExtensionVidi;
  294.         /** @var Vehicle $vehicle */
  295.         foreach ($vehicles as $vehicle) {
  296.             if (!$vehicle->getCreditAvailable()) continue;
  297.             $vehicleModel $this->vehicleFactory->createByEntity($vehicle);
  298.             if (!$vehicleModel) continue;
  299.             $groupId $vehicleModel->getCategory() ? $vehicleModel->getCategory()->getId() : null;
  300.             $categories $vehicleModel->getCategories();
  301.             $category count($categories) ? $categories->first() : null;
  302.             if (!isset($vehicleArray[$groupId])) {
  303.                 $vehicleArray[$groupId] = [
  304.                     'id' => $groupId,
  305.                     'title' => $category $category->getTitle($request->getLocale()) : null,
  306.                     'cars' => [],
  307.                 ];
  308.             }
  309.             $hasHybrid $vehicleModel->hasHybrid() ? ' Hybrid' '';
  310.             $carItem = [
  311.                 'image' => $imageProvider->getPath($vehicleModel->getPreview(), 'small'),
  312.                 'carName' => $vehicleModel->getModelName() . $hasHybrid,
  313.                 'position' => $vehicleModel->getPosition(),
  314.                 'priceFrom' => $vehicleModel->price(),
  315.                 'isUsed' => $vehicleModel->isUsed(),
  316.                 'id' => $vehicleModel->getVehicleId(),
  317.                 'hasHybrid' => $vehicleModel->hasHybrid(),
  318.                 'equipments' => []
  319.             ];
  320.             /** @var Equipment $equipment */
  321.             foreach ($vehicleModel->getAvailEquipments() as $equipment) {
  322.                 $equipmentItem = [
  323.                     'id' => $equipment->getId(),
  324.                     'title' => $equipment->getTitle(),
  325.                     'priceFrom' => $equipment->minPrice(),
  326.                     'variations' => []
  327.                 ];
  328.                 /** @var VehicleItem $vehicleItem */
  329.                 foreach ($equipment->getVehicleItems() as $vehicleItem) {
  330.                     if (!$vehicleItem->getState()) {
  331.                         continue;
  332.                     }
  333.                     if ($vehicleItem->calcPrice() == 0) {
  334.                         continue;
  335.                     }
  336.                     $Vehicle $this->vehicleFactory->createByVehicleItem($vehicleItem);
  337.                     $equipmentItem['variations'][] = [
  338.                         'id' => $vehicleItem->getId(),
  339.                         'price' => $Vehicle->price(),
  340.                         'fuel' => $Vehicle->getFuelTypeName($request->getLocale()),
  341.                         'drive' => $Vehicle->getDriveUnitTypeName($request->getLocale()),
  342.                         'body' => $Vehicle->getBodyTypeName($request->getLocale()),
  343.                         'transmission' => $Vehicle->getTransmissionTypeName($request->getLocale()),
  344.                     ];
  345.                 }
  346.                 if (count($equipmentItem['variations'])) {
  347.                     $carItem['equipments'][] = $equipmentItem;
  348.                 }
  349.             }
  350.             if (count($carItem['equipments'])) {
  351.                 $vehicleArray[$groupId]['cars'][] = $carItem;
  352.             }
  353.         }
  354.         foreach ($vehicleArray as $group => $item) {
  355.             if (count($item['cars']) == 0) {
  356.                 unset($vehicleArray[$group]);
  357.                 continue;
  358.             }
  359.             usort($vehicleArray[$group]['cars'], fn($a$b) => $a['position'] <=> $b['position']);
  360.         }
  361.         return $vehicleArray;
  362.     }
  363.     private function buildUsedVehicles($vehicles): array
  364.     {
  365.         $vehicleArray = [];
  366.         $imageProvider $this->mediaExtensionVidi;
  367.         /** @var Vehicle $vehicle */
  368.         foreach ($vehicles as $vehicle) {
  369.             if (!$vehicle->getCreditAvailable()) continue;
  370.             $vehicleModel $this->vehicleFactory->createByEntity($vehicle);
  371.             if (!$vehicleModel) {
  372.                 continue;
  373.             }
  374.             $groupId 'used';
  375.             $groupName 'used';
  376.             if (!isset($vehicleArray[$groupId])) {
  377.                 $vehicleArray[$groupId] = [
  378.                     'id' => $groupId,
  379.                     'title' => $groupName,
  380.                     'cars' => [],
  381.                 ];
  382.             }
  383.             $carItem = [
  384.                 'image' => $imageProvider->getPath($vehicleModel->getPreview(), 'small'),
  385.                 'carName' => $vehicleModel->getFullName(),
  386.                 'isUsed' => $vehicleModel->isUsed(),
  387.                 'price' => $vehicleModel->price(),
  388.                 'position' => $vehicleModel->getPosition(),
  389.                 'priceFrom' => $vehicleModel->price(),
  390.                 'id' => $vehicleModel->getVehicleId(),
  391.             ];
  392.             $vehicleArray[$groupId]['cars'][] = $carItem;
  393.         }
  394.         foreach ($vehicleArray as $group => $item) {
  395.             usort($vehicleArray[$group]['cars'], fn($a$b) => $a['position'] <=> $b['position']);
  396.         }
  397.         return $vehicleArray;
  398.     }
  399.     public function programs(Request $requestCreditModel  $creditModel): JsonResponse
  400.     {
  401.         $vehicleId $request->request->get('id');
  402.         $vId $request->request->get('vId');
  403.         $Vehicle null;
  404.         if ($vId) {
  405.             $VehicleItem $this->em->getRepository(VehicleItem::class)->find($vId);
  406.             if ($VehicleItem) {
  407.                 $Vehicle $this->vehicleFactory->createByVehicleItem($VehicleItem);
  408.             }
  409.         } else {
  410.             $Vehicle $this->vehicleFactory->createById($vehicleId);
  411.         }
  412.         $dealerId $request->request->get('dealer');
  413.         if ($dealerId) {
  414.             $dealer $this->em->getRepository(Dealer::class)->find($dealerId);
  415.         } else {
  416.             $dealer $this->getDealer();
  417.         }
  418.         $programs $creditModel->findInDb($dealer$Vehicle);
  419.         $minPayment false;
  420.         if ($Vehicle) {
  421.             $minPayment $creditModel->getMinPayment($Vehicle);
  422.         }
  423.         return new JsonResponse(['success' => true'programs' => $programs'minPayment' => $minPayment]);
  424.     }
  425.     public function saveForm(Request $requestTokenStorageInterface $tokenStorage): JsonResponse
  426.     {
  427.         $vehicleId $request->request->get('id');
  428.         $vehicleItemId $request->request->get('vId');
  429.         $Vehicle null;
  430.         if ($vehicleItemId) {
  431.             $VehicleItem $this->em->getRepository(VehicleItem::class)->find($vehicleItemId);
  432.             if ($VehicleItem) {
  433.                 $Vehicle $this->vehicleFactory->createByVehicleItem($VehicleItem);
  434.             }
  435.         } elseif ($vehicleId) {
  436.             $Vehicle $this->vehicleFactory->createById($vehicleId);
  437.         }
  438.         if (!$Vehicle) {
  439.             throw new NotFoundHttpException();
  440.         }
  441.         $dealerId $request->request->get('dealer');
  442.         if ($dealerId) {
  443.             $dealer $this->em->getRepository(Dealer::class)->find($dealerId);
  444.         } else {
  445.             try {
  446.                 $dealer $this->getDealer();
  447.             } catch (NotFoundHttpException $exception) {
  448.                 $dealer null;
  449.             }
  450.         }
  451.         $Token $tokenStorage->getToken();
  452.         $User $Token && $Token->getUser() != 'anon.' $Token->getUser() : null;
  453.         $Form = new Forms();
  454.         $Form->setUser($User);
  455.         $Form->setName($request->request->get('name'));
  456.         $Form->setEmail($request->request->get('email'));
  457.         $Form->setPhone($request->request->get('phone'));
  458.         if ($Vehicle) {
  459.             $Form->setVehicle($Vehicle->getVehicleEntity());
  460.         }
  461.         $Form->setType(FormManager::TYPE_CREDIT_FORM);
  462.         $Form->setDealer($dealer);
  463.         $Form->setReferrer($request->request->get('referrer'));
  464.         $Form->setHref($request->request->get('href'));
  465.         $Form->setUtm($request->request->get('utm'));
  466.         $Form->setGaClientId($request->request->get('clientId'));
  467.         $Form->setGclId($request->request->get('gclid'));
  468.         $programId $request->request->get('program');
  469.         $data = [
  470.             'program' => '',
  471.             'carName' => '',
  472.             'term' => $request->request->get('term'),
  473.             'percent' => $request->request->get('percent'),
  474.             'avance' => $request->request->get('avance'),
  475.             'price' => $request->request->get('price'),
  476.             'payment' => $request->request->get('payment'),
  477.             'equipment' => $request->request->get('equipment'),
  478.             'calculationId' => $request->request->get('calculationId'),
  479.         ];
  480.         if ($programId) {
  481.             $programm $this->em->getRepository(CreditProgram::class)->find($programId);
  482.             if ($programm) {
  483.                 $data['program'] = $programm->getTitleRu();
  484.                 $data['programId'] = $programId;
  485.             }
  486.         }
  487.         if ($Vehicle) {
  488.             $data['carName'] = $Vehicle->getFullName();
  489.             if ($request->request->get('vehicleHref')) {
  490.                 $data['carUrl'] = $request->request->get('vehicleHref');
  491.             }
  492.         }
  493.         $Form->setData(json_encode($data));
  494.         $Form->setDateCreate(new DateTime());
  495.         $this->em->persist($Form);
  496.         $this->em->flush($Form);
  497.         return new JsonResponse(['success' => true]);
  498.     }
  499.     public function getCreditListDocument(Request $requestFilesystem $filesystem): Response
  500.     {
  501.         try {
  502.             $mpdf $this->prepareFolderForPdf($filesystem);
  503.             $isLLC json_decode($request->get('isLLS'));
  504.             $html $this->twig->render('@DcSite/Modules/credit-pdf/list_document.html.twig'compact(['isLLC']));
  505.             $mpdf->WriteHTML($html);
  506.             return new Response(
  507.                 $mpdf->Output('list_document.pdf'Destination::STRING_RETURN),
  508.                 Response::HTTP_OK,
  509.                 [
  510.                     'Content-Type' => 'application/pdf',
  511.                     'Content-Disposition' => 'inline; filename="list_document.pdf"',
  512.                     'Cache-Control' => 'public, must-revalidate, max-age=0',
  513.                 ]
  514.             );
  515.         } catch (MpdfException $exception) {
  516.             throw new NotFoundHttpException();
  517.         }
  518.     }
  519.     public function getScheduleListDocument(Request $requestFilesystem $filesystem): Response
  520.     {
  521.         try {
  522.             $mpdf $this->prepareFolderForPdf($filesystem);
  523.             $mpdf->curlAllowUnsafeSslRequests true;
  524.             /** @var CrmCreditLeadCalculation $calculation */
  525.             $calculation $this->em->getRepository(CrmCreditLeadCalculation::class)->find($request->get('calculationId'));
  526.             $json json_decode($calculation->getCalculationJson());
  527.             $json->schedule array_chunk(json_decode($json->schedule), 12); //group by 1 year
  528.             $json->vehicleItem $this->em
  529.                 ->getRepository(VehicleItem::class)
  530.                 ->find($json->vehicleItem);
  531.             $vehicle $this->vehicleFactory->createByVehicleItem($json->vehicleItem);
  532.             $power $vehicle->getEnginePower($request->getLocale());
  533.             $creditAmount array_sum([
  534.                 $json->firstPayment,
  535.                 $json->cascoPayment,
  536.                 $json->commission,
  537.                 $json->registration,
  538.                 $vehicle->isUsed() ? $json->notary
  539.             ]);
  540.             $companyName $vehicle->getDealer()->getNameByLocale($request->getLocale());
  541.             $address $vehicle->getDealer()->getAddressByLocale($request->getLocale());
  542.             $domain $vehicle->getDealer()->getDomain();
  543.             $phone $vehicle->getDealer()->getPhone();
  544.             $dealerUniqueId $vehicle->getDealer()->getUniqueId();
  545.             $vehicleMediaUrl $this->mediaExtensionVidi
  546.                 ->getPath($vehicle->getGalleryImageOrPreview(), 'reference');
  547.             $vehicleImage parse_url($vehicleMediaUrlPHP_URL_PATH);
  548.             $logoMediaUrl $vehicle->getDealer()->getBrand() ? $this->mediaExtensionVidi
  549.                 ->getPath($vehicle->getDealer()->getBrand()->getLogoWhite(), 'reference') : null;
  550.             $logoImage parse_url($logoMediaUrlPHP_URL_PATH);
  551.             $html $this->twig->render('@DcSite/Modules/credit-pdf/payment_schedule.html.twig',
  552.                 compact([
  553.                     'json''vehicle''power''creditAmount''companyName',
  554.                     'address''domain''phone''vehicleImage''dealerUniqueId''logoImage'
  555.                 ]));
  556.             $mpdf->WriteHTML($html);
  557.             return new Response(
  558.                 $mpdf->Output('payment_schedule.pdf'Destination::STRING_RETURN),
  559.                 Response::HTTP_OK,
  560.                 [
  561.                     'Content-Type' => 'application/pdf',
  562.                     'Content-Disposition' => 'inline; filename="payment_schedule.pdf"',
  563.                     'Cache-Control' => 'public, must-revalidate, max-age=0',
  564.                 ]
  565.             );
  566.         } catch (MpdfException $exception) {
  567.             throw new NotFoundHttpException();
  568.         }
  569.     }
  570.     public function getScheduleListDocumentTest(Request $requestFilesystem $filesystem): Response
  571.     {
  572.         try {
  573.             $mpdf $this->prepareFolderForPdf($filesystem);
  574.             /** @var CrmCreditLeadCalculation $calculation */
  575.             $calculation $this->em->getRepository(CrmCreditLeadCalculation::class)->find($request->get('calculationId'));
  576.             $json json_decode($calculation->getCalculationJson());
  577.             $json->schedule array_chunk(json_decode($json->schedule), 12); //group by 1 year
  578.             $json->vehicleItem $this->em->getRepository(VehicleItem::class)->find($json->vehicleItem);
  579.             $vehicle $this->vehicleFactory->createByVehicleItem($json->vehicleItem);
  580.             $power $vehicle->getEnginePower($request->getLocale());
  581.             $creditAmount array_sum([
  582.                 $json->firstPayment,
  583.                 $json->cascoPayment,
  584.                 $json->commission,
  585.                 $json->registration,
  586.                 $vehicle->isUsed() ? $json->notary
  587.             ]);
  588.             $companyName $vehicle->getDealer()->getNameByLocale($request->getLocale());
  589.             $address $vehicle->getDealer()->getAddressByLocale($request->getLocale());
  590.             $domain $vehicle->getDealer()->getDomain();
  591.             $phone $vehicle->getDealer()->getPhone();
  592.             $dealerId $vehicle->getDealer()->getId();
  593.             $vehicleMediaUrl $this->mediaExtensionVidi
  594.                 ->getPath($vehicle->getGalleryImageOrPreview(), 'reference');
  595.             $vehicleImage parse_url($vehicleMediaUrlPHP_URL_PATH);
  596.             $logoMediaUrl $vehicle->getDealer()->getBrand() ? $this->mediaExtensionVidi
  597.                 ->getPath($vehicle->getDealer()->getBrand()->getLogoWhite(), 'reference') : null;
  598.             $logoImage parse_url($logoMediaUrlPHP_URL_PATH);
  599.             return $this->render('@DcSite/Modules/credit-pdf/payment_schedule.html.twig',
  600.                 compact([
  601.                     'json''vehicle''power''creditAmount''companyName',
  602.                     'address''domain''phone''vehicleImage''dealerId''logoImage'
  603.                 ]));
  604.         } catch (MpdfException $exception) {
  605.             throw new NotFoundHttpException();
  606.         }
  607.     }
  608.     private function prepareFolderForPdf(Filesystem $filesystem): Mpdf
  609.     {
  610.         $newTempDir $this->getParameter('file_directory_mpdf');
  611.         if (!$filesystem->exists($newTempDir)) {
  612.             $filesystem->mkdir($newTempDir0777);
  613.         }
  614.         $mpdf = new Mpdf(['mode' => 'utf-8''tempDir' => $newTempDir]);
  615.         return $mpdf;
  616.     }
  617. }