src/Controller/Peaj/PeajController.php line 44

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Peaj;
  3. use App\Controller\BaseController;
  4. use App\Entity\Order\Order;
  5. use App\Entity\Peaj\Category;
  6. use App\Entity\Peaj\Peaj;
  7. use App\Entity\VignetteInvoice\VignetteInvoice;
  8. use App\Manager\BitbagStatic\BlockManager;
  9. use App\Manager\Cart\CartManager;
  10. use App\Manager\CountryManager;
  11. use App\Manager\Partner\PartnerManager;
  12. use App\Manager\Peaj\PeajManager;
  13. use App\Service\AuthTokenService;
  14. use App\Service\InvoiceApiService;
  15. use App\Service\InvoiceService;
  16. use App\Service\StaticPagesBitbagService;
  17. use App\Service\SystemService;
  18. use BitBag\SyliusCmsPlugin\Entity\Page;
  19. use Symfony\Component\HttpFoundation\JsonResponse;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  23. class PeajController extends BaseController
  24. {
  25.     public function indexAction(Request $request): Response
  26.     {
  27.         $locale $request->getLocale();
  28.         $categories $this->getEntityManager()->getRepository(Category::class)
  29.             ->findAllAsArray($this->getContainer()->get('translator'));
  30.         $countries CountryManager::getActiveCountriesForRoVignette($this->getEntityManager());
  31.         $pageRepository $this->getEntityManager()->getRepository(Page::class);
  32.         $companyServicesPeajPage $pageRepository->findOneEnabledByCode('company-services-peaj'$locale);
  33.         return $this->render('@templates/Front/Peaj/index.html.twig', [
  34.             'categories' => $categories,
  35.             'countries' => $countries,
  36.             'companyServicesPeajPage' => $companyServicesPeajPage,
  37.             'number_of_passes' => $this->getContainer()->get('app.service.peaj.peaj')->getDefaultNumberOfPasses(),
  38.             'accordionBlocksFaq' => StaticPagesBitbagService::getAllFilteredBlocks($this->getEntityManager(), BlockManager::BLOCK_ACCORDION_TEXT_PEAJ_CODE_PATTERN),
  39.             'keywordsForSeo' => StaticPagesBitbagService::getFirstFilteredBlocks($this->getEntityManager(), BlockManager::BLOCK_SEO_META_PEAJ_KEYWORD_CODE_PATTERN),
  40.             'descriptionForSeo' => StaticPagesBitbagService::getFirstFilteredBlocks($this->getEntityManager(), BlockManager::BLOCK_SEO_META_PEAJ_DESCRIPTION_CODE_PATTERN)
  41.         ]);
  42.     }
  43.     public function submitData(Request $request): Response
  44.     {
  45.         $peajService $this->getContainer()->get('app.service.peaj.peaj');
  46.         if ($errors $peajService->validate($request->request->all())) {
  47.             return $this->json(['violations' => $errors]);
  48.         }
  49.         $response $peajService->storeNewPeajInCart($requestPeaj::FLAG_SOURCE_PRODUCT_PAGE);
  50.         $params = [];
  51.         if ($request->get('publicToken')) {
  52.             $params['publicToken'] = $request->get('publicToken');
  53.         }
  54.         $response['redirectUrl'] = $this->generateUrl('app_shop_customer_info'$params);
  55.         return new JsonResponse($response);
  56.     }
  57.     public function iframeAction(Request $request): Response
  58.     {
  59.         $partnerService $this->getContainer()->get('app.service.partner.partner');
  60.         $partnerService->verifyToken($requestPartnerManager::CAN_ISSUE_PEAJ_INDEX);
  61.         $partner $partnerService->retrievePartner($request->get('partnerPublicToken'));
  62.         $request->getSession()->set('iframeSourceLink'$this->generateUrl('app_shop_peaj_iframe', [
  63.             'partnerPublicToken' => $partner->getPublicToken()
  64.         ]));
  65.         PartnerManager::checkQRCodeFlow($request);
  66.         $categories $this->getEntityManager()->getRepository(Category::class)
  67.             ->findAllAsArray($this->getContainer()->get('translator'));
  68.         $countries CountryManager::getActiveCountriesForRoVignette($this->getEntityManager());
  69.         return $this->render('@templates/Front/Peaj/iframe.html.twig', [
  70.             'iframe' => true,
  71.             'publicToken' => $partner->getPublicToken(),
  72.             'categories' => $categories,
  73.             'countries' => $countries,
  74.             'number_of_passes' => $this->getContainer()->get('app.service.peaj.peaj')->getDefaultNumberOfPasses(),
  75.         ]);
  76.     }
  77.     public function addToCartById(Order $orderRequest $request): Response
  78.     {
  79.         $clientIp $request->getClientIp();
  80.         $session $request->getSession();
  81.         foreach ($order->getPeaj() as $peaj) {
  82.             if (!PeajManager::isPeajAlreadyInCart($session$peaj->getRegistrationPlate())) {
  83.                 $cartItem PeajManager::constructPeajForCartFromObject(
  84.                     $peaj$clientIpPeaj::FLAG_SOURCE_REMARKETING
  85.                 );
  86.                 CartManager::setToCart($sessionCartManager::PEAJ_PRODUCT_NAME, [$cartItem]);
  87.             }
  88.         }
  89.         $authTokenService = new AuthTokenService();
  90.         if ($token $authTokenService->authenticateUserWithToken($request$this->getEntityManager())) {
  91.             $this->get('security.token_storage')->setToken($token);
  92.             $event = new InteractiveLoginEvent($request$token);
  93.             $this->dispatcher->dispatch($event'security.interactive_login');
  94.             $session $request->getSession();
  95.             $session->set('_sylius.cart.FASHION_WEB'180);
  96.             $session->save();
  97.         }
  98.         $utm = [
  99.             'utm_source' => $request->get('utm_source'),
  100.             'utm_medium' => $request->get('utm_medium'),
  101.             'utm_campaign' => $request->get('utm_campaign'),
  102.             'utm_term' => $request->get('utm_term'),
  103.             'utm_content' => $request->get('utm_content'),
  104.             'utm_id' => $request->get('utm_id')
  105.         ];
  106.         return $this->render('@templates/ShopCustom/Redirect/wait_to_be_redirected.html.twig', [
  107.             'url' => $this->generateUrl('app_shop_customer_info'$utm)
  108.         ]);
  109.     }
  110.     public function removeFromCart(Request $request): Response
  111.     {
  112.         $peajService $this->getContainer()->get('app.service.peaj.peaj');
  113.         $result $peajService->removePeajFromCartSessionByRegistrationPlate($request$request->get('registrationPlate'));
  114.         return new Response(json_encode(array('result' => $result)));
  115.     }
  116.     public function findNumberOfPassesByCategory(Request $request): JsonResponse
  117.     {
  118.         $categoryRepo $this->getEntityManager()->getRepository(Category::class);
  119.         if (!($categoryId $request->get('category_id')) || !($category $categoryRepo->find($categoryId))) {
  120.             return $this->json(['success' => false]);
  121.         }
  122.         $prices $category->getPrices();
  123.         $numberOfPasses = [];
  124.         foreach ($prices as $key => $price) {
  125.             $availability $price->getAvailability();
  126.             $numberOfPasses[$key] = [
  127.                 'name' => str_replace(' pod Fetesti'''$availability->getName()),
  128.                 'price_id' => $price->getId(),
  129.                 'price' => $price->getCustomerPrice(),
  130.                 'currency' => $price->getCustomerCurrency(),
  131.                 'quantity' => $availability->getQuantity(),
  132.                 'available' => $availability->getMonthsAvailable(),
  133.                 'availability_id' => $availability->getId(),
  134.             ];
  135.         }
  136.         return $this->json(['success' => true'number_of_passes' => $numberOfPasses]);
  137.     }
  138.     public function showPolicyForPartner(Request $request): Response
  139.     {
  140.         $id base64_decode($request->get('order_id'));
  141.         $em $this->getEntityManager();
  142.         /** @var Order $order */
  143.         $order $em->getRepository(Order::class)->find($id);
  144.         if (!$order->hasPeaj()) {
  145.             return new Response('error');
  146.         }
  147.         $apiInvoiceService = new InvoiceApiService();
  148.         $invoice $em->getRepository(VignetteInvoice::class)
  149.             ->findOneBy(['order' => $id'productType' => VignetteInvoice::PRODUCT_PEAJ]);
  150.         $pdfContent $apiInvoiceService->getInvoicePDFViaBillingService($invoice->getApiInvoiceId());
  151.         if (!$pdfContent) {
  152.             return new Response('error');
  153.         }
  154.         $invoiceFileName SystemService::retrieveMessage('invoice'$this->getContainer()->get('translator'));
  155.         $filename "{$invoiceFileName} {$invoice->getSeries()} {$invoice->getNumber()}";
  156.         InvoiceService::openPDFContent($pdfContent$filename);
  157.         return new Response();
  158.     }
  159. }