src/Controller/Peaj/PeajController.php line 43

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