src/Controller/Telemedicine/TelemedicineController.php line 27

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