src/Controller/RCA/RCAController.php line 199

Open in your IDE?
  1. <?php
  2. namespace App\Controller\RCA;
  3. use App\Controller\BaseController;
  4. use App\Entity\Addressing\Address;
  5. use App\Entity\Addressing\Country;
  6. use App\Entity\Addressing\County;
  7. use App\Entity\Log\LogEmailSending;
  8. use App\Entity\Partner\Partner;
  9. use App\Entity\Vignette\Vignette;
  10. use App\Manager\BitbagStatic\BlockManager;
  11. use App\Entity\Customer\TrackerActivity;
  12. use App\Entity\Order\Order;
  13. use App\Entity\RCA\Availability;
  14. use App\Entity\RCA\FuelType;
  15. use App\Entity\RCA\InsuranceCompany;
  16. use App\Entity\RCA\LeasingCompany;
  17. use App\Entity\RCA\MappedCategory;
  18. use App\Entity\RCA\MappedVehicleMake;
  19. use App\Entity\RCA\MappedVehicleModel;
  20. use App\Entity\RCA\RCA;
  21. use App\Entity\RCA\SubCategory;
  22. use App\Entity\RCA\UsageType;
  23. use App\Entity\RCA\VehicleType;
  24. use App\Entity\RoadAssistance\RoadAssistance;
  25. use App\Manager\Cart\CartManager;
  26. use App\Manager\Customer\VehicleManager;
  27. use App\Manager\HuVignette\HuVignetteManager;
  28. use App\Manager\Partner\PartnerManager;
  29. use App\Manager\Rca\HistoryRcaManager;
  30. use App\Manager\Rca\InsuranceCompanyManager;
  31. use App\Manager\Rca\RcaManager;
  32. use App\Manager\Rca\RcaOfferManager;
  33. use App\Manager\Rca\RcaOfferV2Manager;
  34. use App\Manager\RoadAssistance\RoadAssistanceManager;
  35. use App\Model\ShopUserModel;
  36. use App\Model\VignetteCategoryModel;
  37. use App\Service\AddressService;
  38. use App\Service\AuthTokenService;
  39. use App\Service\CustomerService;
  40. use App\Service\EmailService;
  41. use App\Service\Log\LogEmailSendingService;
  42. use App\Service\LogService;
  43. use App\Service\RCAService;
  44. use App\Service\ReCaptcha;
  45. use App\Service\StaticPagesBitbagService;
  46. use App\Service\SystemService;
  47. use App\Validator\RCAVehicleDetailsFormValidator;
  48. use Symfony\Component\HttpFoundation\JsonResponse;
  49. use Symfony\Component\HttpFoundation\Request;
  50. use Symfony\Component\HttpFoundation\Response;
  51. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  52. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  53. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  54. use Symfony\Component\Serializer\Serializer;
  55. use Symfony\Contracts\Translation\TranslatorInterface;
  56. class RCAController extends BaseController
  57. {
  58.     public function getVehicleDetails(Request $request)
  59.     {
  60.         $reCaptcha = new ReCaptcha($_ENV['RECAPTCHA_INVISIBLE_SECRET']);
  61.         $response json_encode(array('error' => 1));
  62.         if ($reCaptcha->verify($request->get('token'), $request->getClientIp())->isSuccess()) {
  63.             $result null;
  64.             $partnerLimitless false;
  65.             $customer CustomerService::retrieveCustomerFromShopUser($this->getUser());
  66.             $hashService $this->getContainer()->get('app.service.security.hash_generator');
  67.             $partnerPublicToken $request->get(PartnerManager::SESSION_PARTNER_PUBLIC_TOKEN_NAME);
  68.             $partnerService =  $this->getContainer()->get('app.service.partner.partner');
  69.             $partner $this->getEntityManager()->getRepository(Partner::class)
  70.                 ->findOneBy(array('publicToken' => $partnerPublicToken));
  71.             if ($hashService->isEncryptedValueValid($request->get('hash'))) {
  72.                 $vehicleRetrieverRestrictionService $this->getContainer()->get('app.service.vehicle_restriction');
  73.                 $apiVehicleDataService $this->getContainer()->get('app.service.api_vehicle_data');
  74.                 if ($savedCar $vehicleRetrieverRestrictionService->getSavedRcaCar()) {
  75.                     return new Response($savedCar);
  76.                 }
  77.                 $serializer $this->getContainer()->get('serializer');
  78.                 if ($partner && $partnerService->checkPartnerAccessRights($partner)) {
  79.                     $partnerLimitless $partner->hasAutocompleteLimitless();
  80.                 }
  81.                 if ($vehicleRetrieverRestrictionService->checkUserForRcaCarService($this->getUser(), $serializer) || $partnerLimitless) {
  82.                     if ($vehicleId $request->get('vehicleId')) {
  83.                         if (VehicleManager::checkIfVehicleIsEligibleForRcaByVehicleId($vehicleId$this->getEntityManager())) {
  84.                             $result $apiVehicleDataService->findVehicleInDatabaseAndFormatDataForUI($vehicleId);
  85.                         } else {
  86.                             $vehicleData VehicleManager::getRegistrationPlateAndVinByVehicleId($vehicleId$this->getEntityManager());
  87.                             $request->request->set('registrationPlate'$vehicleData['registrationPlate']);
  88.                             $request->request->set('vin'$vehicleData['vin']);
  89.                         }
  90.                     }
  91.                     if (!$result) {
  92.                         $result $apiVehicleDataService->findVehicleDetails($request->get('registrationPlate'), $request->get('vin'));
  93.                         $vehicleRetrieverRestrictionService->logNewEntryForRcaCarService();
  94.                         if ($partnerLimitless) {
  95.                             PartnerManager::updateRemainingAutocompleteLimit($partner$this->getEntityManager());
  96.                         }
  97.                         if ($result) {
  98.                             $response RCAService::retrieveCustomerDataByVehicleDetailIfAvailable($result$this->getEntityManager());
  99.                             $vehicleRetrieverRestrictionService->saveRcaCar($response);
  100.                         } else {
  101.                             $response json_encode(array('status' => 'Nu a fost gasit(a).'));
  102.                         }
  103.                     }
  104.                 } else {
  105.                     $response json_encode(array('limitReached' => true));
  106.                 }
  107.             }
  108.             $rcaTrackerActivityService $this->getContainer()->get('app.service.rca.tracker_activity');
  109.             $rcaTrackerActivityService->setVehicleDetailsSearched($customer$response);
  110.         }
  111.         return new Response($response);
  112.     }
  113.     public function getVehicleDetailsByVin(Request $request)
  114.     {
  115.         $reCaptcha = new ReCaptcha($_ENV['RECAPTCHA_INVISIBLE_SECRET']);
  116.         $response json_encode(array('error' => 1));
  117.         if ($reCaptcha->verify($request->get('token'), $request->getClientIp())->isSuccess()) {
  118.             $result null;
  119.             $partnerLimitless false;
  120.             $customer CustomerService::retrieveCustomerFromShopUser($this->getUser());
  121.             $hashService $this->getContainer()->get('app.service.security.hash_generator');
  122.             $partnerPublicToken $request->get('partnerPublicToken');
  123.             $partnerService =  $this->getContainer()->get('app.service.partner.partner');
  124.             $partner $this->getEntityManager()->getRepository(Partner::class)
  125.                 ->findOneBy(array('publicToken' => $partnerPublicToken));
  126.             if ($hashService->isEncryptedValueValid($request->get('hash'))) {
  127.                 $vehicleRetrieverRestrictionService $this->getContainer()->get('app.service.vehicle_restriction');
  128.                 $apiVehicleDataService $this->getContainer()->get('app.service.api_vehicle_data');
  129.                 $serializer $this->getContainer()->get('serializer');
  130.                 if ($partner && $partnerService->checkPartnerAccessRights($partner)) {
  131.                     $partnerLimitless $partner->hasAutocompleteLimitless();
  132.                 }
  133.                 if ($vehicleRetrieverRestrictionService->checkUserForRcaCarService($this->getUser(), $serializer) || $partnerLimitless) {
  134.                     if (!$result) {
  135.                         $result $apiVehicleDataService->findVehicleDetailsWsByVin($request->get('registrationPlate'), $request->get('vin'));
  136.                         $vehicleRetrieverRestrictionService->logNewEntryForRcaCarService();
  137.                         if ($partnerLimitless) {
  138.                             PartnerManager::updateRemainingAutocompleteLimit($partner$this->getEntityManager());
  139.                         }
  140.                         if ($result) {
  141.                             $response RCAService::retrieveCustomerDataByVehicleDetailIfAvailable($result$this->getEntityManager());
  142.                             $vehicleRetrieverRestrictionService->saveRcaCar($response);
  143.                         } else {
  144.                             $response json_encode(array('status' => 'Nu a fost gasit(a).'));
  145.                         }
  146.                     }
  147.                 } else {
  148.                     $response json_encode(array('limitReached' => true));
  149.                 }
  150.             }
  151.             $rcaTrackerActivityService $this->getContainer()->get('app.service.rca.tracker_activity');
  152.             $rcaTrackerActivityService->setVehicleDetailsSearched($customer$response);
  153.         }
  154.         return new Response($response);
  155.     }
  156.     public function detailsAction(Request $requestTranslatorInterface $translator)
  157.     {
  158.         $rcaData = [];
  159.         $historyRca = [];
  160.         $customer CustomerService::retrieveCustomerFromShopUser($this->getUser());
  161.         $trackerActivityService $this->getContainer()->get('app.service.customer.tracker_activity');
  162.         $trackerActivityService->startTracking($customer);
  163.         $vignetteCategories = (new VignetteCategoryModel($this->getEntityManager()))->getAllCategories();
  164.         $render '@templates/RcaApp/Front/homepage.html.twig';
  165.         if ($this->isMobile) {
  166.             $render '@templates/RcaApp/Mobile/homepage.html.twig';
  167.         }
  168.         $request->getSession()->remove('iframeSourceLink');
  169.         $leasingCompanies $this->getDoctrine()
  170.             ->getRepository(LeasingCompany::class)->findAll();
  171.         $country $this->getDoctrine()->getRepository(Country::class)->findOneBy(array('code' => 'RO'));
  172.         $roadAssistanceService $this->getContainer()->get('app.service.road_assistance.road_assistance');
  173.         if ($request->get('modalVehicleId') && $customer) {
  174.             $rcaData RCAService::retrieveRcaDataByModalVehicleId($customer$request$this->getEntityManager());
  175.             $request->getSession()->remove('rcaVehicle');
  176.             $request->getSession()->remove('rcaCustomerData');
  177.         } else {
  178.             $historyRca HistoryRcaManager::validateHistoryRca($request->getSession()->get('historyRca'));
  179.             RCAService::checkRcaSession($request);
  180.         }
  181.         $hashGeneratorService $this->getContainer()->get('app.service.security.hash_generator');
  182.         return $this->render($render, [
  183.             'vignetteCategories' => $vignetteCategories,
  184.             'isOneYearHuVignetteAvailableThisYear' => new \DateTime <= new \DateTime(HuVignetteManager::LAST_DATE_FOR_ONE_YEAR_HU_VIGNETTE_AVAILABILITY '-' date('Y')),
  185.             'customerVehicleOrderByOptions' => VehicleManager::getCustomerVehicleOrderByOptions(),
  186.             'customerVehicleSearchByFields' => VehicleManager::getCustomerVehicleSearchByFields(),
  187.             'historyRca' => $historyRca ?: [],
  188.             'countyList' => $this->getDoctrine()->getRepository(County::class)->findAllCountiesByCountryAsArray($country),
  189.             'vehicleTypeList' => $this->getDoctrine()->getRepository(VehicleType::class)->findAllAsArrayForUI(),
  190.             'rcaMappedCategoryList' => $this->getDoctrine()->getRepository(MappedCategory::class)->findAllAsArray(),
  191.             'defaultMakeList' => $this->getDoctrine()->getRepository(MappedVehicleMake::class)->findByVehicleMappedCategoryAsArray(MappedCategory::MAPPED_CATEGORY_VEHICLE),
  192.             'availabilityList' => $this->getDoctrine()->getRepository(Availability::class)->findAllAsArray(),
  193.             'availabilityIntervalList' => RcaManager::getAvailabilityIntervalList(),
  194.             'insuranceCompanyList' => $this->getDoctrine()->getRepository(InsuranceCompany::class)->findAllOnlyNameOrderedByPositionAsArray(),
  195.             'fuelTypeList' => $this->getDoctrine()->getRepository(FuelType::class)->findAllAsArray(),
  196.             'usageTypeList' => $this->getDoctrine()->getRepository(UsageType::class)->findAllAsArray(),
  197.             'leasingCompanyList' => $this->getDoctrine()->getRepository(LeasingCompany::class)->findAllAsArray(),
  198.             'leasingCompanies' => $leasingCompanies,
  199.             'step' => $request->get('step'),
  200.             'haveOldVehicleValues' => (bool)$request->getSession()->get('rcaVehicle'),
  201.             'haveOldCustomerValues' => (bool)$request->getSession()->get('rcaCustomerData'),
  202.             'isAdmin' => ShopUserModel::checkIfUserIsAdmin($this->getUser(), $this->getEntityManager()),
  203.             'accordionBlocksAboutRca' => StaticPagesBitbagService::getAllFilteredBlocksAsArray($this->getEntityManager(), BlockManager::BLOCK_ACCORDION_TEXT_RCA_CODE_PATTERN),
  204.             'keywordsForSeo' => StaticPagesBitbagService::getFirstFilteredBlocks($this->getEntityManager(), BlockManager::BLOCK_SEO_META_RCA_KEYWORD_CODE_PATTERN),
  205.             'descriptionForSeo' => StaticPagesBitbagService::getFirstFilteredBlocks($this->getEntityManager(), BlockManager::BLOCK_SEO_META_RCA_DESCRIPTION_CODE_PATTERN),
  206.             'roadAssistanceDefaultPrice' => $roadAssistanceService->retrieveDefaultPrice(),
  207.             'roadAssistanceTranslations' => RoadAssistanceManager::getTranslationsForUI($translator),
  208.             'hash' => $hashGeneratorService->getHash(),
  209.             'recaptchaSiteKey' => $_ENV['RECAPTCHA_INVISIBLE_KEY'],
  210.             'oldVehicle' => $rcaData $rcaData['oldVehicle'] : $request->get('oldVehicle'),
  211.             'oldCustomer' => $rcaData $rcaData['oldCustomer'] : $request->get('oldCustomer'),
  212.             'oldOffer' => $rcaData $rcaData['oldOffer'] : $request->get('oldOffer'),
  213.             'canIssueRoadAssistance' => true,
  214.         ]);
  215.     }
  216.     public function vehicleDetailsAction(Request $request)
  217.     {
  218.         return $this->redirectToRoute('app_shop_rca_details');
  219.     }
  220.     public function vehicleDetailsFormSubmitAction(Request $requestTranslatorInterface $translator): Response
  221.     {
  222.         $errors null;
  223.         $session $request->getSession();
  224.         $isMobile false;
  225.         if ($request->request->has('isMobile')) {
  226.             $isMobile $request->get('isMobile') == 'true';
  227.         }
  228.         $rcaVehicleDetailsFormValidator = new RCAVehicleDetailsFormValidator($this->getEntityManager(), $this->getSerializer(), $isMobile);
  229.         if ($rcaVehicleDetailsFormValidator->checkForm($request)) {
  230.             if ($request->get('vehicleType') != VehicleType::VEHICLE_REGISTRATION_TYPE_FOR_REGISTRATION) {
  231.                 $request->request->set('registrationPlate'RCAService::validateAndFormatRegistrationPlate($request->get('registrationPlate')));
  232.             }
  233.             $rcaAlreadyActive RCAService::checkRcaAvailability($request$this->getEntityManager());
  234.             if (!$rcaAlreadyActive) {
  235.                 $errors json_encode(array('success' => true));
  236.                 if (RoadAssistanceManager::isVehicleEligibleForRoadAssistance($request->request->all(), true)
  237.                     && !RoadAssistanceManager::haveAnActiveRoadAssistanceForRegistrationPlate($request$this->getEntityManager())) {
  238.                     $roadAssistanceService $this->getContainer()->get('app.service.road_assistance.road_assistance');
  239.                     $roadAssistanceResponse $roadAssistanceService->storeNewRoadAssistanceInCart(RoadAssistance::FLAG_SOURCE_EXTRA_OPTIONtrue);
  240.                     if (!$roadAssistanceResponse['success']) {
  241.                         if ($roadAssistanceResponse['errorCode']) {
  242.                             $this->addFlash('error'SystemService::retrieveMessage($roadAssistanceResponse['errorCode'], $translator));
  243.                         }
  244.                     }
  245.                 }
  246.             } else {
  247.                 $errors json_encode(array('already_an_active_rca' => 1'active_rca_valid_until' => $rcaAlreadyActive));
  248.             }
  249.         } else {
  250.             if ($session->has('rcaVehicleDetailsErrors')) {
  251.                 $errors $session->get('rcaVehicleDetailsErrors');
  252.             }
  253.         }
  254.         $customer CustomerService::retrieveCustomerFromShopUser($this->getUser());
  255.         $rcaTrackerActivityService $this->getContainer()->get('app.service.rca.tracker_activity');
  256.         $rcaTrackerActivityService->setVehicleDetailsSubmitted($customer$errors);
  257.         return new Response($errors);
  258.     }
  259.     public function getVehicleSubCategoryByCategoryAction(Request $request): Response
  260.     {
  261.         $vehicleSubCategoryRepository $this->getDoctrine()->getRepository(SubCategory::class);
  262.         $vehicleCategoryId $request->get('vehicleCategoryId');
  263.         $vehicleSubCategory null;
  264.         if ($vehicleCategoryId != null) {
  265.             $encoders = [new JsonEncoder()];
  266.             $normalizers = [new ObjectNormalizer()];
  267.             $serializer = new Serializer($normalizers$encoders);
  268.             $vehicleSubCategory $vehicleSubCategoryRepository->findByCategoryId($vehicleCategoryId);
  269.             $vehicleSubCategory $serializer->serialize($vehicleSubCategory'json', [
  270.                 'circular_reference_handler' => function ($object) {
  271.                     return $object->getId();
  272.                 }
  273.             ]);
  274.         }
  275.         return new Response($vehicleSubCategory200, ['Content-Type' => 'application/json']);
  276.     }
  277.     /**
  278.      * @param Request $request
  279.      * @return Response
  280.      */
  281.     public function issueRcaManually(Request $request): Response
  282.     {
  283.         $response json_encode('fail');
  284.         $rcaId $request->get('rca') ?? $request->get('rcaId');
  285.         if ($rcaId) {
  286.             $rcaItem $this->getEntityManager()->getRepository(RCA::class)->find($rcaId);
  287.             if ($rcaItem) {
  288.                 $rcaIssueService $this->getContainer()->get('app.rca.issue.service');
  289.                 if ($rcaIssueService->issueRcaItem($rcaItem)) {
  290.                     if ($rcaIssueService->sendRcaToCustomer($rcaItem$this->getContainer())) {
  291.                         $response json_encode('success');
  292.                     }
  293.                 }
  294.             }
  295.         }
  296.         return new Response($response);
  297.     }
  298.     /**
  299.      * @param Request $request
  300.      * @return Response
  301.      */
  302.     public function deactivateRca(Request $request): Response
  303.     {
  304.         $response = [
  305.             'status' => 'fail',
  306.             'message' => 'A apărut o eroare neprevăzută.'
  307.         ];
  308.         $rcaId $request->get('rcaId');
  309.         $userId $request->get('userId') ?? 0;
  310.         if ($rcaId) {
  311.             $rcaItem $this->getEntityManager()->getRepository(RCA::class)->find($rcaId);
  312.             if ($rcaItem) {
  313.                 $result RCAService::deactivateRcaAndCustomerVehicleRcaValidUntil($rcaItem$userId$this->getEntityManager());
  314.                 if ($result['status']) {
  315.                     $response['status'] = 'success';
  316.                     $response['message'] = $result['message'];
  317.                 } else {
  318.                     $response['message'] = $result['message'];
  319.                 }
  320.             } else {
  321.                 $response['message'] = 'PoliÈ›a nu a fost gasita';
  322.             }
  323.         }
  324.         return new Response(json_encode($response));
  325.     }
  326.     public function offerAction(Request $request)
  327.     {
  328.         $session $request->getSession();
  329.         $session->remove('rcaOffers');
  330.         $session->remove('rcaOfferParams');
  331.         $render '@templates/Front/rca-offers.html.twig';
  332.         if ($this->isMobile) {
  333.             $render '@templates/Mobile/rca-offers.html.twig';
  334.         }
  335.         $availabilityId InsuranceCompanyManager::retrieveAvailabilityIdFromSession($request->getSession(), $this->getEntityManager());
  336.         $insuranceCompanies InsuranceCompanyManager::getAllActiveInsuranceCompaniesForSelection($this->getEntityManager(), $availabilityId);
  337.         return $this->render($render, [
  338.             'isAdmin' => ShopUserModel::checkIfUserIsAdmin($this->getUser(), $this->getEntityManager()),
  339.             'insuranceCompanies' => $insuranceCompanies
  340.         ]);
  341.     }
  342.     public function retrieveInsuranceCompanies()
  343.     {
  344.         return new Response(json_encode($this->getDoctrine()
  345.             ->getRepository(InsuranceCompany::class)->findAllOnlyNameOrderedByPosition()));
  346.     }
  347.     public function retrieveActiveInsuranceCompanies(Request $request)
  348.     {
  349.         return new Response(json_encode(InsuranceCompanyManager::getAllActiveInsuranceCompaniesForSelection($this->getEntityManager(), $request->get('availabilityId'))));
  350.     }
  351.     public function getOffers(Request $request)
  352.     {
  353.         $insuranceCompany $request->get('insuranceCompany');
  354.         $result json_encode(array('fail' => true));
  355.         if ($insuranceCompany) {
  356.             $session $request->getSession();
  357.             $offers = new \stdClass();
  358.             if ($session->has('rcaOffers')) {
  359.                 $offers json_decode($session->get('rcaOffers'));
  360.             }
  361.             $findOffer true;
  362.             if (!empty($offers)) {
  363.                 foreach ($offers as $key => $offer) {
  364.                     if ($key == $insuranceCompany) {
  365.                         $findOffer false;
  366.                     }
  367.                 }
  368.             }
  369.             if ($findOffer) {
  370.                 $rcaIssueService $this->getContainer()->get('app.rca.issue.service');
  371.                 if ($session->has('rcaOfferParams')) {
  372.                     $params $session->get('rcaOfferParams');
  373.                 } else {
  374.                     $params $rcaIssueService->setParamsForOffers($request$insuranceCompany);
  375.                     $session->set('rcaOfferParams'$params);
  376.                 }
  377.                 $offerWithDeductedPrice $rcaIssueService
  378.                     ->getOfferWithDeductedPriceByInsuranceCompanyName($params$insuranceCompany$request->request->all());
  379.                 $offerWithoutDeductedPrice $rcaIssueService
  380.                     ->getOfferWithoutDeductedPriceByInsuranceCompanyName($params$insuranceCompany$request->request->all());
  381.                 $offers->$insuranceCompany = array('offerWithDeductedPrice' => $offerWithDeductedPrice,
  382.                     'offerWithoutDeductedPrice' => $offerWithoutDeductedPrice);
  383.                 $session->set('rcaOffers'json_encode($offers));
  384.                 $result json_encode(array('offerWithDeductedPrice' => $offerWithDeductedPrice,
  385.                     'offerWithoutDeductedPrice' => $offerWithoutDeductedPrice));
  386.             } else {
  387.                 $result json_encode(array('offerWithDeductedPrice' => $offers->$insuranceCompany->offerWithDeductedPrice,
  388.                     'offerWithoutDeductedPrice' => $offers->$insuranceCompany->offerWithoutDeductedPrice));
  389.             }
  390.             LogService::checkRcaOfferErrorAndStoreItIfNew($result$this->getEntityManager(), $request$this->getUser(), $params);
  391.         }
  392.         return new Response($result);
  393.     }
  394.     public function getOfferWithVue(Request $request)
  395.     {
  396.         $offers = array();
  397.         $data $request->request->all();
  398.         $insuranceCompany $data['insuranceCompany'];
  399.         $quotationType $data['quotationType'];
  400.         $offersRequestUuid $data['offersRequestUuid'];
  401.         $quotationTypeName RcaOfferManager::getQuotationTypeNameById($quotationType);
  402.         $rcaIssueService $this->getContainer()->get('app.rca.issue.service');
  403.         $data['comision'] = $rcaIssueService->setDiscountCommission($request);
  404.         $data['vehicle']['validFrom'] = RcaOfferManager::checkVehicleValidFromData($data['vehicle']['validFrom']);
  405.         $firstAvailability $data['availabilityInterval'] != RcaManager::RCA_AVAILABILITY_OTHER_INTERVAL_VALUE ?
  406.             RcaManager::getFirstAvailabilityValueOfAvailabilityInterval($data['availabilityInterval']) : $data['vehicle']['availability'];
  407.         $params $rcaIssueService->setParamsForOffersWithVue($data);
  408.         if ($rcaIssueService->isOfferEnabledForInsuranceCompanyAndSelectedAvailability($insuranceCompany['id'], $firstAvailability)) {
  409.             $params['product']['motor']['termTime'] = $firstAvailability;
  410.             $offer $rcaIssueService->getOfferByInsuranceCompanyName($params$insuranceCompany$data);
  411.             $result json_encode(array($quotationTypeName => $offer));
  412.             LogService::checkRcaOfferErrorAndStoreItIfNew($result$this->getEntityManager(), $request$this->getUser(), $params$firstAvailability$offersRequestUuid);
  413.             $offers[$firstAvailability][$quotationTypeName]
  414.                 = RcaOfferV2Manager::formatWsOfferResponse($offer, (bool)$quotationType);
  415.         } else {
  416.             $offers[$firstAvailability][$quotationTypeName]
  417.                 = RcaOfferManager::getUnavailableMessageForInsuranceCompanyAndSelectedAvailability($insuranceCompany['name'], $firstAvailability);
  418.         }
  419.         //get Second interval as well if requested
  420.         if ($data['availabilityInterval'] != RcaManager::RCA_AVAILABILITY_OTHER_INTERVAL_VALUE) {
  421.             $secondAvailability RcaManager::getSecondAvailabilityValueOfAvailabilityInterval($data['availabilityInterval']);
  422.             $params['product']['motor']['termTime'] = $secondAvailability;
  423.             if ($rcaIssueService->isOfferEnabledForInsuranceCompanyAndSelectedAvailability($insuranceCompany['id'], $secondAvailability)) {
  424.                     $offer $rcaIssueService->getOfferByInsuranceCompanyName($params$insuranceCompany$data) ;
  425.                     $result json_encode(array($quotationTypeName => $offer));
  426.                     LogService::checkRcaOfferErrorAndStoreItIfNew($result$this->getEntityManager(), $request$this->getUser(), $params$secondAvailability$offersRequestUuid);
  427.                     $offers[$secondAvailability][$quotationTypeName]
  428.                         = RcaOfferV2Manager::formatWsOfferResponse($offer, (bool)$quotationType);
  429.             } else {
  430.                 $offers[$secondAvailability][$quotationTypeName]
  431.                     = RcaOfferManager::getUnavailableMessageForInsuranceCompanyAndSelectedAvailability($insuranceCompany['name'], $secondAvailability);
  432.             }
  433.         }
  434.         $customer CustomerService::retrieveCustomerFromShopUser($this->getUser());
  435.         $rcaTrackerActivityService $this->getContainer()->get('app.service.rca.tracker_activity');
  436.         $paramsAsArray json_decode(json_encode($params), true);
  437.         $rcaTrackerActivityService->setOffers($customer$paramsAsArray$offers);
  438.         return new Response(json_encode($offers));
  439.     }
  440.     public function initLogMappingWithVue(Request $request) {
  441.         $data $request->request->all();
  442.         $data['insuranceCompany']['name'] = RCA::INSURANCE_COMPANY_GRAWE_NAME;
  443.         $data['comision'] = 0;
  444.         $firstAvailability $data['availabilityInterval'] != RcaManager::RCA_AVAILABILITY_OTHER_INTERVAL_VALUE ?
  445.             RcaManager::getFirstAvailabilityValueOfAvailabilityInterval($data['availabilityInterval']) : $data['vehicle']['availability'];
  446.         $secondAvailability $data['availabilityInterval'] != RcaManager::RCA_AVAILABILITY_OTHER_INTERVAL_VALUE ?
  447.             RcaManager::getSecondAvailabilityValueOfAvailabilityInterval($data['availabilityInterval']) : $data['vehicle']['availability'];
  448.         $offersRequestUuid $data['offersRequestUuid'];
  449.         $rcaIssueService $this->getContainer()->get('app.rca.issue.service');
  450.         $params $rcaIssueService->setParamsForOffersWithVue($data);
  451.         LogService::initLogMapping($this->getEntityManager(), $request$this->getUser(), $params$firstAvailability$offersRequestUuid);
  452.         LogService::initLogMapping($this->getEntityManager(), $request$this->getUser(), $params$secondAvailability$offersRequestUuid);
  453.         return new Response(json_encode(array('status' => 'success')));
  454.     }
  455.     public function getCountyFromRegistrationPlate(Request $request)
  456.     {
  457.         $data $request->request->all();
  458.         if(!empty($data['code'])) {
  459.             $county $this->getDoctrine()->getRepository(County::class)->findByCode($data['code']);
  460.             $countyName $county->getName();
  461.         }
  462.         if(!empty($countyName)) {
  463.             return new Response(json_encode(array('status' => 'success''county_name' => $countyName)));
  464.         }
  465.         return new Response(json_encode(array('status' => 'fail')));
  466.     }
  467.     public function offerSubmitAction(Request $request)
  468.     {
  469.         $response RCAService::retrieveSelectedOfferItemAndStoreIt($request);
  470.         $customer CustomerService::retrieveCustomerFromShopUser($this->getUser());
  471.         $rcaTrackerActivityService $this->getContainer()->get('app.service.rca.tracker_activity');
  472.         $rcaTrackerActivityService->setOfferSubmitted($customer, ['is_stored' => $response]);
  473.         return new Response(json_encode(array('isStored' => $response)));
  474.     }
  475.     public function removeRcaFromCart(Request $request)
  476.     {
  477.         $response json_encode(array('status' => 'fail'));
  478.         $key $request->get('key');
  479.         $session $request->getSession();
  480.         if ($rcaGlobalOrder CartManager::getCartData($session'rcaGlobalOrder')) {
  481.             foreach ($rcaGlobalOrder as $indexKey => $rca) {
  482.                 if ($key == $indexKey) {
  483.                     RoadAssistanceManager::removeRoadAssistanceFromRca($rca$session);
  484.                     unset($rcaGlobalOrder[$key]);
  485.                 }
  486.             }
  487.             $rcaGlobalOrder array_values($rcaGlobalOrder);
  488.             CartManager::setToCart($session'rcaGlobalOrder'$rcaGlobalOrder);
  489.             $response json_encode(array('status' => 'success'));
  490.         }
  491.         return new Response($response);
  492.     }
  493.     public function setCustomerDataAction(Request $request)
  494.     {
  495.         $params $request->request->all();
  496.         $rcaService = new RCAService();
  497.         $validations $rcaService->identifyRcaTypeAndValidateVueData($params);
  498.         $customer CustomerService::retrieveCustomerFromShopUser($this->getUser());
  499.         $rcaTrackerActivityService $this->getContainer()->get('app.service.rca.tracker_activity');
  500.         $rcaTrackerActivityService->setCustomerDetailsSubmitted($customer$validations->getContent());
  501.         return new Response($validations->getContent());
  502.     }
  503.     public function replaceDiacriticsCustomerDataAction(Request $request)
  504.     {
  505.         $params $request->request->all();
  506.         $response RcaManager::replaceDiacriticsCustomerForm($params);
  507.         return new Response(json_encode($response));
  508.     }
  509.     public function showRcaAction(Request $request)
  510.     {
  511.         $id $request->get('id');
  512.         $order $this->getDoctrine()->getRepository(Order::class)->find($id);
  513.         if ($order->hasRca()) {
  514.             $rca $order->getRca();
  515.             foreach ($rca as $rcaItem) {
  516.                 if ($rcaItem && $rcaItem->getWsOfferId() && $rcaItem->getSeries()) {
  517.                     $rcaApiService $this->getContainer()->get('app.rca.issue.service');
  518.                     $pdf $rcaApiService->getPdf($rcaItem->getWsOfferId(), $rcaItem->getWsPolicyId());
  519.                     $pdf base64_decode($pdf);
  520.                     header('Content-Type: application/pdf');
  521.                     echo $pdf;
  522.                     die();
  523.                 }
  524.             }
  525.         }
  526.         echo "<script>window.close();</script>";
  527.         return new Response('success');
  528.     }
  529.     public function getVehicleMakeByCategoryAction(Request $request): Response
  530.     {
  531.         $vehicleMakeRepository $this->getDoctrine()->getRepository(MappedVehicleMake::class);
  532.         $vehicleCategoryId $request->get('vehicleCategoryId');
  533.         $vehicleMake null;
  534.         if ($vehicleCategoryId != null) {
  535.             $vehicleMake $vehicleMakeRepository->findByVehicleMappedCategoryAsArray($vehicleCategoryId);
  536.         }
  537.         return new Response(json_encode($vehicleMake));
  538.     }
  539.     public function getVehicleModelsByMakeAction(Request $request): Response
  540.     {
  541.         $vehicleModelsRepository $this->getDoctrine()->getRepository(MappedVehicleModel::class);
  542.         $vehicleMakeId $request->get('vehicleMakeId');
  543.         $vehicleModel null;
  544.         if ($vehicleMakeId) {
  545.             $vehicleModel $vehicleModelsRepository->findByMakeIdAsArray($vehicleMakeId);
  546.         }
  547.         return new Response(json_encode($vehicleModel));
  548.     }
  549.     public function autoLoginRcaClient(Request $request)
  550.     {
  551.         $redirect $this->generateUrl('sylius_shop_homepage');
  552.         RCAService::removeRcaProcessSession($request);
  553.         $authTokenService = new AuthTokenService();
  554.         if ($token $authTokenService->authenticateUserWithToken($request$this->getEntityManager())) {
  555.             $registrationNumber $request->get('registrationNumber');
  556.             $this->get('security.token_storage')->setToken($token);
  557.             $event = new InteractiveLoginEvent($request$token);
  558.             $this->dispatcher->dispatch($event'security.interactive_login');
  559.             $session $request->getSession();
  560.             $session->set('_sylius.cart.FASHION_WEB'180);
  561.             $session->save();
  562.             $customer CustomerService::retrieveCustomerFromShopUser($this->getUser());
  563.             $commercialNotificationService $this->getContainer()->get('app.service.customer.commercial_notification');
  564.             $commercialNotificationService->markCustomerAsDoubleOptin($customer$request->getClientIp());
  565.             $params $request->query->all();
  566.             $params RcaManager::formatUrlParams($params);
  567.             $params['from'] = TrackerActivity::FROM_COMMERCIAL_NOTIFICATION;
  568.             $params['step'] = TrackerActivity::STEP_VEHICLE;
  569.             $validFrom RcaManager::getValidFromForAutologin($request->get('validUntil'));
  570.             $params['validFrom'] = $validFrom;
  571.             $redirect $this->generateUrl('app_shop_rca_details'$params);
  572.         }
  573.         return $this->render('@templates/ShopCustom/Redirect/wait_to_be_redirected.html.twig',[
  574.             'url' => $redirect,
  575.         ]);
  576.     }
  577.     public function checkRcaAvailabilityAction(Request $request)
  578.     {
  579.         if ($rcaAlreadyActive RCAService::checkRcaAvailability($request$this->getEntityManager())) {
  580.             $response json_encode(array('already_an_active_rca' => 1'active_rca_valid_until' => $rcaAlreadyActive));
  581.         } else {
  582.             $response json_encode(array('already_an_active_rca' => 0));
  583.         }
  584.         return new Response($response);
  585.     }
  586.     public function retrieveCustomerInfoAction(Request $request)
  587.     {
  588.         $customerInfo RCAService::checkForCustomerInfoDetails($request$this->getUser(), $this->getEntityManager());
  589.         $customer CustomerService::retrieveCustomerFromShopUser($this->getUser());
  590.         $vignettesRepository $this->getDoctrine()->getRepository(Vignette::class);
  591.         if (!$customerInfo && $customer) {
  592.             $address $this->getDoctrine()->getRepository(Address::class)->findLastLegalAddressForCustomer($customer->getId());
  593.             if ($address && $address->getCountryCode() == Country::RO_COUNTRY_CODE && $address->getCifCode()) {
  594.                 $customerInfo['isLeasing'] = false;
  595.                 $customerInfo['isLegalPerson'] = true;
  596.                 $customerInfo['cifCode'] = $address->getCifCode();
  597.                 $customerInfo['companyName'] = $address->getCompanyName();
  598.             } elseif ($lastVignetteAddress $vignettesRepository->getLastSimpleCustomerAddressByCustomer($customer)) {
  599.                 $vignetteAddress $lastVignetteAddress->getOrder()->getBillingAddress();
  600.                 $customerInfo AddressService::formatAddressDataSimpleCustomerForRca($vignetteAddress$this->getEntityManager());
  601.             }
  602.         }
  603.         if(!empty($request->get('countyCode')) && !$customerInfo['isLeasing'] && !$customerInfo['isLegalPerson'] ) {
  604.             $filledCountyCode $this->getDoctrine()->getRepository(County::class)->findCodeById($customerInfo['county']);
  605.             $hasDifferentCounty = !empty($filledCountyCode) && ($filledCountyCode !== $request->get('countyCode'));
  606.             if(!empty($hasDifferentCounty)) {
  607.                 $customerInfo = [];
  608.                 return new Response(json_encode($customerInfo));
  609.             }
  610.         }
  611.         $rcaTrackerActivityService $this->getContainer()->get('app.service.rca.tracker_activity');
  612.         $rcaTrackerActivityService->setCustomerInfoRetrieved($customer$customerInfo);
  613.         return new Response(json_encode($customerInfo));
  614.     }
  615.     public function retrieveAvailabilityInfoAction(Request $request)
  616.     {
  617.         $availabilityInfo RCAService::checkForAvailabilityInfoDetails($request$this->getEntityManager());
  618.         return new Response(json_encode($availabilityInfo));
  619.     }
  620.     public function checkRcaAlreadyInCart(Request $request)
  621.     {
  622.         $alreadyInCart RCAService::checkAlreadyInCart($request);
  623.         return new Response(json_encode(array('already_in_cart' => $alreadyInCart)));
  624.     }
  625.     public function retrieveOfferErrorMessage(Request $request)
  626.     {
  627.         $offer $request->get('offer');
  628.         return new Response(json_encode(RCAService::getErrorMessageForOfferDeductedPrice($offer)));
  629.     }
  630.     public function showRcaPolicy(Request $request)
  631.     {
  632.         $customer CustomerService::retrieveCustomerFromShopUser($this->getUser());
  633.         $rca $this->getDoctrine()->getRepository(RCA::class)
  634.             ->findOneBy(array('wsOfferId' => $request->get('wsOfferId')));
  635.         if ($rca && $rca->getCustomer()->getId() == $customer->getId()) {
  636.             $rcaApiService $this->getContainer()->get('app.rca.issue.service');
  637.             $pdf $rcaApiService->getPdf($rca->getWsOfferId(), $rca->getWsPolicyId());
  638.             $pdf base64_decode($pdf);
  639.             header('Content-Type: application/pdf');
  640.             echo $pdf;
  641.         }
  642.         return new Response('error');
  643.     }
  644.     public function showRcaPolicyForPartner(Request $request)
  645.     {
  646.         $id $request->get('order_id');
  647.         $id base64_decode($id);
  648.         $order $this->getDoctrine()->getRepository(Order::class)->find($id);
  649.         if ($order->hasRca()) {
  650.             $rca $order->getRca();
  651.             foreach ($rca as $rcaItem) {
  652.                 if ($rcaItem && $rcaItem->getWsOfferId() && $rcaItem->getSeries()) {
  653.                     $rcaApiService $this->getContainer()->get('app.rca.issue.service');
  654.                     $pdf $rcaApiService->getPdf($rcaItem->getWsOfferId(), $rcaItem->getWsPolicyId());
  655.                     $pdf base64_decode($pdf);
  656.                     header('Content-Type: application/pdf');
  657.                     echo $pdf;
  658.                 }
  659.             }
  660.         }
  661.         return new Response('error');
  662.     }
  663.     public function storeDataInSessionAndInVehicleList(Request $request)
  664.     {
  665.         $rcaIssueService $this->getContainer()->get('app.rca.issue.service');
  666.         $rcaIssueService->storeDataInSessionHistory($request);
  667.         $rcaIssueService->storeDataInVehicleList($request$this->getUser());
  668.         return new Response(json_encode(array('status' => 1)));
  669.     }
  670.     public function deleteItemFromSession(Request $request)
  671.     {
  672.         $rcaIssueService $this->getContainer()->get('app.rca.issue.service');
  673.         $rcaIssueService->deleteItemFromSessionHistory($request);
  674.         return new Response(json_encode(array('status' => 1)));
  675.     }
  676.     public function addToCartWithOfferCode(Request $request)
  677.     {
  678.         $authTokenService = new AuthTokenService();
  679.         if ($token $authTokenService->authenticateUserWithToken($request$this->getEntityManager())) {
  680.             $this->get('security.token_storage')->setToken($token);
  681.             $event = new InteractiveLoginEvent($request$token);
  682.             $this->dispatcher->dispatch($event'security.interactive_login');
  683.             $session $request->getSession();
  684.             $session->set('_sylius.cart.FASHION_WEB'180);
  685.             $session->save();
  686.         }
  687.         $utm = [
  688.             'utm_source' => $request->get('utm_source'),
  689.             'utm_medium' => $request->get('utm_medium'),
  690.             'utm_campaign' => $request->get('utm_campaign'),
  691.             'utm_term' => $request->get('utm_term'),
  692.             'utm_content' => $request->get('utm_content'),
  693.             'utm_id' => $request->get('utm_id')
  694.         ];
  695.         $offer RcaOfferManager::retrieveOfferFromDb($request->get('code'), $this->getEntityManager());
  696.         if ($offer) {
  697.             if (!RcaOfferManager::isOfferExpired($offer) && !in_array($request->get('insurance_id'), [56])) {
  698.                 RCAService::addRcaToCartFromOffer($offer$request);
  699.                 $url $this->generateUrl('app_shop_customer_info'$utm);
  700.             } else {
  701.                 $oldVehicle $offer->getRequest()['vehicle'];
  702.                 if (is_int($oldVehicle['make']['name'])){
  703.                     $oldVehicle['make']['name'] = $this->getEntityManager()->getRepository(MappedVehicleMake::class)->find($oldVehicle['make']['id'])->getName();
  704.                 }
  705.                 $oldVehicle['validFrom'] = RcaOfferManager::checkVehicleValidFromData($oldVehicle['validFrom']);
  706.                 $utm['step'] = 'offer';
  707.                 $url $this->generateUrl('app_shop_rca_details', [
  708.                     'oldVehicle' => $oldVehicle,
  709.                     'oldCustomer' => $offer->getRequest()['customer'],
  710.                     'oldOffer' => $offer->getData(),
  711.                     ] + $utm);
  712.             }
  713.         } else {
  714.             $url $this->generateUrl('app_shop_rca_details'$utm);
  715.         }
  716.         return $this->render('@templates/ShopCustom/Redirect/wait_to_be_redirected.html.twig',[
  717.             'url' => $url,
  718.         ]);
  719.     }
  720.     public function showCartWithToken(Request $request)
  721.     {
  722.         $authTokenService = new AuthTokenService();
  723.         if ($token $authTokenService->authenticateUserWithToken($request$this->getEntityManager())) {
  724.             $this->get('security.token_storage')->setToken($token);
  725.             $event = new InteractiveLoginEvent($request$token);
  726.             $this->dispatcher->dispatch($event'security.interactive_login');
  727.             $session $request->getSession();
  728.             $session->set('_sylius.cart.FASHION_WEB'180);
  729.             $session->save();
  730.         }
  731.         $url $this->generateUrl('app_shop_customer_info');
  732.         return $this->render('@templates/ShopCustom/Redirect/wait_to_be_redirected.html.twig',[
  733.             'url' => $url,
  734.         ]);
  735.     }
  736.     public function rcaIframe(Request $requestTranslatorInterface $translator)
  737.     {
  738.         $session $request->getSession();
  739.         $partnerService $this->getContainer()->get('app.service.partner.partner');
  740.         $partnerService->verifyToken($requestPartnerManager::CAN_ISSUE_RCA_INDEX);
  741.         $partner $partnerService
  742.             ->retrievePartner($request->getSession()->get(PartnerManager::SESSION_PARTNER_PUBLIC_TOKEN_NAME));
  743.         $partnerRole $partner->getRole();
  744.         $token['partnerPublicToken'] = $partner->getPublicToken();
  745.         $customer CustomerService::retrieveCustomerFromShopUser($this->getUser());
  746.         $trackerActivityService $this->getContainer()->get('app.service.customer.tracker_activity');
  747.         $trackerActivityService->startTracking($customer);
  748.         $vignetteCategories = (new VignetteCategoryModel($this->getEntityManager()))->getAllCategories();
  749.         $request->get('extOrderId') ? $rcaData RCAService::retrieveRcaDataForIframeByOrderId($partner$request$this->getEntityManager()) : $rcaData = [];
  750.         $render '@templates/RcaApp/Front/iframe.html.twig';
  751.         if ($this->isMobile) {
  752.             $render '@templates/RcaApp/Mobile/iframe.html.twig';
  753.         }
  754.         $request->getSession()->set('iframeSourceLink'$this->generateUrl('app_shop_rca_iframe'$token));
  755.         if ($partner->getWithoutLocalStorage()) {
  756.             RCAService::removeRcaProcessSession($request);
  757.             CartManager::removeAllProductsFromCartBySession($session);
  758.         } else {
  759.             RCAService::checkRcaSession($request);
  760.         }
  761.         PartnerManager::checkQRCodeFlow($request);
  762.         $leasingCompanies $this->getDoctrine()
  763.             ->getRepository(LeasingCompany::class)->findAll();
  764.         $country $this->getDoctrine()->getRepository(Country::class)->findOneBy(array('code' => 'RO'));
  765.         $roadAssistanceService $this->getContainer()->get('app.service.road_assistance.road_assistance');
  766.         $historyRca HistoryRcaManager::validateHistoryRca($request->getSession()->get('historyRca'));
  767.         $hashGeneratorService $this->getContainer()->get('app.service.security.hash_generator');
  768.         return $this->render($render, [
  769.             'vignetteCategories' => $vignetteCategories,
  770.             'isOneYearHuVignetteAvailableThisYear' => new \DateTime <= new \DateTime(HuVignetteManager::LAST_DATE_FOR_ONE_YEAR_HU_VIGNETTE_AVAILABILITY '-' date('Y')),
  771.             'customerVehicleOrderByOptions' => VehicleManager::getCustomerVehicleOrderByOptions(),
  772.             'customerVehicleSearchByFields' => VehicleManager::getCustomerVehicleSearchByFields(),
  773.             'historyRca' => $historyRca ?: [],
  774.             'countyList' => $this->getDoctrine()->getRepository(County::class)->findAllCountiesByCountryAsArray($country),
  775.             'vehicleTypeList' => $this->getDoctrine()->getRepository(VehicleType::class)->findAllAsArrayForUI(),
  776.             'rcaMappedCategoryList' => $this->getDoctrine()->getRepository(MappedCategory::class)->findAllAsArray(),
  777.             'defaultMakeList' => $this->getDoctrine()->getRepository(MappedVehicleMake::class)->findByVehicleMappedCategoryAsArray(MappedCategory::MAPPED_CATEGORY_VEHICLE),
  778.             'availabilityList' => $this->getDoctrine()->getRepository(Availability::class)->findAllAsArray(),
  779.             'availabilityIntervalList' => RcaManager::getAvailabilityIntervalList(),
  780.             'insuranceCompanyList' => $this->getDoctrine()->getRepository(InsuranceCompany::class)->findAllOnlyNameOrderedByPositionAsArray(),
  781.             'fuelTypeList' => $this->getDoctrine()->getRepository(FuelType::class)->findAllAsArray(),
  782.             'usageTypeList' => $this->getDoctrine()->getRepository(UsageType::class)->findAllAsArray(),
  783.             'leasingCompanyList' => $this->getDoctrine()->getRepository(LeasingCompany::class)->findAllAsArray(),
  784.             'leasingCompanies' => $leasingCompanies,
  785.             'step' => $request->get('step'),
  786.             'haveOldVehicleValues' => (bool)$request->getSession()->get('rcaVehicle'),
  787.             'haveOldCustomerValues' => (bool)$request->getSession()->get('rcaCustomerData'),
  788.             'isAdmin' => ShopUserModel::checkIfUserIsAdmin($this->getUser(), $this->getEntityManager()),
  789.             'accordionBlocksAboutRca' => StaticPagesBitbagService::getAllFilteredBlocksAsArray($this->getEntityManager(), BlockManager::BLOCK_ACCORDION_TEXT_RCA_CODE_PATTERN),
  790.             'roadAssistanceDefaultPrice' => $roadAssistanceService->retrieveDefaultPrice(),
  791.             'roadAssistanceTranslations' => RoadAssistanceManager::getTranslationsForUI($translator),
  792.             'hash' => $hashGeneratorService->getHash(),
  793.             'recaptchaSiteKey' => $_ENV['RECAPTCHA_INVISIBLE_KEY'],
  794.             'oldVehicle' => $rcaData $rcaData['oldVehicle'] : $request->get('oldVehicle'),
  795.             'oldCustomer' => $rcaData $rcaData['oldCustomer'] : $request->get('oldCustomer'),
  796.             'oldOffer' => $rcaData $rcaData['oldOffer'] : $request->get('oldOffer'),
  797.             'canIssueRoadAssistance' => PartnerManager::doRoleHaveAccess($partnerRolePartnerManager::CAN_ISSUE_ROAD_ASSISTANCE_INDEX),
  798.             'partner' => $partner,
  799.         ]);
  800.     }
  801.     public function showRcaPolicyDocument(Request $request)
  802.     {
  803.         $wsOfferId $request->get('ws_offer_id');
  804.         if ($wsOfferId) {
  805.             $rcaApiService $this->getContainer()->get('app.rca.issue.service');
  806.             $rca $this->getDoctrine()->getRepository(RCA::class)
  807.                 ->findOneBy(array('wsOfferId' => $wsOfferId));
  808.             $pdf $rcaApiService->getPdf($rca->getWsOfferId(), $rca->getWsPolicyId());
  809.             $pdf base64_decode($pdf);
  810.             header('Content-Type: application/pdf');
  811.             echo $pdf;
  812.         }
  813.         return new Response('error');
  814.     }
  815.     public function sendCustomerAndVehicleDataForCasco(Request $request)
  816.     {
  817.         $apiVehicleDataService $this->getContainer()->get('app.service.api_vehicle_data');
  818.         $logEmailSendingService = new LogEmailSendingService($this->getEntityManager());
  819.         $customer CustomerService::retrieveCustomerFromShopUser($this->getUser());
  820.         if (!$customer || !$request->get('vehicleId')) {
  821.             return new Response('error');
  822.         }
  823.         $rcaData RCAService::retrieveCustomerAndVehicleDataByModalVehicleId($customer$request$apiVehicleDataService$this->getEntityManager());
  824.         if (empty($rcaData)) {
  825.             $logEmailSendingService->storeNewLogEmailForCustomer($customerLogEmailSending::EMAIL_CASCO_OFFERfalse, array('error' => 'no valid data'));
  826.             return new Response('error');
  827.         }
  828.         if ($logEmailSendingService->checkIfEmailIsSentByAdditionalInfoAndEmailType($rcaData['vehicle']['registrationPlate'], LogEmailSending::EMAIL_CASCO_OFFER)) {
  829.             return new JsonResponse(['error' => 'Oferta a fost trimisa anterior, o sa fiti contactat pentru o oferta in cel mai scurt timp']);
  830.         }
  831.         $dataToSend EmailService::formatJsonDataForEmailReading($rcaData);
  832.         $message = (new \Swift_Message('Cerere Oferta Casco - Nume Client:' $customer->getFullName()))
  833.             ->setFrom($_ENV['EMAIL_USERNAME'])
  834.             ->setBcc($_ENV['EMAIL_ADMIN_SCALA'])
  835.             ->setTo($_ENV['EMAIL_PARTENER_CASCO'])
  836.             ->setBody('Buna ziua,<br>' $dataToSend)
  837.             ->setContentType("text/html");
  838.         $isSent EmailService::sendEmail($message$customer->getEmail());
  839.         $logEmailSendingService->storeNewLogEmailForCustomer($customerLogEmailSending::EMAIL_CASCO_OFFER$isSent$rcaData);
  840.         return new Response(json_encode($isSent));
  841.     }
  842. }