src/DcSiteBundle/Controller/Yamaha/ServiceController.php line 279

Open in your IDE?
  1. <?php
  2. namespace DcSiteBundle\Controller\Yamaha;
  3. use CoreBundle\Component\FormManager;
  4. use CoreBundle\Entity\Forms;
  5. use CoreBundle\Entity\Vehicles\Vehicle;
  6. use CoreBundle\Model\Api\AutoRia\AutoRia;
  7. use CoreBundle\Model\Vehicles\VehicleType;
  8. use DateTime;
  9. use DcSiteBundle\Entity\OperatingManuals;
  10. use DcSiteBundle\Form\Type\YamahaLeasingType;
  11. use DcSiteBundle\Form\Type\YamahaWinterType;
  12. use DcSiteBundle\Model\Form\ServicesOrderForm;
  13. use DcSiteBundle\Services\RentVehicleService;
  14. use Doctrine\ORM\NonUniqueResultException;
  15. use Doctrine\ORM\OptimisticLockException;
  16. use Exception;
  17. use Symfony\Component\HttpFoundation\JsonResponse;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  21. use Twig\Error\Error;
  22. use Twig_Error_Loader;
  23. use Twig_Error_Runtime;
  24. use Twig_Error_Syntax;
  25. class ServiceController extends MainController
  26. {
  27.     private $rentVehicleService;
  28.     public function __construct(RentVehicleService $rentVehicleService)
  29.     {
  30.         $this->rentVehicleService $rentVehicleService;
  31.     }
  32.     public function service(Request $request)
  33.     {
  34.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/service.html.twig');
  35.     }
  36.     public function boatsService(Request $request)
  37.     {
  38.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/boats-service.html.twig');
  39.     }
  40.     public function motoService(Request $request)
  41.     {
  42.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/moto-service.html.twig');
  43.     }
  44.     public function motoServiceGeneral()
  45.     {
  46.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/moto-service-general.html.twig');
  47.     }
  48.     public function recordingService(Request $request)
  49.     {
  50.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/recording-service.html.twig', [
  51.             'serviceForm' => $this->CoreFormFactory()->serviceForm(nullnullnull1)->createView(),
  52.         ]);
  53.     }
  54.     public function gluingProtectiveFilmService(Request $request)
  55.     {
  56.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/gluing-protective-film-service.html.twig', [
  57.             'serviceForm' => $this->get('core.form.factory')->servicesOrderForm(ServicesOrderForm::GLUING_FILM$request->getLocale())->createView(),
  58.         ]);
  59.     }
  60.     public function towTruckService(Request $request)
  61.     {
  62.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/tow-truck.html.twig', [
  63.             'serviceForm' => $this->get('core.form.factory')->servicesOrderForm(ServicesOrderForm::TOW_TRUCK$request->getLocale())->createView(),
  64.         ]);
  65.     }
  66.     public function warranty(Request $request)
  67.     {
  68.         return $this->baseYamahaRender('@DcSite/Yamaha/Services/warranty-obligations.html.twig');
  69.     }
  70.     public function CommissionTechnology(Request $request)
  71.     {
  72.         $technique $this->get('core.model.vehicles.repository')->getUsedByDealer($this->getDealer());
  73.         $craftedTech = [];
  74.         /** @var Vehicle $tech */
  75.         foreach ($technique as $tech) {
  76.             $techModel $this->get('core.factory.vehicle')->createByEntity($tech);
  77.             if (!$techModel) {
  78.                 continue;
  79.             }
  80.             $craftedTech[] = [
  81.                 "id" => $techModel->getVehicleId(),
  82.                 "title" => $techModel->getFullName(),
  83.                 "price" => $techModel->price(),
  84.                 "year" => $techModel->getYear(),
  85.                 'mileage' => $techModel->getMileage(),
  86.                 "link" => $techModel->getUrl(),
  87.                 "image" => $this->get('sonata.media.twig.extension')->getPath($tech->getPreview(), 'small')
  88.             ];
  89.         }
  90.         return $this->baseYamahaRender('@DcSite/Yamaha/CommissionTechnology/catalog.html.twig', [
  91.             'tech' => $craftedTech,
  92.             'commissionForm' => $this->get('core.form.factory')->commissionTechnologyForm()->createView()
  93.         ]);
  94.     }
  95.     public function CommissionModel(Request $request$url)
  96.     {
  97.         $vehicle $this->get('core.factory.vehicle')->createByUrl($url$this->getDealer());
  98.         if (!$vehicle) {
  99.             throw new NotFoundHttpException();
  100.         }
  101.         $forms = new Forms();
  102.         $forms->setVehicle($vehicle->getVehicleEntity());
  103.         $forms->setDealer($this->getDealer());
  104.         return $this->baseYamahaRender('@DcSite/Yamaha/CommissionTechnology/model-card.html.twig', [
  105.             'car' => $vehicle,
  106.             'buyForm' => $this->get('core.form.factory')->buyForm($forms$vehicle->getVehicleEntity(), nullnulltrue)->createView(),
  107.         ]);
  108.     }
  109.     /**
  110.      * @param Request $request
  111.      * @return Response
  112.      * @throws Error
  113.      * @throws Twig_Error_Loader
  114.      * @throws Twig_Error_Runtime
  115.      * @throws Twig_Error_Syntax
  116.      */
  117.     public function winterStorage(Request $request)
  118.     {
  119.         $form $this->get('form.factory')->create(YamahaWinterType::class, null, [
  120.             'servicesType' => ServicesOrderForm::WINTER_STORAGE,
  121.             'locale' => $request->getLocale(),
  122.             'translator' => $this->get('translator'),
  123.             'ga_events' => [
  124.                 'event_category' => 'winter_save',
  125.                 'event_label' => 'bike',
  126.             ]
  127.         ]);
  128.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/winter-storage.html.twig', [
  129.             'callbackForm' => $form->createView(),
  130.         ]);
  131.     }
  132.     /**
  133.      * @param Request $request
  134.      * @return JsonResponse
  135.      * @throws OptimisticLockException
  136.      * @throws NonUniqueResultException
  137.      */
  138.     public function winterStorageForm(Request $request)
  139.     {
  140.         $feedbackEntity = new Forms();
  141.         $feedbackEntity->setDateCreate(new DateTime());
  142.         $feedbackEntity->setType(FormManager::TYPE_SERVICES_ORDER);
  143.         $form $this->get('form.factory')->create(YamahaWinterType::class, $feedbackEntity, [
  144.             'servicesType' => ServicesOrderForm::WINTER_STORAGE,
  145.             'locale' => $request->getLocale(),
  146.             'translator' => $this->get('translator'),
  147.             'ga_events' => [
  148.                 'event_category' => 'winter_save',
  149.                 'event_label' => 'bike',
  150.             ]
  151.         ]);
  152.         $data $request->request->get($form->getName());
  153.         $sToken $token false;
  154.         $captchaData = [];
  155.         if (isset($data['captcha'])) {
  156.             $captcha $data['captcha'];
  157.             $captchaData explode('#'$captcha);
  158.         }
  159.         if ($captchaData && count($captchaData) == 2) {
  160.             $key $captchaData[0];
  161.             $token $captchaData[1];
  162.             $sToken $this->get('session')->get($key);
  163.         }
  164.         if ((!$sToken || $sToken != $token)) {
  165.             return new JsonResponse(['success' => false'error' => 'captcha token']);
  166.         }
  167.         $form->handleRequest($request);
  168.         $isValid $form->isValid();
  169.         if (!$isValid) {
  170.             foreach ($form->getErrors() as $error) {
  171.                 if ($error->getOrigin()->getName() == 'captcha' && count($form->getErrors()) == 1) {
  172.                     $isValid true;
  173.                 }
  174.             }
  175.         }
  176.         if ($form->isSubmitted() && $isValid) {
  177.             $feedbackEntity->setDealer($this->getDealer());
  178.             $this->getDoctrine()->getManager()->persist($feedbackEntity);
  179.             $this->getDoctrine()->getManager()->flush();
  180.             return new JsonResponse(['success' => true]);
  181.         }
  182.         return new JsonResponse(['success' => false'errors' => $this->getErrorsFromForm($form)]);
  183.     }
  184.     public function SaveLeasingForm(Request $request)
  185.     {
  186.         $feedbackEntity = new Forms();
  187.         $feedbackEntity->setDateCreate(new DateTime());
  188.         $feedbackEntity->setType(FormManager::TYPE_SERVICES_ORDER);
  189.         $form $this->get('form.factory')->create(YamahaLeasingType::class, $feedbackEntity, [
  190.             'servicesType' => ServicesOrderForm::LEASING,
  191.             'locale' => $request->getLocale(),
  192.             'translator' => $this->get('translator'),
  193.         ]);
  194.         $data $request->request->get($form->getName());
  195.         $sToken $token false;
  196.         $captchaData = [];
  197.         if (isset($data['captcha'])) {
  198.             $captcha $data['captcha'];
  199.             $captchaData explode('#'$captcha);
  200.         }
  201.         if ($captchaData && count($captchaData) == 2) {
  202.             $key $captchaData[0];
  203.             $token $captchaData[1];
  204.             $sToken $this->get('session')->get($key);
  205.         }
  206.         if ((!$sToken || $sToken != $token)) {
  207.             return new JsonResponse(['success' => false'error' => 'captcha token']);
  208.         }
  209.         $form->handleRequest($request);
  210.         $isValid $form->isValid();
  211.         if (!$isValid) {
  212.             foreach ($form->getErrors() as $error) {
  213.                 if ($error->getOrigin()->getName() == 'captcha' && count($form->getErrors()) == 1) {
  214.                     $isValid true;
  215.                 }
  216.             }
  217.         }
  218.         if ($form->isSubmitted() && $isValid) {
  219.             $feedbackEntity->setDealer($this->getDealer());
  220.             $this->getDoctrine()->getManager()->persist($feedbackEntity);
  221.             $this->getDoctrine()->getManager()->flush();
  222.             return new JsonResponse(['success' => true]);
  223.         }
  224.         return new JsonResponse(['success' => false'errors' => $this->CoreFormFactory()->getErrorsFromForm($form)]);
  225.     }
  226.     /**
  227.      * @param Request $request
  228.      * @return Response
  229.      * @throws Error
  230.      * @throws Twig_Error_Loader
  231.      * @throws Twig_Error_Runtime
  232.      * @throws Twig_Error_Syntax
  233.      * @throws NonUniqueResultException
  234.      */
  235.     public function spareParts(Request $request)
  236.     {
  237.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/spare-parts.html.twig', [
  238.             'findPartForm' => $this->get('core.form.factory')->findPartForm($this->getDealer())->createView(),
  239.         ]);
  240.     }
  241.     public function tradeIn(Request $request)
  242.     {
  243.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/trade-in.html.twig', [
  244.             'vehicleType' => AutoRia::getAutoRiaVehicleType(VehicleType::MOTO_TYPE) ,
  245.             'formType' => FormManager::TYPE_TRADE_IN_FORM
  246.         ]);
  247.     }
  248.     public function tireFitting(Request $request)
  249.     {
  250.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/tire-fitting.html.twig');
  251.     }
  252.     /**
  253.      * Форма оценки качества
  254.      *
  255.      * @return Response
  256.      * @throws Error
  257.      * @throws Twig_Error_Loader
  258.      * @throws Twig_Error_Runtime
  259.      * @throws Twig_Error_Syntax
  260.      */
  261.     public function serviceFeedback()
  262.     {
  263.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/service-feedback.html.twig');
  264.     }
  265.     /**
  266.      * Обработка формы оценки качества
  267.      *
  268.      * @param Request $request
  269.      * @return JsonResponse
  270.      */
  271.     public function SaveQualityControlForm(Request $request)
  272.     {
  273.         $Token $this->get('security.token_storage')->getToken();
  274.         $User $Token && $Token->getUser() != 'anon.' $Token->getUser() : null;
  275.         $qualityControl = new Forms();
  276.         $qualityControl->setUser($User);
  277.         $qualityControl->setDomain($request->getHost());
  278.         $qualityControl->setDateCreate(new DateTime());
  279.         $qualityControl->setType(FormManager::TYPE_QUALITY_CONTROL);
  280.         $qualityControl->setPhone($request->request->get('phone'));
  281.         $qualityControl->setName($User $User->getUsername() : $Token->getUser());
  282.         $qualityControl->setDealer($this->getDealer());
  283.         $data = [
  284.             'comment' => $request->get('comment'),
  285.             'phone' => $request->get('phone'),
  286.             'recommendQuality' => $request->get('recommendQuality'),
  287.             'serviceQuality' => $request->get('serviceQuality'),
  288.             'termsQuality' => $request->get('termsQuality'),
  289.             'costQuality' => $request->get('costQuality'),
  290.         ];
  291.         $qualityControl->setData(json_encode($data));
  292.         try {
  293.             $this->getDoctrine()->getManager()->persist($qualityControl);
  294.             $this->getDoctrine()->getManager()->flush();
  295.         } catch (Exception $e) {
  296.             return new JsonResponse(['success' => false'message' => $e->getMessage()]);
  297.         }
  298.         return new JsonResponse(['success' => true]);
  299.     }
  300.     //see https://ypec-sss.yamaha-motor.co.jp/ypec/ypec/b2c/html5/app/en_GB/parts-search/index.html
  301.     public function searchPart(Request $request)
  302.     {
  303.         $search $request->request->get('searchString');
  304.         $part $this->getDoctrine()
  305.             ->getRepository(\DcSiteBundle\Entity\Part::class)
  306.             ->findOneBy(['dealer' => $this->getDealer(), 'number' => $search]);
  307.         if (!$part) {
  308.             return new JsonResponse(['success' => false]);
  309.         }
  310.         return new JsonResponse(
  311.             [
  312.                 'success' => true,
  313.                 'data' =>
  314.                     [
  315.                         'isInStock' => $part->getCount() > 0,
  316.                         'price' => $part->getPrice(),
  317.                         'id' => $part->getId(),
  318.                         'title' => $part->getNameByLocale($request->getLocale()),
  319.                     ]
  320.             ]
  321.         );
  322.     }
  323.     public function nightServiceAgreement()
  324.     {
  325.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/night-service-agreement.html.twig', [
  326.             'dealer' => $this->getDealer()
  327.         ]);
  328.     }
  329.     // Yamaha Experience
  330.     public function experience()
  331.     {
  332.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/experience.html.twig');
  333.     }
  334.     public function aboutDay(Request $request)
  335.     {
  336.         $dealer $this->getDealer();
  337.        $rentRideVehicle $this->rentVehicleService->getRentRideVehicle($dealer$request->getLocale());
  338.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/about-day.html.twig', [
  339.             'rentRideVehicle' => $rentRideVehicle,
  340.             'sendQuestionForm' => $this->CoreFormFactory()->sendQuestionForm(null$this->getDealer(), null9)->createView(),
  341.         ]);
  342.     }
  343.     public function aboutSchool(Request $request)
  344.     {
  345.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/about-school.html.twig',
  346.         [
  347.             'serviceOrderFormPopUp' => $this->CoreFormFactory()->servicesOrderForm(ServicesOrderForm::MOTO_SCHOOL$request->getLocale())->createView(),
  348.         ]);
  349.     }
  350.     public function aboutTours()
  351.     {
  352.         $dealer $this->getDealer();
  353.         $tourRoutes $this->getDoctrine()->getRepository(\DcSiteBundle\Entity\TourRoutes::class)->findBy(['dealer' => $dealer'state' => true]);
  354.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/about-tours.html.twig', [
  355.             'tourRoutes' => $tourRoutes
  356.         ]);
  357.     }
  358.     public function aboutToursSingle($url)
  359.     {
  360.         $dealer $this->getDealer();
  361.         $tourRoute $this->getDoctrine()->getRepository(\DcSiteBundle\Entity\TourRoutes::class)->findOneBy(['dealer' => $dealer'state' => true'url' => $url]);
  362.         if (!$tourRoute) {
  363.             throw new NotFoundHttpException();
  364.         }
  365.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/about-tour-single.html.twig', [
  366.             'tourRoute' => $tourRoute,
  367.             'sendQuestionForm' => $this->CoreFormFactory()->sendQuestionForm(null$this->getDealer(), null10)->createView(),
  368.         ]);
  369.     }
  370.     public function rental(Request $request)
  371.     {
  372.         $dealer $this->getDealer();
  373.         $rentMotoVehicle $this->rentVehicleService->getRentMotoVehicle($dealer$request->getLocale());
  374.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/yamaha-rental.html.twig', [
  375.             'rentVehicle' => $rentMotoVehicle,
  376.             'sendQuestionForm' => $this->CoreFormFactory()->sendQuestionForm(null$this->getDealer(), null11)->createView(),
  377.         ]);
  378.     }
  379.     public function getAccessoriesUrlByType($vehicle): ?string
  380.     {
  381.         switch ($vehicle->getGroup()->getId()) {
  382.             case 3:
  383.                 $accessoriesUrl 'motorcycles';
  384.                 break;
  385.             case 11:
  386.                 $accessoriesUrl 'scooters';
  387.                 break;
  388.             case 18:
  389.             case 13:
  390.                 $accessoriesUrl 'atv-side-by-side';
  391.                 break;
  392.             case 22:
  393.                 $accessoriesUrl 'marine';
  394.                 break;
  395.             case 47:
  396.                 $accessoriesUrl 'ebikes';
  397.                 break;
  398.             default:
  399.                 $accessoriesUrl null;
  400.         }
  401.         return $accessoriesUrl;
  402.     }
  403.     public function commissionSales()
  404.     {
  405.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/commission-sales.html.twig', [
  406.             'vehicleType' => AutoRia::getAutoRiaVehicleType(VehicleType::MOTO_TYPE) ,
  407.             'formType' => FormManager::TYPE_COMMISSION_TECHNOLOGY
  408.         ]);
  409.     }
  410.     public function buyOut()
  411.     {
  412.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/buy-out.html.twig', [
  413.             'vehicleType' => AutoRia::getAutoRiaVehicleType(VehicleType::MOTO_TYPE) ,
  414.             'formType' => FormManager::TYPE_REDEMPTION
  415.         ]);
  416.     }
  417.     public function manuals()
  418.     {
  419.         return $this->baseYamahaRender('@DcSite/Yamaha/Service/manuals.html.twig', [
  420.             'manuals' => $this->getDoctrine()->getRepository(OperatingManuals::class)->findBy(
  421.                 ['dealer' => 16'state' => 1],
  422.                 ['position' => 'ASC']),
  423.         ]);
  424.     }
  425. }