<?php
declare(strict_types=1);
namespace Schnitzraum\SplitOrderSW6\Subscriber;
use Shopware\Core\Checkout\Cart\Order\CartConvertedEvent;
use Shopware\Core\System\SystemConfig\SystemConfigService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Schnitzraum\SplitOrderSW6\Service\Manager\OrderManager;
/**
* Class CartSubscriber
*/
class CartSubscriber implements EventSubscriberInterface
{
/**
* @var SystemConfigService
*/
private $systemConfigService;
/**
* @var OrderManager
*/
private OrderManager $orderManager;
/**
* @param SystemConfigService $systemConfigService
* @param OrderManager $orderManager
*/
public function __construct(
SystemConfigService $systemConfigService,
OrderManager $orderManager
)
{
$this->systemConfigService = $systemConfigService;
$this->orderManager = $orderManager;
}
/**
* @return string[]
*/
public static function getSubscribedEvents(): array
{
return [
CartConvertedEvent::class => ['onCartConvertedEvent', 100]
];
}
public function onCartConvertedEvent(CartConvertedEvent $event): void
{
/** @var array $convertedCart */
$convertedCart = $event->getConvertedCart();
$customerComment = $convertedCart['customerComment'];
if ($customerComment === null) {
return;
}
$isSplitOrder = strpos($customerComment, 'SPLIT FROM') !== false;
if (!$isSplitOrder) {
return;
}
// find the origin order number
$pattern = '/\[(.*?)\]/';
$originOrderNumber = null;
if (preg_match($pattern, $customerComment, $matches)) {
$originOrderNumber = $matches[1];
} else {
return;
}
// // set the default suffix
$splitOrdernumber = $originOrderNumber . '-1';
$suffix = 1;
// be sure that the new order number is unique
while ($this->orderManager->getOrderByParams(['orderNumber' => $splitOrdernumber])) {
$suffix++;
$splitOrdernumber = $originOrderNumber . '-' . $suffix;
}
// set the new order number
$convertedCart['orderNumber'] = $splitOrdernumber;
// remove brackets from customer comment
$convertedCart['customerComment'] = str_replace(['[', ']'], '', $customerComment);
$event->setConvertedCart($convertedCart);
}
}