custom/plugins/HuebertCustomDocuments/src/Subscriber/Document.php line 42

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Huebert\CustomDocuments\Subscriber;
  3. use Huebert\CustomDocuments\Core\Content\CustomDocumentEntity;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Shopware\Core\Checkout\Document\Event\DocumentTemplateRendererParameterEvent;
  6. use Huebert\CustomDocuments\Services\CustomDocument;
  7. # @TODO Add Struct for Custom Document Data
  8. use Huebert\CustomDocuments\Struct\CustomDocumentData;
  9. use Twig\Environment;
  10. use Twig\Error\LoaderError;
  11. use Twig\Error\RuntimeError;
  12. use Twig\Error\SyntaxError;
  13. use Twig\Loader\ArrayLoader;
  14. class Document implements EventSubscriberInterface
  15. {
  16.     private $customDocumentService;
  17.     public function __construct(
  18.         CustomDocument $customDocumentService
  19.     )
  20.     {
  21.         $this->customDocumentService $customDocumentService;
  22.     }
  23.     public static function getSubscribedEvents()
  24.     {
  25.         return [
  26.             DocumentTemplateRendererParameterEvent::class => 'documentTemplateParameter'
  27.         ];
  28.     }
  29.     /**
  30.      * @throws SyntaxError
  31.      * @throws RuntimeError
  32.      * @throws LoaderError
  33.      */
  34.     public function documentTemplateParameter(DocumentTemplateRendererParameterEvent $event ): void
  35.     {
  36.         $documentBaseConfigId $event->getParameters()["config"]["id"] ?? null;
  37.         $context = isset($event->getParameters()["context"]) ? $event->getParameters()["context"]->getContext() : null;
  38.         $customDocumentData = new CustomDocumentData();
  39.         if ( $documentBaseConfigId !== null ) {
  40.             $hueCustomDocument $this->customDocumentService->getConfigById(
  41.                 $documentBaseConfigId,
  42.                 $context
  43.             );
  44.             $customDocumentData->setStyles(
  45.                 $hueCustomDocument->getStyles()
  46.             );
  47.             $customDocumentData->setContents(
  48.                 $hueCustomDocument->getTranslated()["contents"]
  49.             );
  50.             $customDocumentData->setLineitemsTables(
  51.                 $hueCustomDocument->getTranslated()["lineitemsTable"]
  52.             );
  53.             $customDocumentData->setLineitemsTablesStyles(
  54.                 $hueCustomDocument->getLineitemsTableStyles()
  55.             );
  56.             if ($hueCustomDocument instanceof CustomDocumentEntity) {
  57.                 $lineitemsTable null;
  58.                 if ($hueCustomDocument->getTranslated()["lineitemsTable"]) {
  59.                     $loader = new ArrayLoader([
  60.                         '@Framework/documents/line-items-table.html.twig' => $hueCustomDocument->getTranslated()["lineitemsTable"],
  61.                     ]);
  62.                     $twig = new Environment($loader);
  63.                     $lineitemsTable $twig->render('@Framework/documents/line-items-table.html.twig', ['lineItems' => $event->getParameters()['order']->getLineItems(), 'order' => $event->getParameters()['order']]);
  64.                 }
  65.                 $customDocumentData->setLineitemsTables(
  66.                     $lineitemsTable
  67.                 );
  68.                 if ($hueCustomDocument->getLineitemsTableStyles()) {
  69.                     $customDocumentData->setLineitemsTablesStyles(
  70.                         $hueCustomDocument->getLineitemsTableStyles()
  71.                     );
  72.                 }
  73.             }
  74.         }
  75.         $event->addExtension'hueCustomDocument'$customDocumentData );
  76.         # dd( $hueCustomDocument, $event );
  77.     }
  78. }