diff --git a/Classes/EventListener/Order/Finish/DocumentRenderer.php b/Classes/EventListener/Order/Finish/DocumentRenderer.php index a65e169..d13c412 100644 --- a/Classes/EventListener/Order/Finish/DocumentRenderer.php +++ b/Classes/EventListener/Order/Finish/DocumentRenderer.php @@ -11,24 +11,33 @@ * LICENSE file that was distributed with this source code. */ +use Extcode\Cart\Domain\Model\Cart\Cart; +use Extcode\Cart\Domain\Model\Order\Item as OrderItem; use Extcode\Cart\Domain\Repository\Order\ItemRepository as OrderItemRepository; -use Extcode\Cart\Event\Order\FinishEvent; +use Extcode\Cart\Event\Order\EventInterface; +use Extcode\Cart\Event\Order\NumberGeneratorEvent; use Extcode\CartPdf\Service\PdfService; +use Psr\EventDispatcher\EventDispatcherInterface; +use Psr\Log\LoggerAwareInterface; +use Psr\Log\LoggerAwareTrait; use TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager; -class DocumentRenderer +class DocumentRenderer implements LoggerAwareInterface { + use LoggerAwareTrait; + public function __construct( protected PersistenceManager $persistenceManager, protected OrderItemRepository $orderItemRepository, protected PdfService $pdfService, + protected EventDispatcherInterface $eventDispatcher, ) {} - public function __invoke(FinishEvent $event): void + public function __invoke(EventInterface $event): void { $orderItem = $event->getOrderItem(); $settings = $event->getSettings(); - + $this->logger->debug('DocumentRenderer', $settings); $generateDocuments = (array)($settings['autoGenerateDocuments'] ?? []); if (empty($generateDocuments)) { @@ -37,6 +46,7 @@ public function __invoke(FinishEvent $event): void foreach ($generateDocuments as $documentType => $documentData) { if ($documentData) { + $this->createNumberIfMissing($orderItem, $documentType, $settings); $this->pdfService->createPdf($orderItem, $documentType); } } @@ -44,4 +54,17 @@ public function __invoke(FinishEvent $event): void $this->orderItemRepository->update($orderItem); $this->persistenceManager->persistAll(); } + + protected function createNumberIfMissing(OrderItem $orderItem, string $pdfType, array $settings) + { + $getNumber = 'get' . ucfirst($pdfType) . 'Number'; + if (!$orderItem->$getNumber()) { + $dummyCart = new Cart([]); + $createEvent = new NumberGeneratorEvent($dummyCart, $orderItem, $settings); + $createEvent->setOnlyGenerateNumberOfType([$pdfType]); + $this->eventDispatcher->dispatch($createEvent); + $orderItem = $createEvent->getOrderItem(); + $this->orderItemRepository->update($orderItem); + } + } }