Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 27 additions & 4 deletions Classes/EventListener/Order/Finish/DocumentRenderer.php
Original file line number Diff line number Diff line change
Expand Up @@ -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)) {
Expand All @@ -37,11 +46,25 @@ public function __invoke(FinishEvent $event): void

foreach ($generateDocuments as $documentType => $documentData) {
if ($documentData) {
$this->createNumberIfMissing($orderItem, $documentType, $settings);
$this->pdfService->createPdf($orderItem, $documentType);
}
}

$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);
}
}
}