src/Controller/Telemedicine/TelemedicineController.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Telemedicine;
  3. use App\Controller\BaseController;
  4. use App\Entity\Order\Order;
  5. use App\Entity\Telemedicine\Telemedicine;
  6. use App\Entity\VignetteInvoice\VignetteInvoice;
  7. use App\Manager\BitbagStatic\BlockManager;
  8. use App\Manager\Cart\CartManager;
  9. use App\Manager\Partner\PartnerManager;
  10. use App\Manager\Telemedicine\TelemedicineManager;
  11. use App\Service\AuthTokenService;
  12. use App\Service\InvoiceApiService;
  13. use App\Service\InvoiceService;
  14. use App\Service\StaticPagesBitbagService;
  15. use App\Service\SystemService;
  16. use Symfony\Component\HttpFoundation\JsonResponse;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  20. class TelemedicineController extends BaseController
  21. {
  22.     public function indexAction(): Response
  23.     {
  24.         return $this->render('@templates/Telemedicine/telemedicine.html.twig', [
  25.             'productPrice' => Telemedicine::SELL_PRICE,
  26.             'accordionBlocksFaq' => StaticPagesBitbagService::getAllFilteredBlocks($this->getEntityManager(), BlockManager::BLOCK_ACCORDION_TEXT_TELEMEDICINE_CODE_PATTERN),
  27.             'keywordsForSeo' => StaticPagesBitbagService::getFirstFilteredBlocks($this->getEntityManager(), BlockManager::BLOCK_SEO_META_TELEMEDICINE_KEYWORD_CODE_PATTERN),
  28.             'descriptionForSeo' => StaticPagesBitbagService::getFirstFilteredBlocks($this->getEntityManager(), BlockManager::BLOCK_SEO_META_TELEMEDICINE_DESCRIPTION_CODE_PATTERN)
  29.         ]);
  30.     }
  31.     public function submitData(Request $request): Response
  32.     {
  33.         $request->request->set('telemedicineValidFrom'date("Y-m-d H:i:s"));
  34.         $telemedicineResponse $this->getContainer()->get('app.service.telemedicine.telemedicine')
  35.             ->storeNewTelemedicineInCart(Telemedicine::FLAG_SOURCE_PRODUCT_PAGE$this->getEntityManager());
  36.         return new JsonResponse($telemedicineResponse);
  37.     }
  38.     public function removeFromCart(Request $request): Response
  39.     {
  40.         CartManager::removeFromCart($request->getSession(), CartManager::TELEMEDICINE_PRODUCT_NAME);
  41.         return new JsonResponse(['result' => true]);
  42.     }
  43.     public function addToCartById(Order $orderRequest $request): Response
  44.     {
  45.         $clientIp $request->getClientIp();
  46.         $session $request->getSession();
  47.         foreach ($order->getTelemedicine() as $telemedicine) {
  48.             if (!TelemedicineManager::isTelemedicineAlreadyInCart($session)) {
  49.                 $cartItem TelemedicineManager::constructTelemedicineForCartFromObject(
  50.                     $telemedicine$clientIpTelemedicine::FLAG_SOURCE_REMARKETING
  51.                 );
  52.                 CartManager::setToCart($sessionCartManager::TELEMEDICINE_PRODUCT_NAME, [$cartItem]);
  53.             }
  54.         }
  55.         $authTokenService = new AuthTokenService();
  56.         if ($token $authTokenService->authenticateUserWithToken($request$this->getEntityManager())) {
  57.             $this->get('security.token_storage')->setToken($token);
  58.             $event = new InteractiveLoginEvent($request$token);
  59.             $this->dispatcher->dispatch($event'security.interactive_login');
  60.             $session $request->getSession();
  61.             $session->set('_sylius.cart.FASHION_WEB'180);
  62.             $session->save();
  63.         }
  64.         $utm = [
  65.             'utm_source' => $request->get('utm_source'),
  66.             'utm_medium' => $request->get('utm_medium'),
  67.             'utm_campaign' => $request->get('utm_campaign'),
  68.             'utm_term' => $request->get('utm_term'),
  69.             'utm_content' => $request->get('utm_content'),
  70.             'utm_id' => $request->get('utm_id')
  71.         ];
  72.         return $this->render('@templates/ShopCustom/Redirect/wait_to_be_redirected.html.twig',[
  73.             'url' => $this->generateUrl('app_shop_customer_info'$utm)
  74.         ]);
  75.     }
  76.     public function telemedicineIframe(Request $request): Response
  77.     {
  78.         $partnerService $this->getContainer()->get('app.service.partner.partner');
  79.         $partnerService->verifyToken($requestPartnerManager::CAN_ISSUE_TELEMEDICINE_INDEX);
  80.         $partner $partnerService->retrievePartner($request->get('partnerPublicToken'));
  81.         $request->getSession()->set('iframeSourceLink'$this->generateUrl('app_shop_telemedicine_iframe', [
  82.             'partnerPublicToken' => $partner->getPublicToken()
  83.         ]));
  84.         PartnerManager::checkQRCodeFlow($request);
  85.         return $this->render('@templates/Front/Telemedicine/iframe.html.twig', [
  86.             'productPrice' => Telemedicine::SELL_PRICE,
  87.             'publicToken' => $partner->getPublicToken()
  88.         ]);
  89.     }
  90.     public function showPolicyForPartner(Request $request): Response
  91.     {
  92.         $id base64_decode($request->get('order_id'));
  93.         $em $this->getEntityManager();
  94.         $order $em->getRepository(Order::class)->find($id);
  95.         if (!$order->hasTelemedicine()) {
  96.             return new Response('error');
  97.         }
  98.         $apiInvoiceService = new InvoiceApiService();
  99.         $invoice $em->getRepository(VignetteInvoice::class)
  100.             ->findOneBy(['order' => $id'productType' => VignetteInvoice::PRODUCT_TELEMEDICINE]);
  101.         $pdfContent $apiInvoiceService->getInvoicePDFViaBillingService($invoice->getApiInvoiceId());
  102.         if (!$pdfContent) {
  103.             return new Response('error');
  104.         }
  105.         $invoiceFileName SystemService::retrieveMessage('invoice'$this->getContainer()->get('translator'));
  106.         $filename "{$invoiceFileName} {$invoice->getSeries()} {$invoice->getNumber()}";
  107.         InvoiceService::openPDFContent($pdfContent$filename);
  108.         return new Response();
  109.     }
  110. }