vendor/store.shopware.com/schnitzraumsplitordersw6/src/Subscriber/CartSubscriber.php line 51

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Schnitzraum\SplitOrderSW6\Subscriber;
  4. use Shopware\Core\Checkout\Cart\Order\CartConvertedEvent;
  5. use Shopware\Core\System\SystemConfig\SystemConfigService;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Schnitzraum\SplitOrderSW6\Service\Manager\OrderManager;
  8. /**
  9.  * Class CartSubscriber
  10.  */
  11. class CartSubscriber implements EventSubscriberInterface
  12. {
  13.     /**
  14.      * @var SystemConfigService
  15.      */
  16.     private $systemConfigService;
  17.     /**
  18.      * @var OrderManager
  19.      */
  20.     private OrderManager $orderManager;
  21.     /**
  22.      * @param SystemConfigService $systemConfigService
  23.      * @param OrderManager $orderManager
  24.      */
  25.     public function __construct(
  26.         SystemConfigService $systemConfigService,
  27.         OrderManager $orderManager
  28.         )
  29.     {
  30.         $this->systemConfigService $systemConfigService;
  31.         $this->orderManager $orderManager;
  32.     }
  33.     /**
  34.      * @return string[]
  35.      */
  36.     public static function getSubscribedEvents(): array
  37.     {
  38.         return [
  39.             CartConvertedEvent::class => ['onCartConvertedEvent'100]
  40.         ];
  41.     }
  42.     public function onCartConvertedEvent(CartConvertedEvent $event): void
  43.     {
  44.         /** @var array $convertedCart */
  45.         $convertedCart $event->getConvertedCart();
  46.         $customerComment $convertedCart['customerComment'];
  47.         if ($customerComment === null) {
  48.             return;
  49.         }
  50.         $isSplitOrder strpos($customerComment'SPLIT FROM') !== false;
  51.         if (!$isSplitOrder) {
  52.             return;
  53.         }
  54.         
  55.         // find the origin order number
  56.         $pattern '/\[(.*?)\]/';
  57.         $originOrderNumber null;
  58.         
  59.         if (preg_match($pattern$customerComment$matches)) {
  60.             $originOrderNumber $matches[1];
  61.         } else {
  62.             return;
  63.         }
  64.         
  65.         // // set the default suffix
  66.         $splitOrdernumber $originOrderNumber '-1';
  67.         $suffix 1;
  68.         
  69.         // be sure that the new order number is unique
  70.         while ($this->orderManager->getOrderByParams(['orderNumber' => $splitOrdernumber])) {
  71.             $suffix++;
  72.             $splitOrdernumber $originOrderNumber '-' $suffix;
  73.         }
  74.         
  75.         // set the new order number
  76.         $convertedCart['orderNumber'] = $splitOrdernumber;
  77.         // remove brackets from customer comment
  78.         $convertedCart['customerComment'] = str_replace(['['']'], ''$customerComment);
  79.         $event->setConvertedCart($convertedCart);
  80.     }
  81. }