custom/plugins/ZeobvBundleProducts/src/Storefront/Subscriber/OrderDetailPageSubscriber.php line 33

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Zeobv\BundleProducts\Storefront\Subscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Shopware\Storefront\Page\Account\Order\AccountOrderPageLoadedEvent;
  5. use Shopware\Core\Checkout\Order\OrderEntity;
  6. use Shopware\Core\Checkout\Order\Aggregate\OrderLineItem\OrderLineItemEntity;
  7. use Shopware\Core\Checkout\Cart\LineItem\LineItem;
  8. /**
  9.  * Class OrderDetailPageSubscriber
  10.  *
  11.  * @package Zeobv\BundleProducts\Storefront\Subscriber
  12.  */
  13. class OrderDetailPageSubscriber implements EventSubscriberInterface
  14. {
  15.     /**
  16.      * @return string[]
  17.      */
  18.     public static function getSubscribedEvents(): array
  19.     {
  20.         return [
  21.             AccountOrderPageLoadedEvent::class => 'onOrderPageLoaded',
  22.         ];
  23.     }
  24.     /**
  25.      * @param AccountOrderPageLoadedEvent $event
  26.      */
  27.     public function onOrderPageLoaded(AccountOrderPageLoadedEvent $event): void
  28.     {
  29.         $orders $event->getPage()->getOrders();
  30.         /** @var OrderEntity $order */
  31.         foreach ($orders as $order) {
  32.             # Order by position, but try to keep children under bundle products
  33.             $order->getLineItems()->sort(function (OrderLineItemEntity $aOrderLineItemEntity $b) {
  34.                 return $a->getPosition() > $b->getPosition() || $a->getParentId() !== null;
  35.             });
  36.             # place promotions and credit line at the bottom
  37.             $order->getLineItems()->sort(function (OrderLineItemEntity $aOrderLineItemEntity $b) {
  38.                 return $a->getType() === LineItem::PROMOTION_LINE_ITEM_TYPE || $a->getType() === LineItem::CREDIT_LINE_ITEM_TYPE;
  39.             });
  40.         }
  41.     }
  42. }