<?php
namespace DcSiteBundle\Controller;
use AutomarketBundle\Component\EstimateCaptcha;
use CoreBundle\Component\CoreFormFactory;
use CoreBundle\Component\FormManager;
use CoreBundle\Entity\Brand;
use CoreBundle\Entity\Dealer;
use CoreBundle\Entity\Forms;
use CoreBundle\Entity\UserCar;
use CoreBundle\Entity\VehicleEstimate;
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\AutoRia\AutoRia;
use CoreBundle\Model\Api\MVD\MvdServer;
use CoreBundle\Model\Api\OnlineService\ApiServer1C;
use CoreBundle\Model\DealerModel;
use CoreBundle\Model\OnlineEstimateModel;
use CoreBundle\Model\Vehicles\Repository;
use CoreBundle\Services\MediaExtensionVidi;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\OptimisticLockException;
use Exception;
use MyBundle\Component\InfobipSmsSender;
use PDOException;
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\Contracts\Translation\TranslatorInterface;
use Twig\Environment;
class TradeInController extends BaseDcController
{
private AutoRia $autoRia;
public function __construct(AutoRia $autoRia, 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)
{
$this->autoRia = $autoRia;
parent::__construct($coreFormFactory, $seoMetaTag, $requestStack, $router, $formManager, $em, $apiServer1C, $session, $filesystem, $mediaExtensionVidi, $vehicleRepository, $vehicleFactory, $twig);
}
const UNSET_MODEL = [
'64089',
'64090',
'64091',
'64092',
'64093',
'64094'
];
public function history(Request $request): JsonResponse
{
$hash = $request->request->all('hash');
if (!$hash) {
return new JsonResponse(['success' => false]);
}
$data = [];
foreach ($hash as $oneHash) {
$estimate = $this->em->getRepository(VehicleEstimate::class)->findOneBy(['hash' => $oneHash]);
if (!$estimate) {
continue;
}
$estimateData = json_decode($estimate->getData());
$data[] = [
'hash' => $oneHash,
'vehicle' => $estimateData->request->brand->title . ' ' . $estimateData->request->model->title,
'year' => $estimateData->request->year,
'mileage' => $estimateData->request->mileage,
];
}
return new JsonResponse(['success' => true, 'data' => $data]);
}
public function loadTemplate(): Response
{
return new Response($this->renderView('@DcSite/Modules/n-trade-in-tpl.html.twig'));
}
public function init(Request $request, EstimateCaptcha $estimateCaptcha): JsonResponse
{
$minYear = (new DateTime())->format('Y') - 15;
$token = $estimateCaptcha->generateToken();
$vehicleType = $request->request->get('vehicleType');
$brands = $this->autoRia->getBrands($vehicleType);
$mileage = $this->autoRia->getOdometerIntervals();
if ($vehicleType != 2) {
$fuel = $this->autoRia->getFuelTypes();
$transmission = $this->autoRia->getTransmissionTypes();
} else {
$mileage = $this->autoRia->getOdometerIntervalsMoto();
$fuel = false;
$transmission = false;
}
$userCarId = $request->request->get('userCarId');
$userCarData = false;
$User = $this->getUser();
if ($userCarId && $User) {
$userCar = $this->em->getRepository(UserCar::class)->find($userCarId);
if ($userCar && $userCar->getUser()->getId() == $User->getId()) {
$userCarData = [
'id' => $userCarId,
'number' => $userCar->getNumber(),
];
}
}
$userData = false;
if ($User) {
$userData = [
'name' => $User->getName(),
'email' => $User->getEmail(),
'phone' => $User->getPhone(),
];
}
return new JsonResponse([
'token' => $token,
'userCarData' => $userCarData,
'userData' => $userData,
'minYear' => $minYear,
'brands' => $brands,
'fuel' => $fuel,
'mileage' => $mileage,
'transmission' => $transmission,
'templateUrl' => $this->router->generate('dc_ti_load_tpl'),
'options' => [
'historyUrl' => $this->router->generate('dc_ti_history'),
'infoUrl' => $this->router->generate('dc_ti_estimate_info'),
'modelsUrl' => $this->router->generate('dc_ti_models'),
'estimateUrl' => $this->router->generate('dc_ti_estimate'),
'saveFormUrl' => $this->router->generate('dc_ti_save'),
'vehiclesUrl' => $this->router->generate('dc_ti_vehicles'),
'searchUrl' => $this->router->generate('dc_ti_search_car'),
]
]);
}
public function search(Request $request, MvdServer $mvdServer): JsonResponse
{
$num = $request->get('number');
$vehicleType = $request->get('vehicleType');
$kind = $vehicleType == 2 ? 'МОТОЦИКЛ' : null;
$carData = $mvdServer->getCarInfoByNumber($num, $kind, $request->getLocale());
if (!$carData) {
return new JsonResponse(['result' => false]);
}
$vehicleType = $request->request->get('vehicleType');
$brands = $this->autoRia->getBrands($vehicleType);
$userBrand = $carData['Brand'];
$userModel = $carData['Model'];
$userYear = $carData['MakeYear'];
$userFuel = $carData['Fuel'];
$riaBrand = false;
$riaModel = false;
foreach ($brands as $brand) {
if (strtolower($userBrand) == strtolower($brand['title'])) {
$riaBrand = $brand['id'];
break;
}
}
$typesMatches = [
'ДИЗЕЛЬНЕ ПАЛИВО' => 2,
'БЕНЗИН' => 1,
'ЕЛЕКТРО' => 6,
'ЕЛЕКТРО АБО ДИЗЕЛЬНЕ ПАЛИВО' => 5,
'ЕЛЕКТРО АБО БЕНЗИН' => 5,
'ГАЗ' => 3,
'БЕНЗИН АБО ГАЗ' => 4,
'ДИЗЕЛЬНЕ ПАЛИВО АБО ГАЗ' => 4,
];
$riaFuel = $typesMatches[$userFuel] ?? false;
if ($riaBrand) {
$models = $this->autoRia->getModels($riaBrand, $vehicleType);
foreach ($models as $model) {
$riaFModel = strtolower($model['title']);
$riaFModel = str_replace('-', '', $riaFModel);
$riaFModel = str_replace(' ', '', $riaFModel);
$userModel = strtolower($userModel);
$userModel = str_replace('-', '', $userModel);
$userModel = str_replace(' ', '', $userModel);
if ($userModel == $riaFModel) {
$riaModel = $model['id'];
break;
}
}
}
$carData = (array)$carData;
$carData['ria'] = [
'brand' => $riaBrand,
'model' => $riaModel,
'year' => $userYear,
'fuel' => $riaFuel,
];
return $this->json(['result' => $carData]);
}
public function getBrands(): JsonResponse
{
$brands = $this->autoRia->getBrands();
return $this->json(['brands' => $brands]);
}
public function getModels(Request $request): JsonResponse
{
$brandId = $request->get('brandId');
$vehicleType = $request->request->get('vehicleType');
$models = $this->autoRia->getModels($brandId, $vehicleType);
$models = $this->filterModels($models);
return new JsonResponse(['success' => $models !== false, 'data' => $models]);
}
public function getEstimate(Request $request, OnlineEstimateModel $onlineEstimateModel): JsonResponse
{
$hash = $request->request->get('hash');
$estimate = $this->em->getRepository(VehicleEstimate::class)->findOneBy(['hash' => $hash]);
if (!$estimate) {
return new JsonResponse(['success' => false]);
}
$isPortal = false;
$dealerId = $request->request->get('dealer');
if ($dealerId) {
$dealer = $this->em->getRepository(Dealer::class)->find($dealerId);
} else {
try {
$dealer = $this->getDealer();
} catch (NotFoundHttpException $e) {
$isPortal = true;
$dealer = $this->em->getRepository(Dealer::class)->find(6);
}
}
$result = $onlineEstimateModel->processEstimateEntity($estimate);
$result['estimateId'] = $estimate->getId();
$vehicleId = $request->request->get('vehicleId');
if ($vehicleId) {
$result['vehicleData'] = $this->buildVehicleData($vehicleId, $request->getLocale());
} else {
$result['testVehicles'] = $this->buildTestDriveVehicles($dealer, $isPortal);
}
return new JsonResponse($result);
}
public function estimate(Request $request, TranslatorInterface $translator, OnlineEstimateModel $onlineEstimateModel,
EstimateCaptcha $estimateCaptcha, InfobipSmsSender $infobipSmsSender): JsonResponse
{
// Проверяем валидность формы
$hash = $request->request->get('hash');
$token = $request->request->get('token');
if ($hash) {
$estimateInst = $this->em->getRepository(VehicleEstimate::class)->findOneBy(['hash' => $hash]);
if (!$estimateInst) {
return new JsonResponse(['success' => false]);
}
} else {
if (!$estimateCaptcha->validateToken($token)) {
return new JsonResponse(['success' => false,
'error' => [
'description' => 'token is not valid',
]
]);
}
}
$isPortal = false;
$isAutomarket = false;
$dealerId = $request->request->get('dealer');
if ($dealerId) {
$dealer = $this->em->getRepository(Dealer::class)->find($dealerId);
} else {
try {
$dealer = $this->getDealer();
if ($dealer->getId() === DealerModel::SECOND_HAND_DEALER) {
$isAutomarket = true;
}
} catch (NotFoundHttpException $e) {
$isPortal = true;
$dealer = $this->em->getRepository(Dealer::class)->find(6);
}
}
if ($hash) {
$estimateData = json_decode($estimateInst->getData(), true);
$params = $estimateData['request'];
} else {
$params = $request->request->all();
}
$mileage = explode('-', $params['mileage']);
if (count($mileage) == 2) {
$mileageFrom = $mileage[0];
$mileageTo = $mileage[1];
} else {
$mileage = $params['mileage'] < 1000 ? $params['mileage'] : ceil($params['mileage'] / 1000);
$mileageFrom = $mileage - ($mileage * 0.60);
$mileageTo = $mileage + ($mileage * 0.60);
}
if (!is_array($params['transmission'])) {
if ($params['transmission'] == 2) {
$params['transmission'] = [2, 3, 4, 5];
} else {
$params['transmission'] = [$params['transmission']];
}
}
$data = [
'marka_id' => [$params['brand']['id']],
'model_id' => [$params['model']['id']],
's_yers' => [$params['year'] - 1],
'po_yers' => [$params['year'] + 1],
//'raceInt' => [$mileageFrom, $mileageTo], //Пробег
'gearbox' => $params['transmission'], //Коробка передач
'type' => [$params['fuel']], //Топливо
'abroad' => 2, //Не отображать авто которые находяться не в Украине
'custom' => 1, //Не отображать нерастаможенные авто
//'top' => 5, //Период подачи 5-3месяца, 6-6-месяцев
'countpage' => 50,
];
if (in_array($params['fuel'], [1, 2, 3, 4])) {
unset($data['type']);
}
$vType = $request->get('vehicleType');
if ($vType) {
$data['category_id'] = $vType;
}
try {
$estimate = $this->autoRia->newEstimate($data);
} catch (Exception $e) {
return new JsonResponse(['errorMess' => $translator->trans('auto_ria.error', [], 'portal_base')], Response::HTTP_INTERNAL_SERVER_ERROR);
}
//IF request from vidi.ua, and it is our brand - select dealer by brand
if ($isPortal || $isAutomarket) {
$BrandByRia = $this->em->getRepository(Brand::class)->findOneBy(['ria_id' => $params['brand']['id']]);
if ($BrandByRia) {
$Dealers = $this->em->getRepository(Dealer::class)->findBy(['brand' => $BrandByRia]);
$dealer = $dealer && count($Dealers) > 0 ? $Dealers[0] : $dealer;
}
}
$result = $onlineEstimateModel->processEstimateResultNew($estimate, $params, $dealer);
// закоментував, тому що з vidi.ua повинні потрапляти на профільні
// if($isPortal && !$result['isSelect']) {
// $dealer = $this->em->getRepository(Dealer::class)->find(6);
// }
if ($isAutomarket && !$result['isSelect'] && !in_array($dealer->getId(), DealerModel::TOYOTA_GROUP)) {
$dealer = $this->em->getRepository(Dealer::class)->find(6);
}
if (!$request->request->get('isEstimateForCreditCalc')) {
$userCarId = $request->request->get('userCarId');
$userCar = $userCarId ? $this->em->getRepository(UserCar::class)->find($userCarId) : null;
$result['estimateId'] = $onlineEstimateModel->saveEstimateResult($params, $result, $dealer, $this->getUser(), $userCar);
}
$result['total'] = $estimate->result->search_result->count;
if ($hash) {
$result['userData'] = [
'name' => $estimateInst->getName(),
'email' => $estimateInst->getEmail(),
'phone' => $estimateInst->getPhone(),
];
} else {
$estimateCaptcha->removeToken($token);
$result['token'] = $estimateCaptcha->generateToken();
}
$vehicleId = $request->request->get('vehicleId');
if ($vehicleId) {
$result['vehicleData'] = $this->buildVehicleData($vehicleId, $request->getLocale());
} else {
$result['testVehicles'] = $this->buildTestDriveVehicles($dealer, $isPortal);
}
if ($result['isSelect'] === true && !$request->request->get('isEstimateForCreditCalc')) {
$this->sendSms($params['phone'], $dealer->getPhone(), $infobipSmsSender);
}
return new JsonResponse($result);
}
public function loadTradeInVehicles(Request $request): JsonResponse
{
$dealerId = $request->request->get('dealer');
$isPortal = false;
if ($dealerId) {
$dealer = $this->em->getRepository(Dealer::class)->find($dealerId);
} else {
try {
$dealer = $this->getDealer();
} catch (NotFoundHttpException $e) {
$isPortal = true;
$dealer = $this->em->getRepository(Dealer::class)->find(6);
}
}
$locale = $request->getLocale();
if ($dealer->getId() == 6 && !$isPortal) {
$vehicles = $this->vehicleRepository->getUsedVehicles();
} else {
$vehicles = $this->vehicleRepository->getNewByDealer(($isPortal ? null : $dealer));
}
$result = [];
$brands = [];
foreach ($vehicles as $item) {
$vehicle = $this->vehicleFactory->createByEntity($item);
if (!$vehicle) {
continue;
}
$brands[$vehicle->getBrand()->getId()] = [
'id' => $vehicle->getBrand()->getId(),
'title' => $vehicle->getBrand()->getName(),
];
$vehicleData = [
'id' => $vehicle->getVehicleId(),
'brand' => $vehicle->getBrand()->getId(),
'title' => $vehicle->isUsed() ? $vehicle->getFullName() : $vehicle->getFullName(),
'image' => $vehicle->getPreviewPath(),
'price' => $vehicle->price(),
'isUsed' => $vehicle->isUsed(),
'equipment' => null,
'item' => null,
'equipments' => [],
];
$hasEquipmentThatNotSoldAndNotReserved = false;
/** @var Equipment $equipment */
foreach ($vehicle->getAvailEquipments() as $equipment) {
$equipmentInfo = [
'id' => $equipment->getId(),
'title' => $equipment->getTitle(),
'minPrice' => $equipment->minPrice(),
'items' => [],
];
/** @var VehicleItem $vItem */
foreach ($equipment->getVehicleItems() as $vItem) {
if (!$vItem->getState() || $vItem->getSold() || $vItem->getDeposit() || $vItem->getIsReserved()) {
continue;
}
$hasEquipmentThatNotSoldAndNotReserved = true;
$vModel = $this->vehicleFactory->createByVehicleItem($vItem);
$equipmentInfo['items'][] = [
'id' => $vItem->getId(),
'year' => $vModel->getYear(),
'engineName' => $vModel->getEngineName($locale) ?: '-',
'body' => $vModel->getBodyTypeName($locale),
'drive' => $vModel->getDriveUnitTypeName($locale),
'fuelType' => $vModel->getFuelTypeName($locale),
'trans' => $vModel->getTransmissionTypeName($locale),
'power' => $vModel->getEnginePower($locale),
'price' => $vModel->price(),
];
}
$vehicleData['equipments'][] = $equipmentInfo;
}
if ($hasEquipmentThatNotSoldAndNotReserved) {
$result[] = $vehicleData;
}
}
usort($brands, fn($a, $b) => $a['title'] <=> $b['title']);
return $this->json(['vehicles' => $result, 'brands' => $brands]);
}
private function buildTestDriveVehicles($dealer, $isPortal): array
{
$isUsed = $dealer->getId() == 6 && !$isPortal ? 1 : 0;
$vehicles = $this->vehicleRepository->getCarsToTestDrive(($isPortal ? null : $dealer), $isUsed);
$result = [];
$brands = [];
foreach ($vehicles as $vehicle) {
$vModel = $this->vehicleFactory->createByEntity($vehicle);
if (!$vModel) {
continue;
}
$result[] = [
'id' => $vModel->getVehicleId(),
'brand' => $vModel->getBrand()->getId(),
'price' => $vModel->price(),
'title' => $vModel->getFullName(),
'src' => $vModel->getPreviewPath(),
];
$brands[$vModel->getBrand()->getId()] = [
'id' => $vModel->getBrand()->getId(),
'title' => $vModel->getBrand()->getName(),
];
}
usort($brands, fn($a, $b) => $a['title'] <=> $b['title']);
return [
'vehicles' => $result,
'brands' => $brands,
];
}
private function buildVehicleData($vehicleId, $locale)
{
$vehicle = $this->vehicleFactory->createById($vehicleId);
if (!$vehicle) {
return false;
}
$vehicleData = [
'id' => $vehicle->getVehicleId(),
'title' => $vehicle->getFullName(),
'image' => $vehicle->getPreviewPath(),
'price' => $vehicle->price(),
'isUsed' => $vehicle->isUsed(),
'equipment' => null,
'item' => null,
'equipments' => [],
];
/** @var Equipment $equipment */
foreach ($vehicle->getAvailEquipments() as $equipment) {
$equipmentInfo = [
'id' => $equipment->getId(),
'title' => $equipment->getTitle(),
'minPrice' => $equipment->minPrice(),
'items' => [],
];
/** @var VehicleItem $vItem */
foreach ($equipment->getVehicleItems() as $vItem) {
if (!$vItem->getState()) {
continue;
}
$vModel = $this->vehicleFactory->createByVehicleItem($vItem);
$equipmentInfo['items'][] = [
'id' => $vItem->getId(),
'year' => $vModel->getYear(),
'engineName' => $vModel->getEngineName($locale) ?: '-',
'fuelType' => $vModel->getFuelTypeName($locale),
'power' => $vModel->getEnginePower($locale),
'price' => $vModel->price(),
];
}
$vehicleData['equipments'][] = $equipmentInfo;
}
return $vehicleData;
}
public function save(Request $request): JsonResponse
{
$testDrive = $request->request->all('testDrive');
$tradeIn = $request->request->all('tradeIn');
$estimateId = $request->request->get('estimateId');
$isPortal = false;
$estimate = $this->em->getRepository(VehicleEstimate::class)->find($estimateId);
if (!$estimate) {
return $this->json(['success' => false]);
}
$isAutomarket = false;
$dealerId = $request->request->get('dealer');
if ($dealerId) {
$dealer = $this->em->getRepository(Dealer::class)->find($dealerId);
} else {
try {
$dealer = $this->getDealer();
if ($dealer->getId() === DealerModel::SECOND_HAND_DEALER) {
$isAutomarket = true;
}
} catch (NotFoundHttpException $e) {
$isPortal = true;
$dealer = $this->em->getRepository(Dealer::class)->find(6);
}
}
$estimate->setIsFinish(1);
$formData = [
'testDrive' => $testDrive,
];
$estimateForm = new Forms();
$estimateData = json_decode($estimate->getData());
$formData['result'] = $estimateData->result;
if (isset($tradeIn['id'])) {
if (isset($tradeIn['item']) && isset($tradeIn['item']['id'])) {
$formData['tradeIn'] = [
'itemId' => $tradeIn['item']['id'],
];
}
$vehicle = $this->em->getRepository(Vehicle::class)->find($tradeIn['id']);
$estimateForm->setVehicle($vehicle);
$estimateForm->setType(FormManager::TYPE_TRADE_IN_FORM);
//IF request from vidi.ua, and it is our brand - select dealer by brand
if ($isPortal) {
$vidiBrand = $this->em->getRepository(Brand::class)->findOneBy(['id' => $tradeIn['brand']]);
if ($vidiBrand) {
$Dealers = $this->em->getRepository(Dealer::class)->findBy(['brand' => $vidiBrand]);
$dealer = $dealer && count($Dealers) > 0 ? $Dealers[0] : $dealer;
}
}
} else {
//Если просто выкуп и не автострада - то диллер всегда Автомаркет
if ($dealer->getId() != '16' && !in_array($dealer->getId(), [4, 7, 14, 43]) && !$estimateData->result->isSelect) {
$dealer = $this->em->getRepository(Dealer::class)->find(6);
}
if (($isAutomarket || $isPortal) && isset($estimateData->request->brand->id) && ($estimateData->result->isSelect || in_array($estimateData->request->brand->id, DealerModel::TOYOTA_GROUP_ID_RIA))) {
$vidiBrand = $this->em->getRepository(Brand::class)->findOneBy(['ria_id' => $estimateData->request->brand->id]);
if ($vidiBrand) {
$Dealers = $this->em->getRepository(Dealer::class)->findBy(['brand' => $vidiBrand]);
$dealer = $dealer && count($Dealers) > 0 ? $Dealers[0] : $dealer;
}
}
$estimateForm->setType(FormManager::TYPE_ESTIMATE_FORM);
}
$estimateForm->setDealer($dealer);
$estimateForm->setDateCreate(new DateTime());
$estimateForm->setReferrer($request->get('referrer'));
$estimateForm->setHref($request->get('href'));
$estimateForm->setUtm($request->get('utm'));
$estimateForm->setGclId($request->get('gcl_id'));
$estimateForm->setEmail($estimate->getEmail());
$estimateForm->setPhone($estimate->getPhone());
$estimateForm->setName($estimate->getName());
$estimateForm->setIsSend(0);
$estimateForm->setInCrm(0);
// Спосіб зв'язку для Тойота Бориспіль
if ($dealer->getId() == 43) {
$formData['result']->connectionType = $request->request->get('connectionType');
}
$estimateForm->setData(json_encode($formData));
$this->em->persist($estimateForm);
$estimate->setForm($estimateForm);
try {
$this->em->persist($estimate);
$this->em->flush();
} catch (PDOException $exception) {
return new JsonResponse(['success' => false, 'error' => $exception->getMessage()]);
}
return new JsonResponse(['success' => true]);
}
public function saveBuyMoto(Request $request): JsonResponse
{
$estimateId = $request->request->get('estimateId');
$formType = $request->request->get('formType');
$estimate = $this->em->getRepository(VehicleEstimate::class)->find($estimateId);
if (!$estimate) {
return $this->json(['success' => false]);
}
$dealerId = $request->request->get('dealer');
if ($dealerId) {
$dealer = $this->em->getRepository(Dealer::class)->find($dealerId);
} else {
try {
$dealer = $this->getDealer();
} catch (NotFoundHttpException $e) {
$dealer = $this->em->getRepository(Dealer::class)->find(6);
}
}
$estimate->setIsFinish(1);
$estimateForm = new Forms();
$estimateData = json_decode($estimate->getData());
$formData['result'] = $estimateData->result;
$estimateForm->setType($formType ?? FormManager::TYPE_ESTIMATE_FORM);
$estimateForm->setDealer($dealer);
$estimateForm->setDateCreate(new DateTime());
$estimateForm->setReferrer($request->get('referrer'));
$estimateForm->setHref($request->get('href'));
$estimateForm->setUtm($request->get('utm'));
$estimateForm->setGclId($request->get('gcl_id'));
$estimateForm->setEmail($estimate->getEmail());
$estimateForm->setPhone($estimate->getPhone());
$estimateForm->setName($estimate->getName());
$estimateForm->setIsSend(0);
$estimateForm->setInCrm(0);
$estimateForm->setData(json_encode($formData));
$this->em->persist($estimateForm);
$estimate->setForm($estimateForm);
try {
$this->em->persist($estimate);
$this->em->flush();
} catch (PDOException $exception) {
return new JsonResponse(['success' => false, 'error' => $exception->getMessage()]);
}
return new JsonResponse(['success' => true]);
}
private function sendSms($userPhone, $dealerPhone, InfobipSmsSender $infobipSmsSender)
{
$message = "Вітаємо! Автомобіль, який ви оцінювали підпадає під категорію Select, яка дає можливість обміняти авто на нове на більш вигідних умовах! Деталі по телефону: {$dealerPhone}";
$infobipSmsSender->sendSms($userPhone, $message);
}
private function filterModels($models)
{
// remove model car in response AvtoRia
foreach ($models as $key => $value) {
if (in_array($value['id'], self::UNSET_MODEL)) {
unset($models[$key]);
}
}
return $models;
}
}