- <?php
- namespace CoreBundle\Component;
- use DcSiteBundle\Entity\Accessories;
- use Doctrine\ORM\EntityManagerInterface;
- use Symfony\Component\HttpFoundation\Session\SessionInterface;
- use Symfony\Component\Mailer\Mailer;
- use Symfony\Component\Mime\Address;
- use Symfony\Component\Mime\Email;
- use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
- use Throwable;
- use Doctrine\ORM\NonUniqueResultException;
- use ApiBundle\Model\CallMeFormModel;
- use ApiBundle\Model\LeasingFormModel;
- use CoreBundle\Entity\Dealer;
- use CoreBundle\Entity\Forms;
- use CoreBundle\Entity\User;
- use CoreBundle\Entity\Vehicles\InStock;
- use CoreBundle\Entity\Vehicles\Vehicle;
- use CoreBundle\Services\FileUploader;
- use DateTime;
- use DcSiteBundle\Entity\Vacancy;
- use DcSiteBundle\Entity\VacancyForm;
- use Doctrine\ORM\OptimisticLockException;
- use InsuranceBundle\Form\OrderInsuranceType;
- use Symfony\Component\Form\FormError;
- use Symfony\Component\Form\FormInterface;
- use Symfony\Component\HttpFoundation\JsonResponse;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\HttpFoundation\Session\Session;
- use Symfony\Component\Validator\ConstraintViolationListInterface;
- use Twig\Environment;
- use Twig\Error\Error;
- use CoreBundle\Services\Mail\VacancyMail;
- class FormManager
- {
-     const TYPE_COMMON_FORM = 1;
-     const TYPE_SERVICE_FORM = 2;
-     const TYPE_TEST_DRIVE_FORM = 3;
-     const TYPE_CREDIT_FORM = 4;
-     const TYPE_ORDER_FORM = 5;
-     const TYPE_TRADE_IN_FORM = 6;
-     const TYPE_ESTIMATE_FORM = 7;
-     const TYPE_BUY_PARTS_FORM = 8;
-     const TYPE_VACANCY_FORM = 9;
-     const TYPE_BUY_IN_SCTOCK_FORM = 10;
-     const TYPE_CONFIGURATOR_OFFER = 11;
-     const TYPE_ORDER_CALL = 12;
-     const TYPE_SERVICES_ORDER = 13;
-     const TYPE_ORDER_INSURANCE_FORM = 14;
-     const TYPE_REPAIR_CALC = 15;
-     const TYPE_REPAIR_PHOTO = 16;
-     const TYPE_SUPPORT = 17;
-     const TYPE_RENT = 18;
-     const TYPE_PERSONAL = 19;
-     const TYPE_FIND_PART = 20;
-     const TYPE_GOODS_ORDER = 21;
-     const TYPE_INSURANCE_EXTEND = 22;
-     const TYPE_COMMISSION_TECHNOLOGY = 23;
-     const TYPE_BUY_SPARE_PARTS = 24;
-     const TYPE_TIRES_CONFIGURATOR = 25;
-     const TYPE_INSURANCE = 26;
-     const TYPE_CORP_SALE = 27;
-     const TYPE_EXTENDED_WARRANTY = 28;
-     const TYPE_BUY_USED_CAR = 29;
-     const TYPE_LEASING_CALCULATOR = 30;
-     const TYPE_OIL_TO = 31;
-     const TYPE_ONLINE_CONSULTANTS = 32;
-     const TYPE_MOTO_TEST_DRIVE = 33;
-     const TYPE_QUALITY_CONTROL = 34;
-     const TYPE_SERVICE_CAMPAING_CAR = 35;
-     const TYPE_BUY_USED_PREORDER_FORM = 36;
-     const TYPE_WATER_TEST_DRIVE = 37;
-     const TYPE_SAVE_DESIGN = 38;
-     const TYPE_SEND_QUESTION = 39;
-     const TYPE_ONLINE_SERVICE_REGISTRATION = 40;
-     const TYPE_WITHOUT_PAY_ORDER = 41;
-     const TYPE_SMS_LEAD = 42;
-     const TYPE_UNICOMMERCE_FLEET_UPDATING = 43;
-     const TYPE_CASCO_CALC = 44;
-     const TYPE_APPLICATION_FOR_SETTLEMENT = 45;
-     const TYPE_TIRES_HOTEL_CALL = 47;
-     const TYPE_TIRES_HOTEL_ORDER = 48;
-     const TYPE_REDEMPTION = 49;
-     const TYPE_REPLACEMENT_CAR = 50;
-     const TYPE_LANDING_PAGE = 51;
-     const TYPE_UNICOMMERCE_CONSULT = 55;
-     const TYPE_INSURANCE_CONSULT = 56;
-     const GA_EVENT_COMMON = 'ask-question';
-     const GA_EVENT_TD = 'test-drive';
-     const GA_EVENT_CREDIT = 'calc-credit-sum';
-     const GA_EVENT_TRADE_IN = 'trade-in';
-     const GA_EVENT_SERVICE = 'record-sto';
-     const GA_EVENT_BUY_PARTS = 'order-accessory';
-     const GA_EVENT_BUY_CAR = 'order-car';
-     const GA_EVENT_ORDER_CALL = 'order-call';
-     const GA_EVENT_SERVICES_ORDER = 'services-order';
-     const GA_EVENT_ORDER_IN_STOCK = 'in-stock';
-     const GA_EVENT_CONFIGURATOR = 'configurator-offer';
-     const GA_EVENT_ESTIMATE = 'estimate-form';
-     const GA_EVENT_INSURANCE_ORDER = 'insurance-order-form';
-     const GA_EVENT_RENT_ORDER = 'rent-order-form';
-     private EntityManagerInterface $entityManager;
-     /**
-      * CoreFormFactory
-      */
-     private $formFactory;
-     private SessionInterface $session;
-     /**
-      * @var FileUploader
-      */
-     private $fileUploader;
-     private Environment $twig;
-     /**
-      * @var Mailer
-      */
-     private $mailer;
-     /** @var TokenStorageInterface */
-     private $tokenStorage;
-     public function __construct(
-         EntityManagerInterface   $entityManager,
-         CoreFormFactory $formFactory,
-         SessionInterface         $session,
-         FileUploader    $fileUploader,
-         Environment      $twig,
-         Mailer   $mailer,
-         TokenStorageInterface $tokenStorage,
-         VacancyMail     $vacancyMail
-     )
-     {
-         $this->formFactory = $formFactory;
-         $this->entityManager = $entityManager;
-         $this->session = $session;
-         $this->fileUploader = $fileUploader;
-         $this->twig = $twig;
-         $this->mailer = $mailer;
-         $this->tokenStorage = $tokenStorage;
-         $this->vacancyMail = $vacancyMail;
-     }
-     public static function getTypeName($type)
-     {
-         switch ($type) {
-             case self::TYPE_COMMON_FORM:
-                 $title = 'Обратная связь';
-                 break;
-             case self::TYPE_ONLINE_CONSULTANTS:
-                 $title = 'Онлайн консультація / тест драйв';
-                 break;
-             case self::TYPE_SERVICE_FORM:
-                 $title = 'Запись на сервис';
-                 break;
-             case self::TYPE_TEST_DRIVE_FORM:
-                 $title = 'Тест драйв';
-                 break;
-             case self::TYPE_CREDIT_FORM:
-                 $title = 'Кредит';
-                 break;
-             case self::TYPE_ORDER_FORM:
-                 $title = 'Заказ авто';
-                 break;
-             case self::TYPE_TRADE_IN_FORM:
-                 $title = 'Трейдин';
-                 break;
-             case self::TYPE_ESTIMATE_FORM:
-                 $title = 'Оценка авто';
-                 break;
-             case self::TYPE_BUY_PARTS_FORM:
-                 $title = 'Заказ запчастей';
-                 break;
-             case self::TYPE_VACANCY_FORM:
-                 $title = 'Вакансии';
-                 break;
-             case self::TYPE_BUY_IN_SCTOCK_FORM:
-                 $title = 'Заказ авто в наличии';
-                 break;
-             case self::TYPE_CONFIGURATOR_OFFER:
-                 $title = 'Конфигуратор';
-                 break;
-             case self::TYPE_ORDER_CALL:
-                 $title = 'Заказ звонка';
-                 break;
-             case self::TYPE_SERVICES_ORDER:
-                 $title = 'Заказ услуг';
-                 break;
-             case self::TYPE_ORDER_INSURANCE_FORM:
-                 $title = 'Заказ страховки';
-                 break;
-             case self::TYPE_REPAIR_CALC:
-                 $title = 'Кузовной';
-                 break;
-             case self::TYPE_REPAIR_PHOTO:
-                 $title = 'Кузовной по фото ';
-                 break;
-             case self::TYPE_SUPPORT:
-                 $title = 'Поддержка';
-                 break;
-             case self::TYPE_RENT:
-                 $title = 'Заказ аренды техники';
-                 break;
-             case self::TYPE_PERSONAL:
-                 $title = 'Персональное предложение';
-                 break;
-             case self::TYPE_FIND_PART:
-                 $title = 'Запчасти';
-                 break;
-             case self::TYPE_INSURANCE_EXTEND:
-                 $title = 'Стоимость продленная гарантия';
-                 break;
-             case self::TYPE_COMMISSION_TECHNOLOGY:
-                 $title = 'Техника на комиссию';
-                 break;
-             case self::TYPE_BUY_SPARE_PARTS:
-                 $title = 'Заказ новых запчастей';
-                 break;
-             case self::TYPE_TIRES_CONFIGURATOR:
-                 $title = 'Конфигуратор шин';
-                 break;
-             case self::TYPE_INSURANCE:
-                 $title = 'Страхование';
-                 break;
-             case self::TYPE_CORP_SALE:
-                 $title = 'Корпоративные продажи';
-                 break;
-             case self::TYPE_EXTENDED_WARRANTY:
-                 $title = 'Продление гарантии';
-                 break;
-             case self::TYPE_BUY_USED_CAR:
-                 $title = 'Авто с пробегом';
-                 break;
-             case self::TYPE_BUY_USED_PREORDER_FORM:
-                 $title = 'Предзаказ авто с пробегом';
-                 break;
-             case self::TYPE_LEASING_CALCULATOR:
-                 $title = 'Лизинговый калькулятор';
-                 break;
-             case self::TYPE_SERVICE_CAMPAING_CAR:
-                 $title = 'Наявність сервісних кампаній';
-                 break;
-             case self::TYPE_SAVE_DESIGN:
-                 $title = 'Сохранить дизайн выбранной модели';
-                 break;
-             case self::TYPE_SEND_QUESTION:
-                 $title = 'Отправить запрос';
-                 break;
-             case self::TYPE_ONLINE_SERVICE_REGISTRATION:
-                 $title = 'Онлайн запись на сервис';
-                 break;
-             case self::TYPE_WITHOUT_PAY_ORDER:
-                 $title = 'Замовлення без оплати';
-                 break;
-             case self::TYPE_APPLICATION_FOR_SETTLEMENT:
-                 $title = 'Заявка на розрахунок';
-                 break;
-             case self::TYPE_TIRES_HOTEL_CALL:
-                 $title = 'Отрмати консультацію по зберіганню шин';
-                 break;
-             case self::TYPE_TIRES_HOTEL_ORDER:
-                 $title = 'Заявка по зберіганню шин';
-                 break;
-             case self::TYPE_REPLACEMENT_CAR:
-                 $title = 'Заявка на підмінне авто';
-                 break;
-             default:
-                 $title = 'Не определена';
-                 break;
-         }
-         return $title;
-     }
-     public static function getGaEventByFormType($type)
-     {
-         $events = [
-             self::TYPE_COMMON_FORM => self::GA_EVENT_COMMON,
-             self::TYPE_TEST_DRIVE_FORM => self::GA_EVENT_TD,
-             self::TYPE_CREDIT_FORM => self::GA_EVENT_CREDIT,
-             self::TYPE_TRADE_IN_FORM => self::GA_EVENT_TRADE_IN,
-             self::TYPE_SERVICE_FORM => self::GA_EVENT_SERVICE,
-             self::TYPE_BUY_PARTS_FORM => self::GA_EVENT_BUY_PARTS,
-             self::TYPE_ORDER_FORM => self::GA_EVENT_BUY_CAR,
-             self::TYPE_ORDER_CALL => self::GA_EVENT_ORDER_CALL,
-             self::TYPE_SERVICES_ORDER => self::GA_EVENT_SERVICES_ORDER,
-             self::TYPE_BUY_IN_SCTOCK_FORM => self::GA_EVENT_ORDER_IN_STOCK,
-             self::TYPE_CONFIGURATOR_OFFER => self::GA_EVENT_CONFIGURATOR,
-             self::TYPE_RENT => self::GA_EVENT_RENT_ORDER,
-         ];
-         return $events[$type] ?? null;
-     }
-     /**
-      * @param $typeId
-      * @param bool $translate
-      * @return mixed
-      */
-     public static function getFormTypeName($typeId = null, $translate = false)
-     {
-         $types = [
-             self::TYPE_COMMON_FORM => $translate ? 'Обратная связь' : 'Feedback',
-             self::TYPE_SERVICE_FORM => $translate ? 'Сервис' : 'Service',
-             self::TYPE_TEST_DRIVE_FORM => $translate ? 'Тест-драйв' : 'Test-drive',
-             self::TYPE_CREDIT_FORM => $translate ? 'Кредит' : 'Credit',
-             self::TYPE_ORDER_FORM => $translate ? 'Заказ авто' : 'Buy',
-             self::TYPE_TRADE_IN_FORM => $translate ? 'Трейд-ин' : 'Trade-in',
-             self::TYPE_ESTIMATE_FORM => $translate ? 'Оценка автомобиля' : 'Estimate',
-             self::TYPE_BUY_PARTS_FORM => $translate ? 'Заказ запчастей и аксессуаров' : 'Buy accessories (parts)',
-             self::TYPE_VACANCY_FORM => $translate ? 'Вакансии' : 'Vacancy',
-             self::TYPE_ORDER_CALL => $translate ? 'Заказ обратного звонка' : 'Callback order',
-             self::TYPE_SERVICES_ORDER => $translate ? 'Обратная связь' : 'Services order',
-             self::TYPE_ORDER_INSURANCE_FORM => $translate ? 'Страхование' : 'Insurance form',
-             self::TYPE_SUPPORT => $translate ? 'Поддержка пользователей' : 'Support form',
-             self::TYPE_RENT => $translate ? 'Аренда техники' : 'Rent form',
-             self::TYPE_REPAIR_CALC => $translate ? 'Подсчет ремонта' : 'Repair calc',
-             self::TYPE_REPAIR_PHOTO => $translate ? 'Подсчет ремонта по фото' : 'Repair photo',
-         ];
-         if ($typeId) {
-             return $types[$typeId];
-         }
-         return $types;
-     }
-     /**
-      * @param $data
-      * @return bool
-      */
-     private function validateCaptcha($data): bool
-     {
-         $sToken = $token = $key = false;
-         $captchaData = [];
-         if (isset($data['captcha'])) {
-             $captcha = $data['captcha'];
-             $captchaData = explode('#', $captcha);
-         }
-         if ($captchaData && count($captchaData) == 2) {
-             $key = $captchaData[0];
-             $token = $captchaData[1];
-             $sToken = $this->session->get($key);
-         }
-         if (!$token || !$sToken || !$key) {
-             return false;
-         }
-         if ($sToken != $token) {
-             return false;
-         }
-         $this->session->remove($key);
-         return true;
-     }
-     private function hasPrivacy($data): bool
-     {
-         if (isset($data['privacy']) && !(boolean)$data['privacy']) {
-             return false;
-         }
-         return true;
-     }
-     private function validateTireConfigures(FormInterface $form, $data, $locale)
-     {
-         if (empty($data['diameter']) && empty($data['width']) && empty($data['profile'])) {
-             return true;
-         } else if (!empty($data['diameter']) && !empty($data['width']) && !empty($data['profile'])) {
-             return true;
-         }
-         $errors = [];
-         if (empty($data['diameter'])) {
-             $error = $locale == 'ua' ? 'Заповніть поле "Діаметр"' : 'Заполните поле "Диаметр"';
-             $errors['diameter'] = [$error];
-         }
-         if (empty($data['width'])) {
-             $error = $locale == 'ua' ? 'Заповніть поле "Ширина"' : 'Заполните поле "Ширина"';
-             $errors['width'] = [$error];
-         }
-         if (empty($data['profile'])) {
-             $error = $locale == 'ua' ? 'Заповніть поле "Висота профілю"' : 'Заполните поле "Высота профилю"';
-             $errors['profile'] = [$error];
-         }
-         return ['errors' => $errors];
-     }
-     /**
-      * @param $form
-      * @return bool
-      */
-     private function validateForm($form)
-     {
-         $isValid = $form->isValid();
-         if (!$isValid) {
-             foreach ($form->getErrors() as $error) {
-                 if ($error->getOrigin()->getName() == 'captcha' && count($form->getErrors()) == 1) {
-                     $isValid = true;
-                 }
-             }
-         }
-         return $isValid;
-     }
-     /**
-      * @param Request $request
-      * @param Dealer|null $dealer
-      * @return JsonResponse
-      * @throws OptimisticLockException
-      */
-     public function saveFeedbackForm(Request $request, Dealer $dealer = null)
-     {
-         $feedbackEntity = new Forms();
-         $feedbackEntity->setDomain($request->getHost());
-         $feedbackEntity->setDateCreate(new DateTime());
-         $feedbackEntity->setType(self::TYPE_COMMON_FORM);
-         $form = $this->formFactory->feedbackQuestionForm($feedbackEntity);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         // Спосіб зв'язку для Тойота Бориспіль
-         if ($dealer && $dealer->getId() == 43) {
-             $formData = json_decode($feedbackEntity->getData());
-             $formData->connectionType = $request->request->get('communication');
-             $feedbackEntity->setData(json_encode($formData));
-         }
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $feedbackEntity->setDealer($dealer);
-             $this->entityManager->persist($feedbackEntity);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     /**
-      * @param Request $request
-      * @param Dealer $dealer
-      * @param string $name
-      * @param string $phone
-      * @param array $data
-      * @return void
-      * @throws OptimisticLockException
-      */
-     public function saveSmsLeadForm(Request $request, Dealer $dealer, string $name, string $phone, array $data): void
-     {
-         try {
-             $this->entityManager->beginTransaction();
-             $checkSameForm = $this->entityManager
-                 ->getRepository(Forms::class)
-                 ->getByTypeDateAndPhone(self::TYPE_SMS_LEAD, new DateTime('now - 3 day'), $phone, $data['vin']);
-             if (count($checkSameForm) !== 0) {
-                 $this->entityManager->rollback();
-                 return;
-             }
-             $form = (new Forms())
-                 ->setDomain($request->getHost())
-                 ->setDealer($dealer)
-                 ->setDateCreate(new DateTime())
-                 ->setType(self::TYPE_SMS_LEAD)
-                 ->setName($name)
-                 ->setPhone($phone)
-                 ->setData(json_encode($data));
-             $this->entityManager->persist($form);
-             $this->entityManager->flush();
-             $this->entityManager->commit();
-         } catch (Throwable $e) {
-             $this->entityManager->rollback();
-         }
-     }
-     /**
-      * @param Request $request
-      * @param Dealer|null $dealer
-      * @return JsonResponse
-      * @throws OptimisticLockException
-      * @throws NonUniqueResultException
-      */
-     public function saveCallbackForm(Request $request, Dealer $dealer = null)
-     {
-         $requestData = $request->request->get('call_order', []);
-         if ($requestData['second_name']) {
-             $requestData['name'] = sprintf("%s %s", $requestData['name'], $requestData['second_name']);
-             $request->request->set('call_order', $requestData);
-         }
-         $feedbackEntity = new Forms();
-         $feedbackEntity->setDomain($request->getHost());
-         $feedbackEntity->setDateCreate(new DateTime());
-         $feedbackEntity->setType(self::TYPE_ORDER_CALL);
-         $form = $this->formFactory->orderCallForm($feedbackEntity, $dealer);
-         $data = $request->request->all($form->getName());
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $feedbackEntity->setDealer($dealer);
-             $this->entityManager->persist($feedbackEntity);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     public function saveExtendedWarrantyForm(Request $request, Dealer $dealer = null)
-     {
-         $formEntity = new Forms();
-         $formEntity->setDomain($request->getHost());
-         $formEntity->setDateCreate(new DateTime());
-         $formEntity->setType(self::TYPE_EXTENDED_WARRANTY);
-         $form = $this->formFactory->extendedWarrantyForm($formEntity, $dealer);
-         $data = $request->request->all($form->getName());
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $formEntity->setDealer($dealer);
-             $this->entityManager->persist($formEntity);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     /**
-      * @param Request $request
-      * @param Dealer|null $dealer
-      * @return JsonResponse
-      * @throws OptimisticLockException
-      */
-     public function saveBuyCarForm(Request $request, Dealer $dealer = null)
-     {
-         $buyForm = new Forms();
-         $buyForm->setDomain($request->getHost());
-         $buyForm->setDateCreate(new DateTime());
-         $buyForm->setType(self::TYPE_ORDER_FORM);
-         if (isset($request->request->all('buy')['message_type'])) {
-             $buyForm->setData(json_encode(
-                 [
-                     'message_type' => $request->request->all('buy')['message_type'],
-                     'comment' => $request->request->all('buy')['comment'],
-                 ]
-             ));
-         }
-         $form = $this->formFactory->buyForm($buyForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         if (!$dealer) {
-             $dealer = $buyForm->getVehicle()->getDealer();
-         }
-         $buyForm->setDealer($dealer);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             if ($buyForm->getVehicle()->getIsNotFilled()) {
-                 $buyForm->setIsPreorder(1);
-             }
-             $this->entityManager->persist($buyForm);
-             $this->entityManager->flush();
-             return new JsonResponse([
-                 'success' => true,
-                 'name' => $buyForm->getName(),
-                 'phone' => $buyForm->getPhone()
-             ]);
-         }
-         return new JsonResponse([
-             'success' => false,
-             'errors' => $this->getErrorsFromForm($form)
-         ]);
-     }
-     /**
-      * @param Request $request
-      * @param Dealer|null $dealer
-      * @return JsonResponse
-      * @throws OptimisticLockException
-      */
-     public function savePreorderCarForm(Request $request, Dealer $dealer = null)
-     {
-         $preorderForm = new Forms();
-         $preorderForm->setDomain($request->getHost());
-         $preorderForm->setDateCreate(new DateTime());
-         $preorderForm->setType(self::TYPE_ORDER_FORM);
-         $form = $this->formFactory->preorderForm($preorderForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         if (!$dealer) {
-             $preorderForm->setDealer($preorderForm->getVehicle()->getDealer());
-         } else {
-             $preorderForm->setDealer($dealer);
-         }
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             return new JsonResponse([
-                 'success' => true,
-                 'name' => $preorderForm->getName(),
-                 'phone' => $preorderForm->getPhone()
-             ]);
-         }
-         return new JsonResponse([
-             'success' => false,
-             'errors' => $this->getErrorsFromForm($form)
-         ]);
-     }
-     /**
-      * @param Request $request
-      * @param Dealer|null $dealer
-      * @param InStock $vehicle
-      * @return JsonResponse
-      * @throws OptimisticLockException
-      */
-     public function saveBuyInStockCarForm(Request $request, Dealer $dealer = null, $vehicle = null)
-     {
-         $buyForm = new Forms();
-         $buyForm->setDomain($request->getHost());
-         $buyForm->setDateCreate(new DateTime());
-         $buyForm->setType(self::TYPE_BUY_IN_SCTOCK_FORM);
-         $form = $this->formFactory->buyInStockForm($buyForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         if ($vehicle instanceof InStock) {
-             $buyForm->setVehicleInStock($vehicle);
-         }
-         if ($vehicle instanceof Vehicle) {
-             $buyForm->setVehicle($vehicle);
-         }
-         $buyForm->setDealer($dealer);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $this->entityManager->persist($buyForm);
-             $this->entityManager->flush();
-             return new JsonResponse([
-                 'success' => true,
-                 'name' => $buyForm->getName(),
-                 'phone' => $buyForm->getPhone()
-             ]);
-         }
-         return new JsonResponse([
-             'success' => false,
-             'errors' => $this->getErrorsFromForm($form)
-         ]);
-     }
-     /**
-      * @param Request $request
-      * @param Dealer|null $dealer
-      * @return JsonResponse
-      * @throws OptimisticLockException
-      */
-     public function saveCreditForm(Request $request, Dealer $dealer = null)
-     {
-         $creditForm = new Forms();
-         $creditForm->setDomain($request->getHost());
-         $creditForm->setDateCreate(new DateTime());
-         $creditForm->setType(self::TYPE_CREDIT_FORM);
-         $form = $this->formFactory->creditForm($dealer, $creditForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $creditForm->setDealer($dealer);
-             $this->entityManager->persist($creditForm);
-             $this->entityManager->flush();
-             return new JsonResponse([
-                 'success' => true,
-                 'name' => $creditForm->getName(),
-                 'phone' => $creditForm->getPhone(),
-             ]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     /**
-      * @param Request $request
-      * @param Dealer|null $dealer
-      * @return JsonResponse
-      * @throws OptimisticLockException
-      */
-     public function saveServiceForm(Request $request, Dealer $dealer = null)
-     {
-         $serviceForm = new Forms();
-         $serviceForm->setDomain($request->getHost());
-         $serviceForm->setDateCreate(new DateTime());
-         $serviceForm->setType(self::TYPE_SERVICE_FORM);
-         if (isset($request->request->get('service')['vin_gos_nomer'])) {
-             $form = $this->formFactory->serviceForm($serviceForm, true, null, true);
-         } else {
-             $form = $this->formFactory->serviceForm($serviceForm, true);
-         }
-         $data = $request->request->all($form->getName());
-         if (!$dealer && isset($data['dealer'])) {
-             $dealer = $this->entityManager->getRepository(Dealer::class)->find($data['dealer']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             if ($dealer) {
-                 $serviceForm->setDealer($dealer);
-             }
-             $this->entityManager->persist($serviceForm);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     /**
-      * @param Request $request
-      * @param Dealer|null $dealer
-      * @return JsonResponse
-      * @throws OptimisticLockException
-      * @throws Error
-      */
-     public function saveTestDriveForm(Request $request, Dealer $dealer = null)
-     {
-         $vehicle = null;
-         $tdForm = new Forms();
-         $tdForm->setDomain($request->getHost());
-         $Token = $this->tokenStorage->getToken();
-         $User = $Token->getUser() && $Token->getUser() != 'anon.' ? $Token->getUser() : null;
-         if ($User) {
-             $tdForm->setUser($User);
-         }
-         $tdForm->setDateCreate(new DateTime());
-         $tdForm->setType(self::TYPE_TEST_DRIVE_FORM);
-         $carId = null;
-         if (isset($request->request->get('test_drive')['vehicle'])) {
-             $carId = $request->request->get('test_drive')['vehicle'];
-         }
-         if ($carId) {
-             $vehicle = $this->entityManager->getRepository(Vehicle::class)->find($carId);
-             $tdForm->setVehicle($vehicle);
-         }
-         if (!$dealer && $vehicle) {
-             $dealer = $vehicle->getDealer();
-         }
-         if (!$dealer && !$vehicle) {
-             $dId = null;
-             if (isset($request->request->get('test_drive')['dealer'])) {
-                 $dId = $request->request->get('test_drive')['dealer'];
-             }
-             if ($dId) {
-                 $dealer = $this->entityManager->getRepository(Dealer::class)->find($dId);
-             }
-         }
-         if (
-             isset($request->request->get('test_drive')['tdCars']) &&
-             !empty($request->request->get('test_drive')['tdCars'])
-         ) {
-             $dataToSave = [
-                 'cars' => $request->request->get('test_drive')['tdCars'],
-                 'route' => $request->request->get('test_drive')['route'],
-                 'callback' => $request->request->get('test_drive')['callback'],
-             ];
-             if (isset($request->request->get('test_drive')['communication'])) {
-                 $dataToSave['communication'] = $request->request->get('test_drive')['communication'];
-             }
-             $tdForm->setData(json_encode($dataToSave));
-         }
-         $form = $this->formFactory->testDriveForm($dealer, $tdForm, ['child' => true, 'communication' => true]);
-         $data = $request->request->all($form->getName());
-         //TODO need some documentation
-         if (strpos($data['phone'], '+7495') !== false) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $cars = isset($dataToSave['cars']) ? json_decode($dataToSave['cars']) : null;
-             $tdForm->setDealer($dealer);
-             $this->entityManager->persist($tdForm);
-             $this->entityManager->flush();
-             $this->sendTestDriveMail($tdForm, $dealer, $cars);
-             return new JsonResponse(['success' => true, 'name' => $tdForm->getName(), 'phone' => $tdForm->getPhone()]);
-         }
-         $errors = [];
-         foreach ($form->getErrors() as $error) {
-             $errors[] = $error->getMessage();
-         }
-         return new JsonResponse(['success' => false, 'errors' => $errors]);
-     }
-     /**
-      * @param Forms $form
-      * @param Dealer $dealer
-      * @param $cars
-      * @return int
-      * @throws Error
-      */
-     private function sendTestDriveMail(Forms $form, Dealer $dealer, $cars)
-     {
-         $dealerName = $dealer->getName();
-         $mailTo = $form->getEmail();
-         $carName = '';
-         if (!$mailTo) {
-             //TODO return int
-             return false;
-         }
-         $Car = $form->getVehicle();
-         $contactName = $form->getName();
-         if ($Car) {
-             $carB = $Car->getModel()->getBrand()->getName();
-             $carM = $Car->getModel()->getTitle();
-             $carName = $carB . ' ' . $carM;
-         }
-         if ($cars) {
-             $carName = '';
-             foreach ($cars as $row) {
-                 $carName .= $row->brand . ' ' . $row->carName . ' ' . $row->testDriveConfigurationName . ' | ';
-             }
-         }
-         $additionalData = $this->getAdditionalData($dealer);
-         if (!$additionalData) {
-             //TODO return int
-             return;
-         }
-         $body = $this->twig->render('DcSiteBundle:Lexus/Mail:client.test-drive.message.html.twig', [
-             'car' => $carName,
-             'contactName' => $contactName,
-             'map' => $additionalData['map'],
-             'siteLink' => $additionalData['siteLink'],
-             'address' => $additionalData['address'],
-             'dealerNameUkr' => $dealerName,
-         ]);
-         $massage = (new Email())
-             ->subject("Заявка на проведення тест-драйву")
-             ->to($mailTo)
-             ->from(new Address($additionalData['mailFrom'], $dealer))
-             ->html($body);
-         return $this->mailer->send($massage);
-     }
-     /**
-      * @param Dealer $dealer
-      * @return array | boolean
-      */
-     private function getAdditionalData(Dealer $dealer)
-     {
-         switch ($dealer->getId()) {
-             case 'ДЦ "ВІДІ Авеню"':
-                 return [
-                     'dealerNameUkr' => 'ВІДІ Авеню',
-                     'mailFrom' => 'sales.avenue@vidi.ua',
-                     'map' => 'https://goo.gl/maps/Zi5bcU6Mf5E2',
-                     'siteLink' => 'http://peugeot-vidi.com.ua/',
-                     'address' => 'вул. Велика Кільцева, 60',
-                 ];
-             case 'ДЦ "ВІДІ Автострада"':
-                 return [
-                     'dealerNameUkr' => 'ВІДІ Автострада',
-                     'mailFrom' => 'sales.avtostrada@vidi.ua',
-                     'map' => 'https://goo.gl/maps/mAjTe8MJbaD2',
-                     'siteLink' => 'https://toyota-ua.com/',
-                     'address' => 'вул. Велика Кільцева, 56',
-                 ];
-             case 'ДЦ "ВІДІ Армада"':
-                 return [
-                     'dealerNameUkr' => 'ВІДІ Армада',
-                     'mailFrom' => 'sales.armada@vidi.ua',
-                     'map' => 'https://goo.gl/maps/VSQy9zVXN882',
-                     'siteLink' => 'http://nissan-kyiv.com.ua/',
-                     'address' => 'вул. Київська, 49, с. Чубинське',
-                 ];
-             case 'ДЦ "ВІДІ Гранд"':
-                 return [
-                     'dealerNameUkr' => 'ВІДІ Гранд',
-                     'mailFrom' => 'sales.grand@vidi.ua',
-                     'map' => 'https://goo.gl/maps/Qvddq1uSSJu',
-                     'siteLink' => 'http://suzuki-vidi.com.ua/',
-                     'address' => 'вул. Велика Кільцева, 60',
-                 ];
-             case 'ДЦ "ВІДІ Елеганс"':
-                 return [
-                     'dealerNameUkr' => 'ВІДІ Елеганс',
-                     'mailFrom' => 'sales.elegance@vidi.ua',
-                     'map' => 'https://goo.gl/maps/q7cjTUJSWBF2',
-                     'siteLink' => 'http://citroen-vidi.com.ua/',
-                     'address' => 'вул. Велика Кільцева, 60',
-                 ];
-             case 14:
-                 return [
-                     'mailFrom' => 'sales.elite@vidi.ua',
-                     'map' => 'https://goo.gl/maps/2JkVXQ8N5uB2',
-                     'siteLink' => 'http://kyiv-west.lexus.ua/',
-                     'address' => 'вул. Велика Кільцева, 60',
-                 ];
-             case 'ДЦ "ВІДІ Інсайт"':
-                 return [
-                     'dealerNameUkr' => 'ВІДІ Інсайт',
-                     'mailFrom' => 'sales.insight@vidi.ua',
-                     'map' => 'https://goo.gl/maps/VNYWzsJWY662',
-                     'siteLink' => 'http://honda-kiev.com.ua/',
-                     'address' => 'вул. Київська, 55, с. Чубинське',
-                 ];
-             case 'ДЦ "ВІДІ Край"':
-                 return [
-                     'dealerNameUkr' => 'ВІДІ Край Моторз',
-                     'mailFrom' => 'sales.cry-motors@vidi.ua',
-                     'map' => 'https://goo.gl/maps/h98ifFpm5352',
-                     'siteLink' => 'http://ford-vidi.com.ua/',
-                     'address' => 'вул. Велика Кільцева, 60а',
-                 ];
-             case 'ДЦ "ВІДІ Ліберті""':
-                 return [
-                     'dealerNameUkr' => 'ВІДІ Ліберті',
-                     'mailFrom' => 'sales.liberty@vidi.ua',
-                     'map' => 'https://goo.gl/maps/b2tZ7YkhgiF2',
-                     'siteLink' => 'http://infiniti-vidi.com.ua/',
-                     'address' => 'вул. Київська, 51, с. Чубинське',
-                 ];
-             case 'ДЦ "ВІДІ Нордвей"':
-                 return [
-                     'dealerNameUkr' => 'ВІДІ Нордвей',
-                     'mailFrom' => 'sales.nordway@vidi.ua',
-                     'map' => 'https://goo.gl/maps/bVeQ4Uiz4uM2',
-                     'siteLink' => 'http://airport.volvocarsdealer.com/',
-                     'address' => 'вул. Київська, 51, с. Чубинське',
-                 ];
-             case 'ДЦ "ВІДІ Пальміра"':
-                 return [
-                     'dealerNameUkr' => 'ВІДІ Пальміра',
-                     'mailFrom' => 'sales.palmira@vidi.ua',
-                     'map' => 'https://goo.gl/maps/zQX8uwd3qv72',
-                     'siteLink' => 'http://toyota-odessa.com.ua/',
-                     'address' => 'м. Одеса, вул. Балківська, 22а',
-                 ];
-             case 'ДЦ "ВІДІ Санрайз"':
-                 return [
-                     'dealerNameUkr' => 'ВІДІ Санрайз',
-                     'mailFrom' => 'sales.sunrise-motors@vidi.ua',
-                     'map' => 'https://goo.gl/maps/kGb4HsGdz2R2',
-                     'siteLink' => 'http://nissan-vidi.com.ua/',
-                     'address' => 'вул. Велика Кільцева, 60а',
-                 ];
-             case 'ДЦ "ВІДІ Скай"':
-                 return [
-                     'dealerNameUkr' => 'ВІДІ Скай',
-                     'mailFrom' => 'sales.sky-motors@vidi.ua',
-                     'map' => 'https://goo.gl/maps/ZXthrvGPRe52',
-                     'siteLink' => 'http://mazda-vidi.com.ua/',
-                     'address' => 'вул. Велика Кільцева, 60а',
-                 ];
-             case 'ДЦ "ВІДІ Стар"':
-                 return [
-                     'dealerNameUkr' => 'ВІДІ Стар',
-                     'mailFrom' => 'sales.star-motors@vidi.ua',
-                     'map' => 'https://goo.gl/maps/qYK6zrCUbS82',
-                     'siteLink' => 'http://subaru-vidi.com.ua/',
-                     'address' => 'вул. Велика Кільцева, 60а',
-                 ];
-         }
-         return false;
-     }
-     /**
-      * @param Request $request
-      * @param Dealer|null $dealer
-      * @return JsonResponse
-      * @throws OptimisticLockException
-      */
-     public function saveTradeInForm(Request $request, Dealer $dealer = null)
-     {
-         $tdForm = new Forms();
-         $tdForm->setDomain($request->getHost());
-         $tdForm->setDateCreate(new DateTime());
-         $tdForm->setType(self::TYPE_TRADE_IN_FORM);
-         $form = $this->formFactory->tradeInFrom($dealer, $tdForm);
-         $model = $request->request->get('trade_in')['model'];
-         $vehicle = $this->entityManager->getRepository(Vehicle::class)->findOneBy(['id' => $model]);
-         $tdForm->setVehicle($vehicle);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $tdForm->setDealer($dealer);
-             $this->entityManager->persist($tdForm);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true, 'name' => $tdForm->getName(), 'phone' => $tdForm->getPhone()]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     /**
-      * @param Request $request
-      * @param Dealer|null $dealer
-      * @return JsonResponse
-      * @throws OptimisticLockException
-      */
-     public function saveOrderInsuranceForm(Request $request, Dealer $dealer = null)
-     {
-         $orderInsurance = new Forms();
-         $orderInsurance->setDomain($request->getHost());
-         $orderInsurance->setType(self::TYPE_ORDER_INSURANCE_FORM);
-         $orderInsurance->setDateCreate(new DateTime());
-         $post = $request->request->get('order_insurance');
-         $type = $post['type'];
-         $form = false;
-         switch ($type) {
-             case OrderInsuranceType::CASCO_ORDER_INSURANCE:
-                 $form = $this->formFactory->orderCascoForm($orderInsurance);
-                 break;
-             case OrderInsuranceType::MANDATORY_ORDER_INSURANCE:
-                 $form = $this->formFactory->orderMandatoryForm($orderInsurance);
-                 break;
-             case OrderInsuranceType::VOLUNTARY_ORDER_INSURANCE:
-                 $form = $this->formFactory->orderVoluntaryForm($orderInsurance);
-                 break;
-             case OrderInsuranceType::REGISTRATION_AUTO_CIVILIAN:
-                 $form = $this->formFactory->orderCivilianForm($orderInsurance);
-                 break;
-             case OrderInsuranceType::HOME_INSURANCE:
-                 $form = $this->formFactory->orderHomeInsuranceForm($orderInsurance);
-                 break;
-         }
-         $data = $request->request->all($form->getName());
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         if ($request->request->get('client-status')) {
-             $extraData = ['clientStatus' => $request->request->get('client-status'),
-                 'carStatus' => $request->request->get('car-status'),
-                 'bankName' => $request->request->get('bank-name')];
-             $currentlyData = json_decode($orderInsurance->getData(), true);
-             $orderInsurance->setData(json_encode(array_merge($currentlyData, $extraData)));
-         }
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $orderInsurance->setDealer($dealer);
-             $this->entityManager->persist($orderInsurance);
-             $this->entityManager->flush();
-             return JsonResponse::create(['success' => true]);
-         }
-         return JsonResponse::create(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     /**
-      * @param Request $request
-      * @param Dealer $dealer
-      * @return JsonResponse
-      * @throws OptimisticLockException
-      */
-     public function saveBuyPartsForm(Request $request, Dealer $dealer): JsonResponse
-     {
-         $buyPartsFormEntity = new Forms();
-         $buyPartsFormEntity->setDomain($request->getHost());
-         $buyPartsFormEntity->setType(self::TYPE_BUY_PARTS_FORM);
-         $buyPartsFormEntity->setDateCreate(new DateTime());
-         $accessoriesRepo = $this->entityManager->getRepository(Accessories::class);
-         $partId = $request->get('buy_parts')['accessory'];
-         $accessory = $accessoriesRepo->findOneBy(['id' => $partId]);
-         if (!$accessory) {
-             $data = ['part' => $partId];
-             $buyPartsFormEntity->setData(json_encode($data));
-             $requestData = $request->get('buy_parts');
-             $requestData['accessory'] = null;
-             $request->request->set('buy_parts', $requestData);
-         }
-         $form = $this->formFactory->buyPartsForm($dealer, $buyPartsFormEntity);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $buyPartsFormEntity->setAccessory($accessory);
-             $buyPartsFormEntity->setDealer($dealer);
-             $this->entityManager->persist($buyPartsFormEntity);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     /**
-      * @param Request $request
-      * @param Dealer $dealer
-      * @return JsonResponse
-      * @throws OptimisticLockException
-      */
-     public function saveVacancyForm(Request $request, Dealer $dealer = null)
-     {
-         /** @var Vacancy $vacancy */
-         $vacancy = $this->entityManager
-             ->getRepository(Vacancy::class)
-             ->find($request->get('vacancy')['vacancy']);
-         $vacancyForm = new VacancyForm();
-         $vacancyForm->setDateCreate(new DateTime());
-         $vacancyForm->setFormType(self::TYPE_VACANCY_FORM);
-         if ($dealer) {
-             $vacancyForm->setDealer($dealer);
-         }
-         $form = $this->formFactory->vacancyForm($dealer, $vacancy, $vacancyForm);
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $file = $vacancyForm->getCv();
-             $fileName = $this->fileUploader->upload($file);
-             $vacancyForm->setCv($fileName);
-             $this->entityManager->persist($vacancyForm);
-             $this->entityManager->flush();
-             if ($request->getHost() == 'vidi.ua') {
-                 $this->vacancyMail->sendEmailToCandidate($request->request->get('vacancy')['email']);
-             }
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     /**
-      * @param ConstraintViolationListInterface $errors
-      * @return array
-      */
-     public function getErrorsFromValidator(ConstraintViolationListInterface $errors)
-     {
-         $formattedErrors = [];
-         foreach ($errors as $error) {
-             $formattedErrors[$error->getPropertyPath()] = $error->getMessage();
-         }
-         return $formattedErrors;
-     }
-     /**
-      * @param FormInterface $form
-      * @return array
-      */
-     private function getErrorsFromForm(FormInterface $form)
-     {
-         $errors = [];
-         /** @var FormError $error */
-         foreach ($form->getErrors() as $error) {
-             $errors[] = $error->getMessage();
-         }
-         foreach ($form->all() as $childForm) {
-             if ($childForm instanceof FormInterface) {
-                 if ($childErrors = $this->getErrorsFromForm($childForm)) {
-                     $errors[$childForm->getName()] = $childErrors;
-                 }
-             }
-         }
-         return $errors;
-     }
-     /**
-      * @param Request $request
-      * @param Dealer $dealer
-      * @return JsonResponse
-      * @throws OptimisticLockException
-      */
-     public function saveRepairPhoto(Request $request, Dealer $dealer)
-     {
-         $Form = new Forms();
-         $Form->setDomain($request->getHost());
-         $Form->setType(self::TYPE_REPAIR_PHOTO);
-         $Form->setDateCreate(new DateTime());
-         $form = $this->formFactory->repairPhotoForm($dealer, $Form);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $dataField = [
-                 'files' => [],
-                 'comment' => $data['comment'],
-                 'brand' => $data['brand'],
-                 'model' => $data['model'],
-                 'carNumber' => $data['car_number'],
-             ];
-             foreach ($form['files']->getData() as $file) {
-                 $fileName = $this->fileUploader->upload($file);
-                 $dataField['files'][] = $fileName;
-             }
-             $Form->setDealer($dealer);
-             $Form->setData(json_encode($dataField));
-             $this->entityManager->persist($Form);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     /**
-      * @param Request $request
-      * @param Dealer $dealer
-      * @param null $services_type
-      * @return JsonResponse
-      * @throws OptimisticLockException
-      */
-     public function saveServiceOrderForm(Request $request, Dealer $dealer, $services_type = null)
-     {
-         $servicesOrderFormEntity = new Forms();
-         $servicesOrderFormEntity->setDomain($request->getHost());
-         $servicesOrderFormEntity->setType(self::TYPE_SERVICES_ORDER);
-         $servicesOrderFormEntity->setDateCreate(new DateTime());
-         $form = $this->formFactory->servicesOrderForm($services_type, $request->getLocale(), $servicesOrderFormEntity);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($request->request->get('model')) {
-             $formData = json_decode($servicesOrderFormEntity->getData());
-             $formData->model = $request->request->get('model');
-             $servicesOrderFormEntity->setData(json_encode($formData));
-         }
-         if ($request->request->get('to')) {
-             $formData = json_decode($servicesOrderFormEntity->getData());
-             $formData->to = $request->request->get('to');
-             $servicesOrderFormEntity->setData(json_encode($formData));
-         }
-         if ($form->isSubmitted() && $isValid) {
-             $servicesOrderFormEntity->setDealer($dealer);
-             $this->entityManager->persist($servicesOrderFormEntity);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     /**
-      * @param Request $request
-      * @return JsonResponse
-      * @throws OptimisticLockException
-      */
-     public function saveSupportForm(Request $request)
-     {
-         $supportForm = new Forms();
-         $supportForm->setDomain($request->getHost());
-         $supportForm->setDateCreate(new DateTime());
-         $supportForm->setType(self::TYPE_SUPPORT);
-         $form = $this->formFactory->supportForm($supportForm, $request->getLocale());
-         $data = $request->request->all($form->getName());
-         $dataField = ['support_type' => $data['support_type']];
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $supportForm->setData(json_encode($dataField));
-             $this->entityManager->persist($supportForm);
-             $this->entityManager->flush();
-             return new JsonResponse([
-                     'success' => true,
-                     'name' => $supportForm->getName(),
-                     'phone' => $supportForm->getPhone()
-                 ]
-             );
-         }
-         $errors = [];
-         foreach ($form->getErrors() as $error) {
-             $errors[] = $error->getMessage();
-         }
-         return new JsonResponse(['success' => false, 'errors' => $errors]);
-     }
-     public function saveRentForm(Request $request, $dealer = null)
-     {
-         $rentForm = new Forms();
-         $rentForm->setDomain($request->getHost());
-         $rentForm->setDateCreate(new DateTime());
-         $rentForm->setType(self::TYPE_RENT);
-         $form = $this->formFactory->rentForm($dealer, $rentForm);
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $rentForm->setDealer($dealer);
-             $this->entityManager->persist($rentForm);
-             $this->entityManager->flush();
-             return new JsonResponse(
-                 [
-                     'success' => true,
-                     'name' => $rentForm->getName(),
-                     'phone' => $rentForm->getPhone()
-                 ]
-             );
-         }
-         $errors = [];
-         foreach ($form->getErrors() as $error) {
-             $errors[] = $error->getMessage();
-         }
-         return new JsonResponse(['success' => false, 'errors' => $errors]);
-     }
-     public function savePersonal(Request $request, $dealer = null)
-     {
-         $Form = new Forms();
-         $Form->setDealer($dealer);
-         $Form->setDomain($request->getHost());
-         $Form->setDateCreate(new DateTime());
-         $Form->setType(self::TYPE_PERSONAL);
-         $Form->setName($request->get('name'));
-         $Form->setEmail($request->get('email'));
-         $Form->setPhone($request->get('phone'));
-         $Form->setData(json_encode([
-             'cars' => $request->get('cars'),
-             'services' => $request->get('services')
-         ]));
-         $this->entityManager->persist($Form);
-         $this->entityManager->flush();
-         return new JsonResponse(['success' => true, 'name' => $Form->getName(), 'phone' => $Form->getPhone()]);
-     }
-     public function saveFindPart(Request $request, $dealer = null)
-     {
-         $partForm = new Forms();
-         $partForm->setDomain($request->getHost());
-         $partForm->setDateCreate(new DateTime());
-         $partForm->setType(self::TYPE_FIND_PART);
-         $form = $this->formFactory->findPartForm($dealer, $partForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $dataField = [
-             'vin' => $data['vin'],
-             'part' => $data['part'],
-         ];
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $partForm->setDealer($dealer);
-             $partForm->setData(json_encode($dataField));
-             $this->entityManager->persist($partForm);
-             $this->entityManager->flush();
-             return new JsonResponse(
-                 [
-                     'success' => true,
-                     'name' => $partForm->getName(),
-                     'phone' => $partForm->getPhone()
-                 ]
-             );
-         }
-         $errors = [];
-         foreach ($form->getErrors() as $error) {
-             $errors[] = $error->getMessage();
-         }
-         return new JsonResponse(['success' => false, 'errors' => $errors]);
-     }
-     public function saveOrderGoodsForm(Request $request, $dealer = null)
-     {
-         $goodsForm = new Forms();
-         $goodsForm->setDomain($request->getHost());
-         $goodsForm->setDateCreate(new DateTime());
-         $goodsForm->setType(self::TYPE_GOODS_ORDER);
-         $form = $this->formFactory->orderGoodsForm($dealer, $goodsForm);
-         $formData = $request->request->all($form->getName());
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $goodsForm->setDealer($dealer);
-             $goodsForm->setData(json_encode([
-                 'goods_id' => $formData['id']
-             ]));
-             $this->entityManager->persist($goodsForm);
-             $this->entityManager->flush();
-             return new JsonResponse(
-                 [
-                     'success' => true,
-                     'name' => $goodsForm->getName(),
-                     'phone' => $goodsForm->getPhone()
-                 ]
-             );
-         }
-         $errors = [];
-         foreach ($form->getErrors() as $error) {
-             $errors[] = $error->getMessage();
-         }
-         return new JsonResponse(['success' => false, 'errors' => $errors]);
-     }
-     public function saveInsuranceExtend(Request $request, Dealer $dealer = null)
-     {
-         $insuranceForm = new Forms();
-         $insuranceForm->setDomain($request->getHost());
-         $insuranceForm->setDateCreate(new DateTime());
-         $insuranceForm->setType(self::TYPE_INSURANCE_EXTEND);
-         $form = $this->formFactory->insuranceExtendForm($dealer, $insuranceForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $insuranceForm->setDealer($dealer);
-             $insuranceForm->setData(
-                 json_encode(
-                     [
-                         'brand' => $data['brand'],
-                         'year' => $data['year'],
-                     ]
-                 )
-             );
-             $this->entityManager->persist($insuranceForm);
-             $this->entityManager->flush();
-             return new JsonResponse(
-                 [
-                     'success' => true,
-                     'name' => $insuranceForm->getName(),
-                     'phone' => $insuranceForm->getPhone()
-                 ]
-             );
-         }
-         $errors = [];
-         foreach ($form->getErrors() as $error) {
-             $errors[] = $error->getMessage();
-         }
-         return new JsonResponse(['success' => false, 'errors' => $errors]);
-     }
-     public function saveCommissionTechnology(Request $request, Dealer $dealer = null)
-     {
-         $commissionForm = new Forms();
-         $commissionForm->setDomain($request->getHost());
-         $commissionForm->setDateCreate(new DateTime());
-         $commissionForm->setType(self::TYPE_COMMISSION_TECHNOLOGY);
-         $form = $this->formFactory->commissionTechnologyForm($dealer, $commissionForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $commissionForm->setDealer($dealer);
-             $commissionForm->setData(json_encode([
-                 'model' => $data['model'],
-                 'price' => $data['price'],
-             ]));
-             $this->entityManager->persist($commissionForm);
-             $this->entityManager->flush();
-             return new JsonResponse(
-                 [
-                     'success' => true,
-                     'name' => $commissionForm->getName(),
-                     'phone' => $commissionForm->getPhone()
-                 ]
-             );
-         }
-         $errors = [];
-         foreach ($form->getErrors() as $error) {
-             $errors[] = $error->getMessage();
-         }
-         return new JsonResponse(['success' => false, 'errors' => $errors]);
-     }
-     public function saveCorpSalesForm(Request $request, Dealer $dealer = null)
-     {
-         $corpSaleForm = new Forms();
-         $corpSaleForm->setDomain($request->getHost());
-         $corpSaleForm->setDateCreate(new DateTime());
-         $corpSaleForm->setType(self::TYPE_CORP_SALE);
-         $form = $this->formFactory->corpSalesForm($dealer, $request->getLocale(), $corpSaleForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $corpSaleForm->setDealer($dealer);
-             $corpSaleForm->setData(json_encode([
-                 'company_name' => $data['company_name'],
-                 'comment' => $data['comment'],
-                 'department' => $data['department'],
-             ]));
-             $this->entityManager->persist($corpSaleForm);
-             $this->entityManager->flush();
-             return new JsonResponse(
-                 [
-                     'success' => true,
-                     'name' => $corpSaleForm->getName(),
-                     'phone' => $corpSaleForm->getPhone()
-                 ]
-             );
-         }
-         $errors = [];
-         foreach ($form->getErrors() as $error) {
-             $errors[] = $error->getMessage();
-         }
-         return new JsonResponse(['success' => false, 'errors' => $errors]);
-     }
-     public function saveBuySpareParts(Request $request, Dealer $dealer = null)
-     {
-         $spareForm = new Forms();
-         $spareForm->setDomain($request->getHost());
-         $spareForm->setDateCreate(new DateTime());
-         $spareForm->setType(self::TYPE_BUY_SPARE_PARTS);
-         $form = $this->formFactory->buySparePartsForm($dealer, $spareForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $spareForm->setDealer($dealer);
-             $spareForm->setData(json_encode([
-                 'spare_part' => $data['sparePart'],
-                 'count' => $data['count'],
-                 'price' => $data['price'],
-             ]));
-             $this->entityManager->persist($spareForm);
-             $this->entityManager->flush();
-             return new JsonResponse(
-                 [
-                     'success' => true,
-                     'name' => $spareForm->getName(),
-                     'phone' => $spareForm->getPhone()
-                 ]
-             );
-         }
-         $errors = [];
-         foreach ($form->getErrors() as $error) {
-             $errors[] = $error->getMessage();
-         }
-         return new JsonResponse(['success' => false, 'errors' => $errors]);
-     }
-     public function saveTiresConfigurator(Request $request, Dealer $dealer = null)
-     {
-         $tireForm = new Forms();
-         $tireForm->setDomain($request->getHost());
-         $tireForm->setDateCreate(new DateTime());
-         $tireForm->setType(self::TYPE_TIRES_CONFIGURATOR);
-         $form = $this->formFactory->tiresConfiguratorForm($tireForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $validConfigures = $this->validateTireConfigures($form, $data, $request->getLocale());
-         if ($validConfigures !== true) {
-             return new JsonResponse(['success' => false, 'errors' => $validConfigures['errors']]);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $tireForm->setDealer($dealer);
-             $tireForm->setData(json_encode([
-                 'tiresType' => $data['tiresType'],
-                 'vin' => $data['vin'],
-                 'diameter' => $data['diameter'],
-                 'width' => $data['width'],
-                 'profile' => $data['profile'],
-             ]));
-             $this->entityManager->persist($tireForm);
-             $this->entityManager->flush();
-             return new JsonResponse(
-                 ['success' => true,
-                     'name' => $tireForm->getName(),
-                     'phone' => $tireForm->getPhone()
-                 ]
-             );
-         }
-         $errors = [];
-         foreach ($form->getErrors() as $error) {
-             $errors[] = $error->getMessage();
-         }
-         return new JsonResponse(['success' => false, 'errors' => $errors]);
-     }
-     public function saveBuyUsedCarForm(Request $request, Dealer $dealer = null)
-     {
-         $buyForm = new Forms();
-         $buyForm->setDomain($request->getHost());
-         $buyForm->setDateCreate(new DateTime());
-         $buyForm->setType(self::TYPE_BUY_USED_CAR);
-         $form = $this->formFactory->buyForm($buyForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         if (!$dealer) {
-             $buyForm->setDealer($buyForm->getVehicle()->getDealer());
-         } else {
-             $buyForm->setDealer($dealer);
-         }
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $this->entityManager->persist($buyForm);
-             $this->entityManager->flush();
-             return new JsonResponse([
-                 'success' => true,
-                 'name' => $buyForm->getName(),
-                 'phone' => $buyForm->getPhone()
-             ]);
-         }
-         return new JsonResponse([
-             'success' => false,
-             'errors' => $this->getErrorsFromForm($form)
-         ]);
-     }
-     public function saveSubServiceForm(Request $request, \ImporterBundle\Entity\Dealer $dealer = null)
-     {
-         $entityForm = new \ImporterBundle\Entity\Forms();
-         $entityForm->setDomain($request->getHost());
-         $entityForm->setDateCreate(new DateTime());
-         $entityForm->setType(self::TYPE_SERVICE_FORM);
-         $form = $this->formFactory->subServiceForm($entityForm, true);
-         $data = $request->request->all($form->getName());
-         if (!$dealer && isset($data['dealer'])) {
-             $dealer = $this->entityManager->getRepository(\ImporterBundle\Entity\Dealer::class)->find($data['dealer']);
-         }
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             if ($dealer) {
-                 $entityForm->setDealer($dealer);
-             }
-             $this->entityManager->persist($entityForm);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     public function saveSubSparePartsForm(Request $request, \ImporterBundle\Entity\Dealer $dealer = null)
-     {
-         $entityForm = new \ImporterBundle\Entity\Forms();
-         $entityForm->setDomain($request->getHost());
-         $entityForm->setDateCreate(new DateTime());
-         $entityForm->setType(self::TYPE_BUY_SPARE_PARTS);
-         $form = $this->formFactory->subSparePartsForm($entityForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $entityForm->setDealer($dealer);
-             $entityForm->setData(json_encode([
-                 'vin' => $data['vin'],
-                 'model' => $data['model'],
-                 'parts' => $data['parts'],
-             ]));
-             $this->entityManager->persist($entityForm);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     public function saveSubOrderForm(Request $request, \ImporterBundle\Entity\Dealer $dealer = null)
-     {
-         $entityForm = new \ImporterBundle\Entity\Forms();
-         $entityForm->setDomain($request->getHost());
-         $entityForm->setDateCreate(new DateTime());
-         $entityForm->setType(self::TYPE_ORDER_FORM);
-         $form = $this->formFactory->subOrderForm(null, $entityForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $entityForm->setDealer($dealer);
-             $entityForm->setData(json_encode([
-                 'item' => $data['item'],
-             ]));
-             $this->entityManager->persist($entityForm);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     public function saveSubOrderVehicleForm(Request $request, \ImporterBundle\Entity\Dealer $dealer = null)
-     {
-         $entityForm = new \ImporterBundle\Entity\Forms();
-         $entityForm->setDomain($request->getHost());
-         $entityForm->setDateCreate(new DateTime());
-         $entityForm->setType(self::TYPE_ORDER_FORM);
-         $form = $this->formFactory->subOrderVehicleForm($entityForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $entityForm->setDealer($dealer);
-             $this->entityManager->persist($entityForm);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     public function saveSubCommissionTechnologyForm(Request $request, \ImporterBundle\Entity\Dealer $dealer = null)
-     {
-         $commissionForm = new \ImporterBundle\Entity\Forms();
-         $commissionForm->setDomain($request->getHost());
-         $commissionForm->setDateCreate(new DateTime());
-         $commissionForm->setType(self::TYPE_COMMISSION_TECHNOLOGY);
-         $form = $this->formFactory->subCommissionTechnologyForm($commissionForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $commissionForm->setDealer($dealer);
-             $commissionForm->setData(json_encode([
-                 'model' => $data['model'],
-                 'price' => $data['price'],
-             ]));
-             $this->entityManager->persist($commissionForm);
-             $this->entityManager->flush();
-             return new JsonResponse(
-                 [
-                     'success' => true,
-                     'name' => $commissionForm->getName(),
-                     'phone' => $commissionForm->getPhone()
-                 ]
-             );
-         }
-         $errors = [];
-         foreach ($form->getErrors() as $error) {
-             $errors[] = $error->getMessage();
-         }
-         return new JsonResponse(['success' => false, 'errors' => $errors]);
-     }
-     /**
-      * @param Request $request
-      * @param \ImporterBundle\Entity\Dealer|null $dealer
-      * @return JsonResponse
-      * @throws OptimisticLockException
-      */
-     public function saveSubBuyCarForm(Request $request, \ImporterBundle\Entity\Dealer $dealer = null)
-     {
-         $buyForm = new \ImporterBundle\Entity\Forms();
-         $buyForm->setDomain($request->getHost());
-         $buyForm->setDateCreate(new DateTime());
-         $buyForm->setType(self::TYPE_ORDER_FORM);
-         $form = $this->formFactory->subBuyForm($buyForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         if (!$dealer) {
-             $buyForm->setDealer($buyForm->getSubDealerVehicle()->getDealer());
-         } else {
-             $buyForm->setDealer($dealer);
-         }
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $this->entityManager->persist($buyForm);
-             $this->entityManager->flush();
-             return new JsonResponse([
-                 'success' => true,
-                 'name' => $buyForm->getName(),
-                 'phone' => $buyForm->getPhone()
-             ]);
-         }
-         return new JsonResponse([
-             'success' => false,
-             'errors' => $this->getErrorsFromForm($form)
-         ]);
-     }
-     public function saveSubBuyPartsForm(Request $request, \ImporterBundle\Entity\Dealer $dealer)
-     {
-         $buyPartsFormEntity = new \ImporterBundle\Entity\Forms();
-         $buyPartsFormEntity->setDomain($request->getHost());
-         $buyPartsFormEntity->setType(self::TYPE_BUY_PARTS_FORM);
-         $buyPartsFormEntity->setDateCreate(new DateTime());
-         $accessoriesRepo = $this->entityManager->getRepository(\ImporterBundle\Entity\Accessories::class);
-         $partId = $request->get('buy_parts')['accessory'];
-         $accessory = $accessoriesRepo->findOneBy(['id' => $partId]);
-         if (!$accessory) {
-             $data = ['part' => $partId];
-             $buyPartsFormEntity->setData(json_encode($data));
-             $requestData = $request->get('buy_parts');
-             $requestData['accessory'] = null;
-             $request->request->set('buy_parts', $requestData);
-         }
-         $form = $this->formFactory->buySubPartsForm($dealer, $buyPartsFormEntity);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $buyPartsFormEntity->setAccessory($accessory);
-             $buyPartsFormEntity->setDealer($dealer);
-             $this->entityManager->persist($buyPartsFormEntity);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     public function saveSubQuestionForm(Request $request, \ImporterBundle\Entity\Dealer $dealer = null)
-     {
-         $entityForm = new \ImporterBundle\Entity\Forms();
-         $entityForm->setDomain($request->getHost());
-         $entityForm->setDateCreate(new DateTime());
-         $entityForm->setType(self::TYPE_COMMON_FORM);
-         $form = $this->formFactory->subFeedbackQuestionForm($entityForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $entityForm->setDealer($dealer);
-             $entityForm->setData(json_encode([
-                 'question' => $data['question'],
-             ]));
-             $this->entityManager->persist($entityForm);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     public function saveSubCreditForm(Request $request, \ImporterBundle\Entity\Dealer $dealer = null)
-     {
-         $entityForm = new \ImporterBundle\Entity\Forms();
-         $entityForm->setDomain($request->getHost());
-         $entityForm->setDateCreate(new DateTime());
-         $entityForm->setType(self::TYPE_CREDIT_FORM);
-         $form = $this->formFactory->subCreditForm($entityForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $entityForm->setDealer($dealer);
-             $entityForm->setData(json_encode([
-                 'text' => $data['text'],
-             ]));
-             $this->entityManager->persist($entityForm);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     public function saveSubInsuranceForm(Request $request, \ImporterBundle\Entity\Dealer $dealer = null)
-     {
-         $entityForm = new \ImporterBundle\Entity\Forms();
-         $entityForm->setDomain($request->getHost());
-         $entityForm->setDateCreate(new DateTime());
-         $entityForm->setType(self::TYPE_INSURANCE);
-         $form = $this->formFactory->subInsuranceForm($entityForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $entityForm->setDealer($dealer);
-             $this->entityManager->persist($entityForm);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     public function saveSubTestDriveForm(Request $request, \ImporterBundle\Entity\Dealer $dealer = null)
-     {
-         $entityForm = new \ImporterBundle\Entity\Forms();
-         $entityForm->setDomain($request->getHost());
-         $entityForm->setDateCreate(new DateTime());
-         $entityForm->setType(self::TYPE_TEST_DRIVE_FORM);
-         $form = $this->formFactory->subTestDriveForm($entityForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $entityForm->setDealer($dealer);
-             $this->entityManager->persist($entityForm);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     public function saveLeasingForm(Request $request, Dealer $dealer)
-     {
-         $leasingFormEntity = new Forms();
-         $leasingFormEntity->setDomain($request->getHost());
-         $leasingFormEntity->setType(self::TYPE_LEASING_CALCULATOR);
-         $leasingFormEntity->setDateCreate(new DateTime());
-         $form = $this->formFactory->leasingForm($dealer, $leasingFormEntity);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $leasingFormEntity->setDealer($dealer);
-             $data = array_merge(json_decode($data['data'], true), ['edrpou' => $data['edrpou']]);
-             $leasingFormEntity->setData(json_encode($data));
-             $leasingFormEntity->setUtm($request->get('utm') ?? $request->cookies->get('ViDiTrackUTM'));
-             $this->entityManager->persist($leasingFormEntity);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true, 'form_id' => $leasingFormEntity->getId()]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     public function saveFleetUpdate(Request $request, Dealer $dealer)
-     {
-         $fleetUpdateForm = new Forms();
-         $fleetUpdateForm->setDomain($request->getHost());
-         $fleetUpdateForm->setDateCreate(new DateTime());
-         $fleetUpdateForm->setType(self::TYPE_UNICOMMERCE_FLEET_UPDATING);
-         $form = $this->formFactory->UnicommerceFleetUpdate($dealer, $fleetUpdateForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $fleetUpdateForm->setDealer($dealer);
-             $fleetUpdateForm->setData(
-                 json_encode(
-                     ['brand' => $data['brand'],
-                         'appointment' => $data['appointment'],
-                         'mileage' => $data['mileage'],
-                         'year' => $data['year'],
-                     ]
-                 )
-             );
-             $this->entityManager->persist($fleetUpdateForm);
-             $this->entityManager->flush();
-             return new JsonResponse(
-                 [
-                     'success' => true,
-                     'name' => $fleetUpdateForm->getName(),
-                     'phone' => $fleetUpdateForm->getPhone()
-                 ]
-             );
-         }
-         $errors = [];
-         foreach ($form->getErrors() as $error) {
-             $errors[] = $error->getMessage();
-         }
-         return new JsonResponse(['success' => false, 'errors' => $errors]);
-     }
-     public function saveMotoTestDriveForm(Request $request, Dealer $dealer)
-     {
-         $testDriveForm = new Forms();
-         $testDriveForm->setDomain($request->getHost());
-         $testDriveForm->setDateCreate(new DateTime());
-         $testDriveForm->setType(self::TYPE_MOTO_TEST_DRIVE);
-         $form = $this->formFactory->motoTestDriveForm($dealer, $testDriveForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $testDriveForm->setDealer($dealer);
-             $this->entityManager->persist($testDriveForm);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     public function saveWaterTestDriveForm(Request $request, Dealer $dealer, $vehicle = null)
-     {
-         $testDriveForm = new Forms();
-         $testDriveForm->setDomain($request->getHost());
-         $testDriveForm->setDateCreate(new DateTime());
-         $testDriveForm->setType(self::TYPE_WATER_TEST_DRIVE);
-         $form = $this->formFactory->waterTestDriveForm($dealer, $testDriveForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         if ($vehicle instanceof Vehicle) {
-             $testDriveForm->setVehicle($vehicle);
-         }
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $testDriveForm->setDealer($dealer);
-             $testDriveForm->setData(
-                 [
-                     'vehicle' => $data['vehicle'],
-                     'test_drive' => $data['test_drive'],
-                     'comment' => $data['comment'],
-                 ]
-             );
-             $this->entityManager->persist($testDriveForm);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     public function saveOilTOForm(Request $request, Dealer $dealer)
-     {
-         $oilTOEntity = new Forms();
-         $oilTOEntity->setDomain($request->getHost());
-         $oilTOEntity->setType(self::TYPE_OIL_TO);
-         $oilTOEntity->setDateCreate(new DateTime());
-         $form = $this->formFactory->oilTOForm($oilTOEntity);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $oilTOEntity->setDealer($dealer);
-             $oilTOEntity->setData(
-                 [
-                     'service' => $data['service'],
-                     'price' => $data['price'],
-                 ]
-             );
-             $this->entityManager->persist($oilTOEntity);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     public function saveServiceCampaingCarForm(Request $request, Dealer $dealer)
-     {
-         $entityForm = new Forms();
-         $entityForm->setDomain($request->getHost());
-         $entityForm->setDateCreate(new DateTime());
-         $entityForm->setType(self::TYPE_SERVICE_CAMPAING_CAR);
-         $form = $this->formFactory->serviceCampaingCarForm($entityForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $entityForm->setDealer($dealer);
-             $entityForm->setData(json_encode([
-                 'brand' => $data['brand'],
-                 'model' => $data['model'],
-                 'vin' => $data['vin'],
-                 'comment' => $data['comment'],
-             ]));
-             $this->entityManager->persist($entityForm);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     public function saveSaveDesignForm(Request $request, Dealer $dealer, $vehicle = null)
-     {
-         $entityForm = new Forms();
-         $entityForm->setDomain($request->getHost());
-         $entityForm->setDateCreate(new DateTime());
-         $entityForm->setType(self::TYPE_SAVE_DESIGN);
-         $form = $this->formFactory->saveDesignForm($entityForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         if ($vehicle instanceof Vehicle) {
-             $entityForm->setVehicle($vehicle);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $entityForm->setDealer($dealer);
-             $entityForm->setData(json_encode([
-                 'vehicle' => $data['vehicle'],
-             ]));
-             $this->entityManager->persist($entityForm);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     public function saveSendQuestionForm(Request $request, Dealer $dealer)
-     {
-         $entityForm = new Forms();
-         $entityForm->setDomain($request->getHost());
-         $entityForm->setDateCreate(new DateTime());
-         $entityForm->setType(self::TYPE_SEND_QUESTION);
-         $form = $this->formFactory->sendQuestionForm($entityForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $entityForm->setDealer($dealer);
-             $entityForm->setData(json_encode([
-                 'select_subject_question' => $data['select_subject_question'],
-                 'select_dealer' => $data['select_dealer'],
-                 'comment' => $data['comment'],
-             ]));
-             $this->entityManager->persist($entityForm);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     public function saveOnlineServiceRegistrationForm(Request $request, Dealer $dealer)
-     {
-         $entityForm = new Forms();
-         $entityForm->setDomain($request->getHost());
-         $entityForm->setDateCreate(new DateTime());
-         $entityForm->setType(self::TYPE_ONLINE_SERVICE_REGISTRATION);
-         $form = $this->formFactory->onlineServiceRegistrationForm($entityForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $entityForm->setDealer($dealer);
-             $entityForm->setData(json_encode([
-                 'date_visit' => $data['date_visit'],
-                 'model' => $data['model'],
-                 'comment' => $data['comment'],
-                 'select_dealer' => $data['select_dealer'],
-             ]));
-             $this->entityManager->persist($entityForm);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     public function saveWithoutPayOrderForm(Request $request, Dealer $dealer, User $user): JsonResponse
-     {
-         $entityForm = new Forms();
-         $entityForm->setDomain($request->getHost());
-         $entityForm->setDateCreate(new DateTime());
-         $entityForm->setType(self::TYPE_WITHOUT_PAY_ORDER);
-         $form = $this->formFactory->withoutPayOrderForm($entityForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $entityForm->setDealer($dealer);
-             $entityForm->setUser($user);
-             $entityForm->setData(json_encode([
-                 'comment' => $data['comment'],
-                 'select_dealer' => $data['select_dealer'],
-             ]));
-             $this->entityManager->persist($entityForm);
-             $this->entityManager->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'errors' => $this->getErrorsFromForm($form)]);
-     }
-     /**
-      * @param Request $request
-      * @return JsonResponse
-      * @throws OptimisticLockException
-      */
-     public function saveCallMeForm(Request $request, int $formType = self::TYPE_COMMON_FORM): JsonResponse
-     {
-         $callMeForm = new Forms();
-         $callMeForm->setDomain($request->getHost())
-             ->setDateCreate(new DateTime())
-             ->setType($formType);
-         if (isset($request->request->all('call_me')['message_type'])) {
-             $callMeForm->setData(json_encode(
-                 [
-                     'message_type' => $request->request->all('call_me')['message_type'],
-                 ]
-             ));
-         }
-         $form = $this->formFactory->callMeForm($callMeForm, isset($request->request->all('call_me')['dealer']));
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $this->entityManager->persist($callMeForm);
-             $this->entityManager->flush();
-             return new JsonResponse([
-                 'success' => true,
-                 'name' => $callMeForm->getName(),
-                 'phone' => $callMeForm->getPhone()
-             ]);
-         }
-         return new JsonResponse([
-             'success' => false,
-             'errors' => $this->getErrorsFromForm($form)
-         ]);
-     }
-     public function saveCallMeFormWithDealers(Request $request, int $formType = self::TYPE_TIRES_HOTEL_CALL): JsonResponse
-     {
-         $callMeForm = new Forms();
-         $callMeForm->setDomain($request->getHost())
-             ->setDateCreate(new DateTime())
-             ->setType($formType);
-         $setData = [];
-         if (isset($request->request->all('call_me_with_dealers')['message_type'])) {
-             $setData['message_type'] = $request->request->all('call_me_with_dealers')['message_type'];
-         }
-         if (isset($request->request->all('call_me_with_dealers')['dealers'])) {
-             $setData['dealers'] = $request->request->all('call_me_with_dealers')['dealers'];
-         }
-         $callMeForm->setData(json_encode($setData));
-         $form = $this->formFactory->callMeFormWithDealers($callMeForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $this->entityManager->persist($callMeForm);
-             $this->entityManager->flush();
-             return new JsonResponse([
-                 'success' => true,
-                 'name' => $callMeForm->getName(),
-                 'phone' => $callMeForm->getPhone()
-             ]);
-         }
-         return new JsonResponse([
-             'success' => false,
-             'errors' => $this->getErrorsFromForm($form)
-         ]);
-     }
-     public function saveTiresHotelForm(Request $request, $dealer, int $formType = self::TYPE_TIRES_HOTEL_ORDER)
-     {
-         $tiresHotelForm = (new Forms())->setDomain($request->getHost())
-             ->setDateCreate(new DateTime())
-             ->setType($formType);
-         $tiresHotelForm->setData(json_encode(
-             [
-                 'message_type' => $request->get('tires_hotel')['message_type'],
-                 'selected_categories' => $request->get('selectedCategories'),
-                 'dealers' => $dealer->getName(),
-             ]
-         ));
-         $tiresHotelForm->setDealer($dealer);
-         $form = $this->formFactory->tiresHotelForm($tiresHotelForm);
-         $data = $request->get($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $this->entityManager->persist($tiresHotelForm);
-             $this->entityManager->flush();
-             return new JsonResponse([
-                 'success' => true,
-                 'name' => $tiresHotelForm->getName(),
-                 'phone' => $tiresHotelForm->getPhone()
-             ]);
-         }
-         return new JsonResponse([
-             'success' => false,
-             'errors' => $this->getErrorsFromForm($form)
-         ]);
-     }
-     public function saveServiceConsultForm(Request $request, int $formType = self::TYPE_COMMON_FORM, Dealer $dealer = null): JsonResponse
-     {
-         $serviceConsultForm = (new Forms())->setDomain($request->getHost())
-             ->setDateCreate(new DateTime())
-             ->setType($formType);
-         if ($dealer){
-             $serviceConsultForm->setDealer($dealer);
-         }
-         $serviceConsultForm->setData(json_encode(
-             [
-                 'message_type' => $request->request->all('service_consult')['message_type'],
-                 'commentary' => $request->get('commentary'),
-                 'selected_service' => $request->request->all('service_consult')['services'],
-             ]
-         ));
-         $form = $this->formFactory->serviceConsultForm($serviceConsultForm);
-         $data = $request->request->all($form->getName());
-         if (!$this->hasPrivacy($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'privacy']);
-         }
-         if (!$this->validateCaptcha($data)) {
-             return new JsonResponse(['success' => false, 'error' => 'captcha token']);
-         }
-         $form->handleRequest($request);
-         $isValid = $this->validateForm($form);
-         if ($form->isSubmitted() && $isValid) {
-             $this->entityManager->persist($serviceConsultForm);
-             $this->entityManager->flush();
-             return new JsonResponse([
-                 'success' => true,
-                 'name' => $serviceConsultForm->getName(),
-                 'phone' => $serviceConsultForm->getPhone()
-             ]);
-         }
-         return new JsonResponse([
-             'success' => false,
-             'errors' => $this->getErrorsFromForm($form)
-         ]);
-     }
-     public function saveUnicommerceWithPhoto(Dealer $dealer, FormInterface $form, string $host,
-                                              string $name = 'UnicommerceLeasing',
-                                              int $type = self::TYPE_UNICOMMERCE_CONSULT): JsonResponse
-     {
-         if (!$form->isValid()) {
-             return new JsonResponse([
-                 'success' => false,
-                 'errors' => $this->getErrorsFromForm($form)
-             ], 400);
-         }
-         /** @var LeasingFormModel $leasingFormModel */
-         $leasingFormModel = $form->getData();
-         $leasingForm = new Forms();
-         $leasingForm->setPhone($leasingFormModel->getPhone())
-             ->setDomain($host)
-             ->setDealer($dealer)
-             ->setName($name)
-             ->setDateCreate(new DateTime())
-             ->setType($type);
-         $data = [];
-         foreach ($leasingFormModel->getPhotos() as $file) {
-             $fileName = $this->fileUploader->upload($file);
-             $data['photos'][] = $fileName;
-         }
-         $leasingForm->setData(json_encode($data));
-         $this->entityManager->persist($leasingForm);
-         $this->entityManager->flush();
-         return new JsonResponse([
-             'success' => true
-         ], 201);
-     }
-     public function saveOrderCall(Dealer $dealer, FormInterface $form, string $host): JsonResponse
-     {
-         if (!$form->isValid()) {
-             return new JsonResponse([
-                 'success' => false,
-                 'errors' => $this->getErrorsFromForm($form)
-             ], 400);
-         }
-         /** @var CallMeFormModel $callMeFormModel */
-         $callMeFormModel = $form->getData();
-         $callMeForm = new Forms();
-         $callMeForm->setPhone($callMeFormModel->getPhone())
-             ->setDomain($host)
-             ->setDealer($dealer)
-             ->setName($callMeFormModel->getName())
-             ->setData(json_encode(['connectionType' => $callMeFormModel->getType()]))
-             ->setDateCreate(new DateTime())
-             ->setType($callMeFormModel->getFormType());
-         $this->entityManager->persist($callMeForm);
-         $this->entityManager->flush();
-         return new JsonResponse([
-             'success' => true
-         ], 201);
-     }
- }
-