<?php declare(strict_types=1);
namespace Huebert\CustomDocuments\Subscriber;
use Huebert\CustomDocuments\Core\Content\CustomDocumentEntity;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Shopware\Core\Checkout\Document\Event\DocumentTemplateRendererParameterEvent;
use Huebert\CustomDocuments\Services\CustomDocument;
# @TODO Add Struct for Custom Document Data
use Huebert\CustomDocuments\Struct\CustomDocumentData;
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Error\SyntaxError;
use Twig\Loader\ArrayLoader;
class Document implements EventSubscriberInterface
{
private $customDocumentService;
public function __construct(
CustomDocument $customDocumentService
)
{
$this->customDocumentService = $customDocumentService;
}
public static function getSubscribedEvents()
{
return [
DocumentTemplateRendererParameterEvent::class => 'documentTemplateParameter'
];
}
/**
* @throws SyntaxError
* @throws RuntimeError
* @throws LoaderError
*/
public function documentTemplateParameter(DocumentTemplateRendererParameterEvent $event ): void
{
$documentBaseConfigId = $event->getParameters()["config"]["id"] ?? null;
$context = isset($event->getParameters()["context"]) ? $event->getParameters()["context"]->getContext() : null;
$customDocumentData = new CustomDocumentData();
if ( $documentBaseConfigId !== null ) {
$hueCustomDocument = $this->customDocumentService->getConfigById(
$documentBaseConfigId,
$context
);
$customDocumentData->setStyles(
$hueCustomDocument->getStyles()
);
$customDocumentData->setContents(
$hueCustomDocument->getTranslated()["contents"]
);
$customDocumentData->setLineitemsTables(
$hueCustomDocument->getTranslated()["lineitemsTable"]
);
$customDocumentData->setLineitemsTablesStyles(
$hueCustomDocument->getLineitemsTableStyles()
);
if ($hueCustomDocument instanceof CustomDocumentEntity) {
$lineitemsTable = null;
if ($hueCustomDocument->getTranslated()["lineitemsTable"]) {
$loader = new ArrayLoader([
'@Framework/documents/line-items-table.html.twig' => $hueCustomDocument->getTranslated()["lineitemsTable"],
]);
$twig = new Environment($loader);
$lineitemsTable = $twig->render('@Framework/documents/line-items-table.html.twig', ['lineItems' => $event->getParameters()['order']->getLineItems(), 'order' => $event->getParameters()['order']]);
}
$customDocumentData->setLineitemsTables(
$lineitemsTable
);
if ($hueCustomDocument->getLineitemsTableStyles()) {
$customDocumentData->setLineitemsTablesStyles(
$hueCustomDocument->getLineitemsTableStyles()
);
}
}
}
$event->addExtension( 'hueCustomDocument', $customDocumentData );
# dd( $hueCustomDocument, $event );
}
}