src/Controller/RCA/RCAController.php line 204

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