- <?php
- namespace DcSiteBundle\Controller;
- use CoreBundle\Component\CoreFormFactory;
- use CoreBundle\Component\FormManager;
- use CoreBundle\Entity\Dealer;
- use CoreBundle\Entity\Forms;
- use CoreBundle\Entity\Vehicles\InStock;
- use CoreBundle\Entity\Vehicles\Vehicle;
- use CoreBundle\Factory\Vehicle as VehicleFactory;
- use CoreBundle\Model\Api\OnlineService\ApiServer1C;
- use CoreBundle\Model\Vehicles\Repository;
- use CoreBundle\Services\MediaExtensionVidi;
- use DateTime;
- use DcSiteBundle\Entity\Events;
- use DcSiteBundle\Entity\LeasingCalcLog;
- use Doctrine\ORM\EntityManagerInterface;
- use Exception;
- use MyBundle\Entity\Basket;
- use PortalBundle\Model\SeoMetaTag;
- use Symfony\Component\Filesystem\Filesystem;
- use Symfony\Component\HttpFoundation\JsonResponse;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\HttpFoundation\RequestStack;
- use Symfony\Component\HttpFoundation\Session\SessionInterface;
- use Symfony\Component\Mailer\MailerInterface;
- use Symfony\Component\Mime\Email;
- use Symfony\Component\Routing\RouterInterface;
- use Twig\Environment;
- class FormController extends BaseDcController
- {
-     const INSURANCE_DEALER = 5;
-     const BODY_REPAIR_UNIQUE_ID = 'BODY_SERVICE';
-     public function __construct(CoreFormFactory $coreFormFactory, SeoMetaTag $seoMetaTag, RequestStack $requestStack, RouterInterface $router, FormManager $formManager, EntityManagerInterface $em, ApiServer1C $apiServer1C, SessionInterface $session, Filesystem $filesystem, MediaExtensionVidi $mediaExtensionVidi, Repository $vehicleRepository, VehicleFactory $vehicleFactory, Environment $twig)
-     {
-         parent::__construct($coreFormFactory, $seoMetaTag, $requestStack, $router, $formManager, $em, $apiServer1C, $session, $filesystem, $mediaExtensionVidi, $vehicleRepository, $vehicleFactory, $twig);
-     }
-     public function testDriveForm(Request $request): JsonResponse
-     {
-         return $this->formManager->saveTestDriveForm($request);
-     }
-     public function serviceForm(Request $request): JsonResponse
-     {
-         return $this->formManager->saveServiceForm($request, $this->getDealer());
-     }
-     public function feedBackForm(Request $request): JsonResponse
-     {
-         return $this->formManager->saveFeedbackForm($request, $this->getDealer());
-     }
-     public function extendedWarrantyForm(Request $request): JsonResponse
-     {
-         return $this->formManager->saveExtendedWarrantyForm($request, $this->getDealer());
-     }
-     public function orderCallForm(Request $request): JsonResponse
-     {
-         return $this->formManager->saveCallbackForm($request, $this->getDealer());
-     }
-     public function buyForm(Request $request): JsonResponse
-     {
-         return $this->formManager->saveBuyCarForm($request);
-     }
-     public function buyUsedCar(Request $request): JsonResponse
-     {
-         return $this->formManager->saveBuyUsedCarForm($request);
-     }
-     public function buyInStockForm(Request $request): JsonResponse
-     {
-         $data = $request->request->get('buy_in_stock');
-         $carId = $data['car'] ?? false;
-         $car = $this->em->getRepository(InStock::class)->find($carId);
-         if (!$car) {
-             $car = $this->em->getRepository(Vehicle::class)->find($carId);
-             if ($car && !$car->getIsUsed()) {
-                 $car = null;
-             }
-         }
-         return $this->formManager->saveBuyInStockCarForm($request, $this->getDealer(), $car);
-     }
-     public function captchaInit(Request $request, SessionInterface $session): JsonResponse
-     {
-         $type = $request->request->get('type');
-         $types = $request->request->all('types');
-         if ($type) {
-             $key = md5($type . time());
-             $token = md5('ti_form_key' . time() . 'salt_rs5##%frsgh');
-             $session->set($key, $token);
-             return new JsonResponse(['token' => $key . '#' . $token]);
-         }
-         $result = [];
-         if ($types) {
-             foreach ($types as $type) {
-                 $key = md5($type . time());
-                 $token = md5('ti_form_key' . time() . 'salt_rs5##%frsgh');
-                 $session->set($key, $token);
-                 $result[$type] = $key . '#' . $token;
-             }
-         }
-         return new JsonResponse(['tokens' => $result]);
-     }
-     public function tradeInForm(Request $request): JsonResponse
-     {
-         return $this->formManager->saveTradeInForm($request, $this->getDealer());
-     }
-     public function creditForm(Request $request): JsonResponse
-     {
-         return $this->formManager->saveCreditForm($request, $this->getDealer());
-     }
-     public function buyPartsForm(Request $request): JsonResponse
-     {
-         $dealerId = $request->get('buy_parts')['dealer'];
-         if ($dealerId) {
-             $dealer = $this->em->getRepository(Dealer::class)->find($dealerId);
-         } else {
-             $dealer = $this->getDealer();
-         }
-         return $this->formManager->saveBuyPartsForm($request, $dealer);
-     }
-     public function VacancyForm(Request $request): JsonResponse
-     {
-         $dealerId = $request->get('dealerId');
-         $dealer = null;
-         if ($dealerId) {
-             $dealer = $this->getDealer();
-         }
-         return $this->formManager->saveVacancyForm($request, $dealer);
-     }
-     public function servicesOrderForm(Request $request): JsonResponse
-     {
-         $servicesType = $request->get('services_order')['service_type'];
-         return $this->formManager->saveServiceOrderForm($request, $this->getDealer(), $servicesType);
-     }
-     public function repairCalcSave(Request $request): JsonResponse
-     {
-         $dealer = $this->em->getRepository(Dealer::class)->findOneBy(['unique_id' => self::BODY_REPAIR_UNIQUE_ID]);
-         $Form = new Forms();
-         $parts = $request->request->get('selectedParts');
-         $type = $request->request->get('carType');
-         $Form->setDateCreate(new DateTime());
-         $Form->setDealer($dealer);
-         $Form->setDomain($request->getHost());
-         $Form->setType(FormManager::TYPE_REPAIR_CALC);
-         $Form->setPhone($request->request->get('phone'));
-         $Form->setEmail($request->request->get('email'));
-         $Form->setName($request->request->get('name'));
-         $Form->setData(json_encode([
-             'parts' => $parts,
-             'car_type' => $type,
-             'amount' => $request->request->get('amount'),
-         ]));
-         $this->em->persist($Form);
-         $this->em->flush($Form);
-         return $this->json(['success' => true]);
-     }
-     public function repairPhotoSave(Request $request): JsonResponse
-     {
-         $dealerId = $request->get('dealerId');
-         //TODO remove dealer hard code
-         try {
-             $dealer = $this->getDealer();
-         } catch (Exception $e) {
-             $dealer = $this->em->getRepository(Dealer::class)->findOneBy(['unique_id' => self::BODY_REPAIR_UNIQUE_ID]);
-         }
-         if (!in_array($dealer->getId(), [32, 33])) {
-             $dealer = $this->em->getRepository(Dealer::class)->findOneBy(['unique_id' => self::BODY_REPAIR_UNIQUE_ID]);
-         }
-         return $this->formManager->saveRepairPhoto($request, $dealer);
-     }
-     public function EventForm(Request $request, MailerInterface $mailer): JsonResponse
-     {
-         $id = $request->get('eventId');
-         $email = $request->get('email');
-         $event = $this->em->getRepository(Events::class)->find($id);
-         $message = (new Email())
-             ->subject('kyiv-west.lexus.ua | ' . $event->getName($request->getLocale()))
-             ->from('info@vidi.ua')
-             ->to($email)
-             ->html($this->renderView('@DcSite/Emails/event_to_email.html.twig', ['event' => $event]));
-         if (!$mailer->send($message)) {
-             return $this->json(['success' => false]);
-         }
-         return $this->json(['success' => true]);
-     }
-     public function rentForm(Request $request): JsonResponse
-     {
-         return $this->formManager->saveRentForm($request, $this->getDealer());
-     }
-     public function personalSave(Request $request): JsonResponse
-     {
-         return $this->formManager->savePersonal($request, $this->getDealer());
-     }
-     public function findPartSave(Request $request): JsonResponse
-     {
-         return $this->formManager->saveFindPart($request, $this->getDealer());
-     }
-     public function orderGoodsForm(Request $request): JsonResponse
-     {
-         return $this->formManager->saveOrderGoodsForm($request, $this->getDealer());
-     }
-     public function insuranceExtendSave(Request $request): JsonResponse
-     {
-         try {
-             $dealer = $this->getDealer();
-         } catch (Exception $e) {
-             $dealer = $this->em->getRepository(Dealer::class)->find(self::INSURANCE_DEALER);
-         }
-         return $this->formManager->saveInsuranceExtend($request, $dealer);
-     }
-     public function commissionTechnologySave(Request $request): JsonResponse
-     {
-         return $this->formManager->saveCommissionTechnology($request, $this->getDealer());
-     }
-     public function buySpareParts(Request $request): JsonResponse
-     {
-         return $this->formManager->saveBuySpareParts($request, $this->getDealer());
-     }
-     public function tiresConfigurator(Request $request): JsonResponse
-     {
-         return $this->formManager->saveTiresConfigurator($request, $this->getDealer());
-     }
-     public function corpSales(Request $request): JsonResponse
-     {
-         return $this->formManager->saveCorpSalesForm($request, $this->getDealer());
-     }
-     public function leasingSave(Request $request): JsonResponse
-     {
-         try {
-             $dealer = $this->getDealer();
-         } catch (Exception $e) {
-             $dealer = $this->em->getRepository(Dealer::class)->find(36);
-         }
-         $response = $this->formManager->saveLeasingForm($request, $dealer);
-         $responseData = json_decode($response->getContent(), true);
-         if ($responseData['success']) {
-             $leasing = $request->request->all('leasing');
-             $leasingPhone = $leasing['phone'];
-             $leasingPhone = preg_replace('/\D+/', '', $leasingPhone);
-             $this->em->getRepository(LeasingCalcLog::class)
-                 ->updateFormByPhone($leasingPhone, $responseData['form_id']);
-         }
-         return $response;
-     }
-     public function feadBackForm(Request $request): JsonResponse
-     {
-         return $this->formManager->saveFeedbackForm($request, $this->getDealer());
-     }
-     public function motoTestDrive(Request $request): JsonResponse
-     {
-         return $this->formManager->saveMotoTestDriveForm($request, $this->getDealer());
-     }
-     public function waterTestDrive(Request $request): JsonResponse
-     {
-         $data = $request->request->get('water_test_drive');
-         $vehicle = $data['vehicle'];
-         $vehicle = $this->em->getRepository(Vehicle::class)->find($vehicle);
-         return $this->formManager->saveWaterTestDriveForm($request, $this->getDealer(), $vehicle);
-     }
-     public function OilTOForm(Request $request): JsonResponse
-     {
-         return $this->formManager->saveOilTOForm($request, $this->getDealer());
-     }
-     public function ServiceCampaingCarForm(Request $request): JsonResponse
-     {
-         return $this->formManager->saveServiceCampaingCarForm($request, $this->getDealer());
-     }
-     public function saveDesignForm(Request $request): JsonResponse
-     {
-         $data = $request->request->get('save_design');
-         $vehicle = $data['vehicle'];
-         $vehicle = $this->em->getRepository(Vehicle::class)->find($vehicle);
-         return $this->formManager->saveSaveDesignForm($request, $this->getDealer(), $vehicle);
-     }
-     public function saveSendQuestionForm(Request $request): JsonResponse
-     {
-         return $this->formManager->saveSendQuestionForm($request, $this->getDealer());
-     }
-     public function saveSendCarQuestionForm(Request $request): JsonResponse
-     {
-         $requestData = $request->request->get('send_question', []);
-         $requestData['select_subject_question'] = 8;
-         $request->request->set('send_question', $requestData);
-         return $this->formManager->saveSendQuestionForm($request, $this->getDealer());
-     }
-     public function saveOnlineServiceRegistrationForm(Request $request): JsonResponse
-     {
-         return $this->formManager->saveOnlineServiceRegistrationForm($request, $this->getDealer());
-     }
-     public function saveWithoutPay(Request $request): JsonResponse
-     {
-         if (!$this->getUser()) {
-             return $this->json(['success' => false, 'error' => 'Авторизуйтесь для створення замовлення']);
-         }
-         $Basket = $this->em->getRepository(Basket::class)->findBy(['dealer' => $this->getDealer(), 'user' => $this->getUser(), 'status' => Basket::STATUS_NEW]);
-         if (count($Basket) < 1) {
-             return new JsonResponse(['success' => false, 'error' => 'Кошик пустий']);
-         }
-         foreach ($Basket as $item) {
-             $item->setStatus(Basket::STATUS_WITHOUT_PAYED_PENDING);
-             $item->setUpdatedAt(new DateTime());
-             $this->em->persist($item);
-             $this->em->flush();
-         }
-         return $this->formManager->saveWithoutPayOrderForm($request, $this->getDealer(), $this->getUser());
-     }
-     public function callMeForm(Request $request): JsonResponse
-     {
-         return $this->formManager->saveCallMeForm($request, $request->get('formType') ?? FormManager::TYPE_CREDIT_FORM);
-     }
-     public function callMeFormWithDealers(Request $request): JsonResponse
-     {
-         return $this->formManager->saveCallMeFormWithDealers($request);
-     }
-     public function tiresHotelForm(Request $request): JsonResponse
-     {
-         $dealer = $this->em->getRepository(Dealer::class)->findOneBy(['id' => $request->get('tires_hotel')['dealers']]);
-         return $this->formManager->saveTiresHotelForm($request, $dealer);
-     }
-     public function serviceConsultForm(Request $request): JsonResponse
-     {
-         $dealer = $this->em->getRepository(Dealer::class)->findOneBy(['id' => $request->get('service_consult')['services']]);
-         return $this->formManager->saveServiceConsultForm($request, $request->get('formType') ?? FormManager::TYPE_SERVICE_FORM, $dealer);
-     }
- }
-