src/Controller/RCA/RCAController.php line 175

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