- <?php
- namespace MyBundle\Controller;
- use AcquiringBundle\Entity\Order;
- use AutomarketBundle\Component\EstimateCaptcha;
- use CoreBundle\Component\CoreFormFactory;
- use CoreBundle\Entity\Brand;
- use CoreBundle\Entity\Dealer;
- use CoreBundle\Entity\Post;
- use CoreBundle\Entity\User;
- use CoreBundle\Model\Api\OnlineService\ApiServer1C;
- use CoreBundle\Services\Cart\CartService;
- use DateTime;
- use DcSiteBundle\Services\AccessoryService;
- use Doctrine\ORM\EntityManagerInterface;
- use Exception;
- use FOS\UserBundle\Model\UserManagerInterface;
- use InsuranceBundle\Entity\CaseDocument;
- use InsuranceBundle\Model\InsuranceCase;
- use InsuranceBundle\Model\Program;
- use MyBundle\Component\InfobipSmsSender;
- use MyBundle\Component\SmsSender;
- use MyBundle\Entity\UserEmailChange;
- use MyBundle\Entity\UserInfo;
- use MyBundle\Entity\UserMessage;
- use MyBundle\Entity\UserReferral;
- use MyBundle\Entity\UserSignRequest;
- use MyBundle\Entity\UserSigns;
- use MyBundle\Exception\DataNotValidException;
- use MyBundle\Factory\ReferralDataDTOFactory;
- use MyBundle\Factory\StringGenerator;
- use MyBundle\Factory\UserEntityFactory;
- use MyBundle\Messages;
- use MyBundle\Service\AuthDataValidator;
- use Psr\Log\LoggerInterface;
- use Symfony\Component\HttpFoundation\BinaryFileResponse;
- use Symfony\Component\HttpFoundation\JsonResponse;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\HttpFoundation\RequestStack;
- use Symfony\Component\HttpFoundation\Response;
- use Symfony\Component\HttpFoundation\ResponseHeaderBag;
- use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
- use Symfony\Component\Mailer\MailerInterface;
- use Symfony\Component\Mime\Address;
- use Symfony\Component\Mime\Email;
- use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
- use Symfony\Component\Routing\RouterInterface;
- use Twig\Environment;
- class ProfileController extends MyBaseController
- {
-     private RouterInterface $router;
-     public function __construct(EntityManagerInterface $em, RequestStack $requestStack, Messages $messages,
-                                 \CoreBundle\Model\User $userModel, Environment $twig, RouterInterface $router)
-     {
-         $this->router = $router;
-         parent::__construct($em, $requestStack, $messages, $userModel, $twig);
-     }
-     private function getActions(): array
-     {
-         $actions = $this->em->getRepository(Post::class)->getActions(null);
-         //TODO remove to some config and remove magic numbers
-         $routesByDealer = [
-             3 => [
-                 'key' => 'url',
-                 'name' => 'ford_get_post'
-             ],
-             4 => [
-                 'key' => 'url',
-                 'name' => 'toyota_action_single'
-             ],
-             7 => [
-                 'key' => 'url',
-                 'name' => 'toyota_odessa_action_single'
-             ],
-             8 => [
-                 'key' => 'url',
-                 'name' => 'nissan_stocks_single'
-             ],
-             14 => [
-                 'key' => 'url',
-                 'name' => 'lexus_stocks_single'
-             ],
-             15 => [
-                 'key' => 'url',
-                 'name' => 'nissan_armada_stocks_single'
-             ],
-             16 => [
-                 'key' => 'url',
-                 'name' => 'yamaha_stocks_single'
-             ],
-         ];
-         $actionsResult = [];
-         /** @var Post $row */
-         foreach ($actions as $row) {
-             $postDealer = $row->getDealer();
-             if (!$postDealer) {
-                 continue;
-             }
-             if (!isset($routesByDealer[$postDealer->getId()])) {
-                 continue;
-             }
-             $paramName = $routesByDealer[$postDealer->getId()]['key'];
-             $routeName = $routesByDealer[$postDealer->getId()]['name'];
-             $actionsResult[] = [
-                 'item' => $row,
-                 'url' => $this->router->generate($routeName, ["$paramName" => $row->getUrl()])
-             ];
-             if (count($actionsResult) >= 3) {
-                 break;
-             }
-         }
-         return $actionsResult;
-     }
-     public function index(Request $request): Response
-     {
-         return $this->baseMyRender('@My/Profile/index.html.twig', [
-             'actions' => $this->getActions(),
-             'genders' => \CoreBundle\Model\User::GENDERS[$request->getLocale()],
-             'user' => $this->getUser()
-         ]);
-     }
-     public function confirmChangeEmail(Request $request, $userHash, $emailHash): Response
-     {
-         $success = false;
-         $email = '';
-         if ($this->userModel->initByHash($userHash)) {
-             $user = $this->userModel->getUser();
-             if ($emailHash == $user->getEmailHash()) {
-                 /** @var UserEmailChange $userEmailChange [] */
-                 $userEmailChange = $this->em->getRepository(UserEmailChange::class)->findBy(['user' => $user, 'hash' => $emailHash]);
-                 if ($userEmailChange) {
-                     $email = current($userEmailChange)->getEmail();
-                     $success = true;
-                     $user->setEmail($email);
-                     $user->setEmailCanonical($email);
-                     $this->em->flush();
-                 }
-             }
-         }
-         return $this->baseMyRender('@My/Profile/confirm_email_change.html.twig', [
-             'success' => $success,
-             'email' => $email
-         ]);
-     }
-     public function updateUser(Request $request): JsonResponse
-     {
-         $errors = [];
-         $response = ['success' => true];
-         /** @var User $User */
-         $User = $this->getUser();
-         if ($request->request->get('name')) {
-             $User->setName($request->request->get('name'));
-         } else {
-             $errors['name'] = true;
-         }
-         if ($request->request->get('last-name')) {
-             $User->setLastName($request->request->get('last-name'));
-         } else {
-             $errors['lastName'] = true;
-         }
-         if ($request->request->get('middle-name')) {
-             $User->setMiddleName($request->request->get('middle-name'));
-         } else {
-             $errors['middleName'] = true;
-         }
-         if ($request->request->get('birth-date'))
-             $User->setBirthDate(new DateTime($request->request->get('birth-date')));
-         //$User->setFullName($request->request->get('full-name'));
-         $User->setGender((int)$request->request->get('gender'));
-         $userInfo = $User->getInfo();
-         if (!$userInfo) {
-             $User->setInfo(new UserInfo());
-         }
-         $User->getInfo()->setCity($request->request->get('city'));
-         $error = $this->updateEmail($request);
-         if ($error) {
-             $response = ['success' => false, 'error' => $error];
-         }
-         $this->em->persist($User);
-         $this->em->persist($User->getInfo());
-         $this->em->flush();
-         return new JsonResponse($response);
-     }
-     public function updateEmail(Request $request, MailerInterface $mailer, UserManagerInterface $userManager): array
-     {
-         /** @var User $User */
-         $User = $this->getUser();
-         $email = $request->request->get('email');
-         if ($email && ($email != $User->getEmail())) {
-             if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
-                 return ['email' => 'Некорректно введен email.'];
-             }
-             if ($userManager->findUserByEmail($email)) {
-                 return ['email' => 'Данный email уже используется в системе. Укажите другой.'];
-             }
-             $userHash = md5($User->getId() . time() . 'vidisecrettertsalt1ws!@3');
-             $emailHash = md5($User->getId() . time() . 'emailconfirmsecrethash123et&!^');
-             $userEmailChange = new UserEmailChange();
-             $userEmailChange->setUser($User);
-             $userEmailChange->setHash($emailHash);
-             $userEmailChange->setEmail($email);
-             $this->em->persist($userEmailChange);
-             $User->setEmailHash($emailHash);
-             $User->setHash($userHash);
-             $mailBody = $this->baseMyRender('@My/Mail/confirm_change_email.html.twig', ['hash' => $emailHash, 'uHash' => $userHash, 'user' => $User])->getContent();
-             $message = (new Email())
-                 ->subject('Подтверждение изменения электронного адреса в программе лояльности')
-                 ->from(new Address('info@vidi.ua', 'Автодинастия'))
-                 ->html($mailBody)
-                 ->to($email);
-             $mailer->send($message);
-             $this->em->persist($User);
-             $this->em->flush();
-         }
-         return [];
-     }
-     public function aboutcar(): Response
-     {
-         $User = $this->getUser();
-         $this->userModel->initByEntity($User);
-         return $this->baseMyRender('@My/Profile/aboutcar.html.twig', [
-             'user' => $this->userModel,
-             'actions' => $this->getActions()
-         ]);
-     }
-     public function car()
-     {
-         return $this->baseMyRender('@My/Profile/car.html.twig', [
-             'user' => $this->getUser(),
-         ]);
-     }
-     public function carSingle(Request $request, ApiServer1C $apiServer1C)
-     {
-         $carId = $request->get('id');
-         $User = $this->getUser();
-         $this->userModel->initByEntity($User);
-         $Car = $this->userModel->getCarById($carId);
-         if (!$Car) {
-             return $this->createNotFoundException();
-         }
-         $serviceHistory = $apiServer1C->getUserCarHistory($Car->getVin(), $this->userModel->getPhone());
-         $history = [];
-         if ($serviceHistory['data']) {
-             foreach ($serviceHistory['data'] as $item) {
-                 $history[] = [
-                     'number' => $item['number'],
-                     'date' => (new DateTime($item['date']))->format('d.m.Y'),
-                     'millage' => $item['millage'],
-                     'sum' => $item['sum'],
-                     'parts' => $item['parts'] ?? [],
-                     'works' => $item['works'] ?? [],
-                 ];
-             }
-         }
-         $history = $this->array_unique($history);
-         usort($history, fn($a, $b) => strtotime($a['date']) < strtotime($b['date']));
-         $availBrands = $this->em->getRepository(Brand::class)->getAvailBrandsInstanceName();
-         return $this->baseMyRender('@My/Profile/car-single.html.twig', [
-             'car' => $Car,
-             'history' => $history,
-             'availBrands' => $availBrands,
-         ]);
-     }
-     private function array_unique($array): array
-     {
-         $temp_array = [];
-         $key_array = [];
-         $i = 0;
-         foreach ($array as $val) {
-             if (!in_array($val['number'], $key_array)) {
-                 $key_array[$i] = $val['number'];
-                 $temp_array[$i] = $val;
-             }
-             $i++;
-         }
-         return $temp_array;
-     }
-     public function message(): Response
-     {
-         $result = [];
-         $messages = $this->messages->getUserMessages();
-         $nowDate = new DateTime();
-         $yesterdayDate = new DateTime('-1 day');
-         foreach ($messages as $message) {
-             $key = $message['date'];
-             if ($key == $nowDate->format('d.m.Y')) {
-                 $key = 'today';
-             }
-             if ($key == $yesterdayDate->format('d.m.Y')) {
-                 $key = 'yesterday';
-             }
-             $result[$key][] = $message;
-         }
-         return $this->baseMyRender('@My/Profile/message.html.twig', [
-             'messages' => $result,
-             'actions' => $this->getActions()
-         ]);
-     }
-     public function setIsRead(Request $request): JsonResponse
-     {
-         $id = $request->get('id');
-         $message = $this->em->getRepository(UserMessage::class)->find($id);
-         if ($message && $message->getUser()->getId() == $this->getUser()->getId()) {
-             $message->setIsRead(1);
-             $this->em->persist($message);
-             $this->em->flush($message);
-         }
-         return $this->json(['success' => true]);
-     }
-     public function insuranceLongation(Request $request)
-     {
-         $this->baseMyRender('@My/profile.html.twig');
-     }
-     public function orderService(Request $request, CoreFormFactory $coreFormFactory): Response
-     {
-         //TODO add params or what??
-         return $this->baseMyRender('@My/Profile/order-service.html.twig', [
-             'actions' => $this->getActions(),
-             'serviceForm' => $coreFormFactory->serviceForm(null, false)->createView(),
-         ]);
-     }
-     public function orderServiceByParameters($hash, Request $request, CoreFormFactory $coreFormFactory): ?Response
-     {
-         $params = json_decode(base64_decode($hash));
-         return $this->baseMyRender('@My/Profile/order-service.html.twig', [
-             'params' => $params,
-             'actions' => $this->getActions(),
-             'serviceForm' => $coreFormFactory->serviceForm(null, false)->createView(),
-         ]);
-     }
-     public function orderTestDrive(CoreFormFactory $coreFormFactory): Response
-     {
-         $tdForm = $coreFormFactory->testDriveForm();
-         return $this->baseMyRender('@My/Profile/order-test-drive.html.twig', [
-             'actions' => $this->getActions(),
-             'testDrivePageForm' => $tdForm->createView()
-         ]);
-     }
-     public function insurance(): Response
-     {
-         $user = $this->getUser();
-         $cases = $this->em->getRepository(InsuranceCase::class)->findBy(['user' => $user]);
-         return $this->baseMyRender('@My/Profile/insurance.html.twig', [
-             'actions' => $this->getActions(),
-             'cases' => $cases,
-         ]);
-     }
-     public function sendCaseToEmail(Request $request, $caseId, MailerInterface $mailer): JsonResponse
-     {
-         $case = $this->em->getRepository(InsuranceCase::class)->find($caseId);
-         if (!$case) {
-             throw new NotFoundHttpException();
-         }
-         $mailBody = $this->baseMyRender('@Insurance/Cabinet/stikcer.html.twig', ['case' => $case]);
-         $message = (new Email())
-             ->subject('ВиДи Страхование - страховое дело')
-             ->from(new Address('info@vidi.ua', 'Автодинастия'))
-             ->html($mailBody)
-             ->to($this->getUser()->getEmail());
-         try {
-             $mailer->send($message);
-             return $this->json(['success' => true]);
-         } catch (Exception $e) {
-         }
-         return $this->json(['success' => false]);
-     }
-     public function caseDetails($caseId): Response
-     {
-         $case = $this->em->getRepository(InsuranceCase::class)->find($caseId);
-         if (!$case) {
-             throw new NotFoundHttpException();
-         }
-         $count = 0;
-         foreach ($case->getDocuments() as $document) {
-             if (!$document->isReceived()) {
-                 $count += 1;
-             }
-         }
-         return $this->baseMyRender('@My/Profile/insurance-details.html.twig', ['case' => $case, 'receivedCount' => $count]);
-     }
-     public function download(Request $request, $id): BinaryFileResponse
-     {
-         $User = $this->getUser();
-         $Case = $this->em->getRepository(InsuranceCase::class)->find($id);
-         if (!$Case || $Case->getState() < 2 || $Case->getUser()->getId() != $User->getId()) {
-             throw new NotFoundHttpException();
-         }
-         $filesDir = $this->getParameter('kernel.project_dir') . '/public/uploads/insurance';
-         $fullPath = $filesDir . '/' . $Case->getWMail();
-         if (!$Case->getWMail() || !file_exists($fullPath)) {
-             throw new NotFoundHttpException();
-         }
-         return $this->file($fullPath);
-     }
-     public function print(Request $request): BinaryFileResponse
-     {
-         $User = $this->getUser();
-         $id = $request->get('id');
-         $Case = $this->em->getRepository(InsuranceCase::class)->find($id);
-         if (!$Case || $Case->getUser()->getId() != $User->getId()) {
-             throw new NotFoundHttpException();
-         }
-         $filesDir = $this->container->getParameter('kernel.project_dir') . '/public/uploads/insurance';
-         $fullPath = $filesDir . '/' . $Case->getWMail();
-         if (!$Case->getWMail() || !file_exists($fullPath)) {
-             throw new NotFoundHttpException();
-         }
-         $response = new BinaryFileResponse($fullPath);
-         $response->headers->set('Content-Type', 'application/pdf');
-         $response->setContentDisposition(
-             ResponseHeaderBag::DISPOSITION_INLINE,
-             $Case->getWMail()
-         );
-         return $response;
-     }
-     public function sticker(Request $request, $id): ?Response
-     {
-         $User = $this->getUser();
-         $Case = $this->em->getRepository(InsuranceCase::class)->find($id);
-         if (!$Case || ($Case->getUser()->getId() != $User->getId() && !$this->isGranted())) {
-             throw new NotFoundHttpException();
-         }
-         return $this->baseMyRender('@Insurance/Cabinet/stikcer.html.twig', [
-             'case' => $Case
-         ]);
-     }
-     public function docAdd(Request $request): JsonResponse
-     {
-         $User = $this->getUser();
-         $id = $request->request->get('id');
-         $Case = $this->em->getRepository(InsuranceCase::class)->find($id);
-         if (!$Case || $Case->getState() < 2 || $Case->getUser()->getId() != $User->getId()) {
-             return new JsonResponse(['success' => false]);
-         }
-         $filesDir = $this->getParameter('kernel.project_dir') . '/public/uploads/insurance';
-         /** @var Up $file */
-         foreach ($request->files as $docId => $file) {
-             $Document = $this->em->getRepository(CaseDocument::class)->find($docId);
-             if (!$Document || $Document->getCase()->getUser()->getId() != $User->getId()) {
-                 continue;
-             }
-             $fileName = md5(uniqid()) . '.' . $file->guessExtension();
-             $file->move($filesDir, $fileName);
-             $Document->setFile($fileName);
-             $Document->setState(InsuranceCase::DOC_STATE_NEW);
-             $this->em->persist($Document);
-             $this->em->flush($Document);
-         }
-         return new JsonResponse(['success' => true]);
-     }
-     public function downloadBlank(Request $request): BinaryFileResponse
-     {
-         $sample = $request->query->get('sample');
-         $fileName = $sample ? 'Зразок_заяви_страхового випадку_ВІДІ-СТРАХУВАННЯ.pdf' : 'Заява про настання страхового випадку_Новий_Бланк.pdf';
-         $dir = realpath($this->getParameter('kernel.project_dir') . '/public');
-         $fullPath = $dir . '/bundles/insurance/files/' . $fileName;
-         if (!file_exists($fullPath)) {
-             throw new NotFoundHttpException();
-         }
-         return $this->file($fullPath);
-     }
-     public function orders(Request $request, CartService $cartService): ?Response
-     {
-         $accessories = [];
-         $acquiringOrders = $this->em->getRepository(Order::class)->findBy(['user' => $this->getUser(), 'state' => 2]);
-         /** @var Order $acquiring */
-         foreach ($acquiringOrders as $acquiring) {
-             $accessories[$acquiring->getId()] = [
-                 'price' => $acquiring->getOrder()->getOrderAmount(),
-                 'title' => $acquiring->getId(),
-                 'images' => [],
-                 'dateCreate' => $acquiring->getDateCreate()->format('d.m.Y H:i'),
-             ];
-             foreach ($acquiring->getOrder()->getOrderItem() as $item) {
-                 $cartType = $cartService->getCartType($item->getType());
-                 $dataItem = json_decode($item->getData());
-                 $cart = $cartType->getCart($dataItem, $request->getLocale());
-                 $accessories[$acquiring->getId()]['images'] = $cart['image'];
-             }
-         }
-         return $this->baseMyRender('@My/Profile/orders.html.twig', [
-             'actions' => $this->getActions(),
-             'accessories' => $accessories,
-         ]);
-     }
-     public function calendar(Request $request): ?Response
-     {
-         return $this->baseMyRender('@My/Profile/calendar.html.twig', [
-             'actions' => $this->getActions(),
-             'currentYear' => date('Y'),
-             'currentMonth' => date('n'),
-         ]);
-     }
-     public function onlineActivity(): ?Response
-     {
-         return $this->baseMyRender('@My/Profile/online-activity.html.twig', [
-             'actions' => $this->getActions(),
-         ]);
-     }
-     public function support(Request $request, RouterInterface $router, CoreFormFactory $factory): ?Response
-     {
-         return $this->baseMyRender('@My/Profile/support.html.twig', [
-             'actions' => $this->getActions(),
-             'privacyUrl' => $router->generate('portal_privacy_policy'),
-             'supportForm' => $factory
-                 ->supportForm(null, $request->getLocale(), true)
-                 ->createView()
-         ]);
-     }
-     public function wishList(Request $request, RouterInterface $router, AccessoryService $accessoryService): ?Response
-     {
-         $result = $accessoryService->getListFavoritesAccessory($this->getUser());
-         return $this->baseMyRender('@My/Profile/wish-list.html.twig', [
-             'result' => $result,
-             'actions' => $this->getActions(),
-             'catalogUrl' => $router->generate('portal_new_catalog_b', ['state' => 'new', 'type' => 'car', 'brand' => 'all']),
-         ]);
-     }
-     public function insCalc(EstimateCaptcha $estimateCaptcha): ?Response
-     {
-         return $this->baseMyRender('@My/Profile/ins-calc.html.twig', [
-             'baseType' => Program::BASE_COEFFICIENT_TYPE,
-             'listType' => Program::LIST_COEFFICIENT_TYPE,
-             'optionType' => Program::OPTION_COEFFICIENT_TYPE,
-             'token' => $estimateCaptcha->generateToken(),
-         ]);
-     }
-     public function insCalcByCar(Request $request, EstimateCaptcha $estimateCaptcha)
-     {
-         $carId = $request->get('id');
-         $User = $this->getUser();
-         $this->userModel->initByEntity($User);
-         $Car = $this->userModel->getCarById($carId);
-         if (!$Car) {
-             return $this->createNotFoundException();
-         }
-         return $this->baseMyRender('@My/Profile/ins-calc-by-car.html.twig', [
-             'car' => $Car,
-             'baseType' => Program::BASE_COEFFICIENT_TYPE,
-             'listType' => Program::LIST_COEFFICIENT_TYPE,
-             'optionType' => Program::OPTION_COEFFICIENT_TYPE,
-             'token' => $estimateCaptcha->generateToken(),
-         ]);
-     }
-     public function documents()
-     {
-         $UserSigns = $this->em
-             ->getRepository(UserSigns::class)->findBy(['user' => $this->getUser()]);
-         $UserSignsRequest = $this->em
-             ->getRepository(UserSignRequest::class)->findBy(['user' => $this->getUser()]);
-         $userSignClose = [];
-         $userSignOpen = [];
-         foreach ($UserSignsRequest as $userSignRequest) {
-             $isSearched = false;
-             foreach ($UserSigns as $userSign) {
-                 if ($userSignRequest->getSignCode() === $userSign->getSignCode()) {
-                     $userSignClose[] = $userSign;
-                     $isSearched = true;
-                     break;
-                 }
-             }
-             if (!$isSearched) {
-                 $userSignOpen[] = $userSignRequest;
-             }
-         }
-         return $this->baseMyRender('@My/Profile/documents.html.twig', [
-             'actions' => $this->getActions(),
-             'signsOpen' => $userSignOpen,
-             'signsClose' => $userSignClose,
-         ]);
-     }
-     public function orderParts(): ?Response
-     {
-         return $this->baseMyRender('@My/Profile/order-parts.html.twig');
-     }
-     public function tradeIn(): ?Response
-     {
-         return $this->baseMyRender('@My/Profile/trade-in.html.twig');
-     }
-     public function insuranceNew(): ?Response
-     {
-         return $this->baseMyRender('@My/Insurance/index.html.twig');
-     }
-     public function quality(Request $request, ApiServer1C $apiServer1C): ?Response
-     {
-         $type = $request->get('type');
-         $dealer = $request->get('dealer');
-         $documentId = $request->get('document');
-         /** @var Dealer $dealer */
-         $dealer = $this->em->getRepository(Dealer::class)->findOneBy(['uid_1c' => $dealer]);
-         if (!$dealer) {
-             throw $this->createNotFoundException();
-         }
-         try {
-             $documentData = $apiServer1C->getDocumentInfo($type, $documentId, $dealer);
-         } catch (Exception $e) {
-             $documentData = false;
-         }
-         if (!$documentData) {
-             $documentData = [
-                 "Date" => false,
-                 "Number" => false,
-                 "Customer" => false
-             ];
-         }
-         $documentData['id'] = $documentId;
-         return $this->baseMyRender(
-             '@My/Profile/quality.html.twig',
-             ['data' => $documentData, 'type' => $type, 'dealer' => $dealer]
-         );
-     }
-     public function sendSmsCode(Request $request, SmsSender $smsSender, InfobipSmsSender $infobipSmsSender): JsonResponse
-     {
-         /** @var User $user */
-         $user = $this->getUser();
-         $phone = $this->formatPhone($request->get('new-phone'));
-         if (!$phone) {
-             return new JsonResponse(['success' => false, 'error' => 'Phone does not correct formatted']);
-         }
-         $userPhones = $user->getInfo()->getPhones();
-         foreach ($userPhones as $userPhone) {
-             if ($userPhone === $phone) {
-                 return new JsonResponse(['success' => false, 'error' => 'This phone already exists']);
-             }
-         }
-         $permitted_chars = '0123456789';
-         $smscode = strtoupper(substr(str_shuffle($permitted_chars), 0, 6));
-         $smsSender->setAccount(SmsSender::LOYALTY_ACCOUNT)->sendSms($phone, $smscode);
-         $infobipSmsSender->sendSms($phone, $smscode);
-         $user->getInfo()->setConfirmCode($smscode);
-         $user->getInfo()->setSmsCount($user->getInfo()->getSmsCount() + 1);
-         $this->em->persist($user->getInfo());
-         $this->em->flush();
-         return new JsonResponse(['success' => true]);
-     }
-     public function confirmSmsCode(Request $request): JsonResponse
-     {
-         /** @var User $user */
-         $user = $this->getUser();
-         $requestPhone = $this->formatPhone($request->get('confirm-phone'));
-         if (!$requestPhone) {
-             return new JsonResponse(['success' => false, 'error' => 'Некоректно введений телефон']);
-         }
-         $smsCode = $user->getInfo()->getConfirmCode();
-         if (!$smsCode || $smsCode !== (int)$request->get('sms-code')) {
-             return new JsonResponse(['success' => false, 'error' => 'Не вірно введений код']);
-         }
-         $user->getInfo()->setPhones(array_merge($user->getInfo()->getPhones(), [$user->getPhone()]));
-         $user->getInfo()->setConfirmCode(null);
-         $user->setPhone($requestPhone);
-         $this->em->persist($user);
-         $this->em->persist($user->getInfo());
-         $this->em->flush();
-         return new JsonResponse(['success' => true]);
-     }
-     public function setMainPhone(Request $request): JsonResponse
-     {
-         /** @var User $user */
-         $user = $this->getUser();
-         $requestPhone = $this->formatPhone($request->get('personal-phone'));
-         $userPhones = $user->getInfo()->getPhones();
-         if (array_search($requestPhone, $userPhones) !== false) {
-             unset($userPhones[array_search($requestPhone, $userPhones)]);
-         } else {
-             return new JsonResponse(['success' => false]);
-         }
-         array_push($userPhones, $user->getPhone());
-         $user->getInfo()->setPhones(array_values($userPhones));
-         $user->setPhone($requestPhone);
-         $this->em->persist($user);
-         $this->em->persist($user->getInfo());
-         $this->em->flush();
-         return new JsonResponse(['success' => true]);
-     }
-     public function deletePhone(Request $request): JsonResponse
-     {
-         /** @var User $user */
-         $user = $this->getUser();
-         $requestPhone = $this->formatPhone($request->get('delete-phone'));
-         $userPhones = $user->getInfo()->getPhones();
-         if (array_search($requestPhone, $userPhones) !== false) {
-             unset($userPhones[array_search($requestPhone, $userPhones)]);
-             $user->getInfo()->setPhones(array_values($userPhones));
-             $this->em->persist($user->getInfo());
-             $this->em->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false]);
-     }
-     public function formatPhone($phone)
-     {
-         $phone = preg_replace("/[^0-9]/", '', $phone);
-         if (strlen($phone) >= 10) {
-             return substr($phone, -10);
-         }
-         return false;
-     }
-     public function auction(): ?Response
-     {
-         return $this->baseMyRender('@My/Auction/auction.html.twig');
-     }
-     public function auctionSingle(): ?Response
-     {
-         return $this->baseMyRender('@My/Auction/auction-single.html.twig');
-     }
-     public function referral(Request $request): ?Response
-     {
-         $referrals = $this->em
-             ->getRepository(UserReferral::class)->findBy(['owner_user' => $this->getUser()]);
-         return $this->baseMyRender('@My/Profile/referral.html.twig', compact('referrals'));
-     }
-     public function referralSend(
-         Request                $request,
-         StringGenerator        $stringGenerator,
-         AuthDataValidator      $validator,
-         UserEntityFactory      $userEntityFactory,
-         LoggerInterface        $logger,
-         ReferralDataDTOFactory $referralDataDTOFactory,
-         RouterInterface        $router,
-         InfobipSmsSender       $infobipSmsSender
-     ): JsonResponse
-     {
-         if (!$User = $this->getUser()) {
-             return new JsonResponse(['success' => false, 'error' => 'Операцію заборонено, користувач не знайдено']);
-         }
-         $data = $request->request->all();
-         try {
-             $validator->validateForReferral($data);
-         } catch (DataNotValidException $e) {
-             $logger->error($e->getMessage(), $data);
-             return new JsonResponse(['success' => false, 'error' => $e->getMessage()]);
-         }
-         $referralDataDTO = $referralDataDTOFactory->createReferralDTO($data);
-         if (
-             $this->em
-                 ->getRepository(User::class)
-                 ->checkUsersByParams(['phone' => $referralDataDTO->phone])
-         ) {
-             return new JsonResponse([
-                     'success' => false,
-                     'error' => 'Користувач із таким номером телефону вже зареєстрований'
-                 ]
-             );
-         }
-         $usersReferral = $this->em->getRepository(UserReferral::class);
-         do {
-             $promoCode = $stringGenerator->generateUpperCaseAndNumbers();
-         } while ($usersReferral->findOneBy(['promo_code' => $promoCode]));
-         $referralDataDTO->promoCode = $promoCode;
-         $referralDataDTO->user = $User;
-         $newUser = $userEntityFactory->createNotActivatedUserWithoutMail($referralDataDTO);
-         if ($newUser) {
-             $referralLink =
-                 $router->generate(
-                     'my_user_referral',
-                     ['promoCode' => $promoCode],
-                     UrlGeneratorInterface::ABSOLUTE_URL
-                 );
-             $message = 'Запрошення в особистий кабінет VIDI. Для завершення реєстрації перейдіть за посиланням: ' .
-                 $referralLink;
-             $infobipSmsSender->sendSms($referralDataDTO->phone, $message);
-             $userReferral = $userEntityFactory->createUserReferral($referralDataDTO);
-             $this->em->persist($userReferral);
-             $this->em->flush();
-             return new JsonResponse(['success' => true]);
-         }
-         return new JsonResponse(['success' => false, 'error' => 'Поле "Прізвище" обов\'язкове до заповнення']);
-     }
-     public function referralRegister($promoCode)
-     {
-         $ReferralUser = $this->em
-             ->getRepository(UserReferral::class)
-             ->findOneBy(['promo_code' => $promoCode]);
-         $OwnerUser = $ReferralUser->getOwnerUser();
-         return $this->baseMyRender('@My/Modules/user-referral.html.twig', [
-             'OwnerUser' => $OwnerUser,
-             'ReferralUser' => $ReferralUser,
-         ]);
-     }
- }
-