src/Controller/PdfController.php line 141

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by Elements.at New Media Solutions GmbH
  4.  *
  5.  */
  6. namespace App\Controller;
  7. use App\Model\Shop\Order;
  8. use App\Model\Type\TenantType;
  9. use App\Service\Shop\ShopService;
  10. use App\Web2Print\HeadlessChrome;
  11. use Elements\Bundle\SkidataTicketingSwebBundle\Model\Constant\AcquisitionType;
  12. use Elements\Bundle\TicketShopFrameworkBundle\Model\DataObject\OnlineShopOrderItem;
  13. use Elements\Bundle\TicketShopFrameworkBundle\Service\VoucherCodeService;
  14. use Pimcore\Model\DataObject\OnlineShopOrder;
  15. use Pimcore\Model\DataObject\TicketShopVoucherCode;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. class PdfController extends AbstractController
  20. {
  21.     #[Route('/{_locale}/pdf/event-voucher'name'event_pdf_voucher')]
  22.     public function voucherAction(Request $requestVoucherCodeService $voucherCodeService): Response
  23.     {
  24.         //TODO - compatibility-mode for old links
  25.         $params = [
  26.             'document' => $this->document,
  27.             'editmode' => $this->editmode,
  28.         ];
  29.         if ($voucherCode $request->get('code')) {
  30.             $voucherCode TicketShopVoucherCode::getByCode($voucherCode1);
  31.             if ($voucherCode) {
  32.                 $params['qrCodeData'] = $voucherCodeService->getVoucherQrCode($voucherCode->getCode(), 114);
  33.                 $params['voucherCode'] = $voucherCode;
  34.                 $orderItems $voucherCode->getReferences();
  35.                 if (count($orderItems)) {
  36.                     /** @var OnlineShopOrderItem $first */
  37.                     $first $orderItems[0];
  38.                     $order $first->getOrder();
  39.                     $params['order'] = $order;
  40.                 }
  41.             }
  42.         }
  43.         if ($voucherId $request->get('voucherId')) {
  44.             if ($voucherCode TicketShopVoucherCode::getById(intval($voucherId))) {
  45.                 if ($voucherCode->getCode() === $request->get('voucherCode')) {
  46.                     $params['qrCodeData'] = $voucherCodeService->getVoucherQrCode($voucherCode->getCode(), 114);
  47.                     $params['voucherCode'] = $voucherCode;
  48.                     $params['order'] = Order::getById($request->get('order'));
  49.                 }
  50.             }
  51.         }
  52.         if (\Pimcore::inDebugMode() && ($request->get('html') == || $this->editmode)) {
  53.             return $this->render('pdf/voucher.html.twig'$params);
  54.         }
  55.         $html $this->renderView('pdf/voucher.html.twig'$params);
  56.         $header $this->renderView('includes/pdf-voucher/header.html.twig'$params);
  57.         $footer $this->renderView('includes/pdf-voucher/footer.html.twig'$params);
  58.         $processor = new HeadlessChrome();
  59.         $params = [
  60.             'displayHeaderFooter' => true,
  61.             'headerTemplate' => $header,
  62.             'footerTemplate' => $footer,
  63.             'landscape' => false,
  64.             'printBackground' => true,
  65.             'format' => 'A4',
  66.             'margin' => [
  67.                 'top' => '260px',
  68.                 'bottom' => '30mm',
  69.                 'right' => '34px',
  70.                 'left' => '34px',
  71.             ],
  72.         ];
  73.         return new \Symfony\Component\HttpFoundation\Response(
  74.             $processor->getPdfFromString($html$params),
  75.             200,
  76.             [
  77.                 'Content-Type' => 'application/pdf',
  78.                 'X-Robots-Tag' => 'noindex, nofollow',
  79.             ]
  80.         );
  81.     }
  82.     //B2B Invoice PDF
  83.     public function invoiceAction(Request $request): Response
  84.     {
  85.         $params = [
  86.             'document' => $this->document,
  87.             'editmode' => $this->editmode,
  88.         ];
  89.         if ($id base64_decode($request->get('id'))) {
  90.             /** @var Order $order */
  91.             $order Order::getById((int)$id);
  92.             $params['order'] = $order;
  93.         }
  94.         if ((\Pimcore::inDebugMode() && $request->get('html') == 1) || $this->editmode) {
  95.             return $this->render('pdf/invoice.html.twig'$params);
  96.         }
  97.         $html $this->renderView('pdf/invoice.html.twig'$params);
  98.         $header $this->renderView('includes/pdf-invoice/header.html.twig'$params);
  99.         $footer $this->renderView('includes/pdf-invoice/footer.html.twig'$params);
  100.         $processor = new HeadlessChrome();
  101.         $params = [
  102.             'displayHeaderFooter' => true,
  103.             'headerTemplate' => $header,
  104.             'footerTemplate' => $footer,
  105.             'landscape' => false,
  106.             'printBackground' => true,
  107.             'format' => 'A4',
  108.             'margin' => [
  109.                 'top' => '120px',
  110.                 'bottom' => '30mm',
  111.                 'right' => '34px',
  112.                 'left' => '34px',
  113.             ],
  114.         ];
  115.         return new \Symfony\Component\HttpFoundation\Response(
  116.             $processor->getPdfFromString($html$params),
  117.             200,
  118.             [
  119.                 'Content-Type' => 'application/pdf',
  120.                 'X-Robots-Tag' => 'noindex, nofollow',
  121.             ]
  122.         );
  123.     }
  124.     public function qrCodeAction(Request $requestShopService $shopService): Response
  125.     {
  126.         if (\Pimcore::inDebugMode() && ($request->get('html') == || $this->editmode)) {
  127.             return $this->render('pdf/qr-code.html.twig');
  128.         }
  129.         $qrCodeText '';
  130.         $orderNumber null;
  131.         $errorLevel null;
  132.         if ($id base64_decode($request->get('id'))) {
  133.             $orderItem OnlineShopOrderItem::getById((int)$id);
  134.             if (!$orderItem) {
  135.                 throw $this->createNotFoundException('Order item not found');
  136.             }
  137.             $order $orderItem->getOrder();
  138.             if ($order instanceof OnlineShopOrder) {
  139.                 $orderNumber $order->getTenant() == TenantType::TOUR_OPERATOR $order->getOrdernumber() : null;
  140.             }
  141.             $acquisitionType $orderItem->getCheckoutDataBrick()->getAcquisitionType();
  142.             if ($acquisitionType == AcquisitionType::BARCODE) {
  143.                 $qrCodeText $orderItem->getSkidataBrick()->getSkidataBarcodeData();
  144.                 $serialNumber $orderItem->getSkidataBrick()->getSkidataBarcodeSerialNumber();
  145.             } elseif ($acquisitionType == AcquisitionType::TICKETPICKUP) {
  146.                 $qrCodeText $orderItem->getSkidataBrick()->getSkidataConfirmationNumber();
  147.             } elseif ($acquisitionType == AcquisitionType::ETICKET) {
  148.                 $qrCodeText $orderItem->getSkidataBrick()->getSkidataEticketWeblink();
  149.                 $serialNumber $orderItem->getSkidataBrick()->getSkidataEticketSerialNumber();
  150.                 $errorLevel 2// Low error correction level for e-tickets
  151.             } else {
  152.                 throw $this->createNotFoundException('Acquisition ' $acquisitionType ' type not supported');
  153.             }
  154.         } elseif (\Pimcore::inDebugMode()) {
  155.             $qrCodeText 'https://www.youtube.com/watch?v=dQw4w9WgXcQ';
  156.         }
  157.         $params = [
  158.             'qrCodeData' => $shopService->createQrCode($qrCodeText400null$errorLevel),
  159.             'orderItem' => $orderItem ?? null,
  160.             'orderNumber' => $orderNumber,
  161.             'qrCodeText' => $qrCodeText,
  162.             'acquisitionType' => $acquisitionType ?? null,
  163.             'serialNumber' => $serialNumber ?? null,
  164.         ];
  165.         $html $this->renderView('pdf/qr-code.html.twig'$params);
  166.         $header $this->renderView('includes/pdf-qr-code/header.html.twig'$params);
  167.         $footer $this->renderView('includes/pdf-qr-code/footer.html.twig'$params);
  168.         $processor = new HeadlessChrome();
  169.         $config = [
  170.             'displayHeaderFooter' => true,
  171.             'headerTemplate' => $header,
  172.             'footerTemplate' => $footer,
  173.             'landscape' => false,
  174.             'printBackground' => true,
  175.             'format' => 'A4',
  176.             'margin' => [
  177.                 'top' => '90px',
  178.                 'bottom' => '30mm',
  179.                 'right' => '38px',
  180.                 'left' => '34px',
  181.             ],
  182.         ];
  183.         return new \Symfony\Component\HttpFoundation\Response(
  184.             $processor->getPdfFromString($html$config),
  185.             200,
  186.             [
  187.                 'Content-Type' => 'application/pdf',
  188.                 'X-Robots-Tag' => 'noindex, nofollow',
  189.             ]
  190.         );
  191.     }
  192.     /**
  193.      * @Route("/qrcodepreviewer/preview/{acquisitionType}", name="qrcode_previewer")
  194.      *
  195.      * @param Request $request
  196.      * @param ShopService $shopService
  197.      *
  198.      * @return Response
  199.      */
  200.     public function previewAction(Request $requestShopService $shopServicestring $acquisitionType): Response
  201.     {
  202.         error_reporting(E_ALL E_DEPRECATED);
  203.         $context json_decode($request->get('context'), true);
  204.         $objectId $context['objectId'];
  205.         $object OnlineShopOrderItem::getById($objectId);
  206.         $response = new Response('no data');
  207.         if (($qrCodeTicket $object->getSkidataBrick()->getSkidataBarcodeData()) && $acquisitionType == AcquisitionType::BARCODE) {
  208.             $content '<img src="' $shopService->createQrCode($qrCodeTicket)->getDataUri() . '" width="280" height="280" alt="">';
  209.             $response->setContent($content);
  210.         } elseif (($webLink $object->getSkidataBrick()->getSkidataEticketWeblink()) && $acquisitionType == AcquisitionType::ETICKET) {
  211.             $content '<img src="' $shopService->createQrCode($webLink)->getDataUri() . '" width="280" height="280" alt="">';
  212.             $response->setContent($content);
  213.         }
  214.         return $response;
  215.     }
  216. }