vendor/store.shopware.com/wexofreeshipping/src/Subscriber/FreeShippingSubscriber.php line 55

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Wexo\FreeShipping\Subscriber;
  3. use Shopware\Core\Checkout\Cart\Cart;
  4. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  5. use Shopware\Storefront\Page\Checkout\Cart\CheckoutCartPageLoadedEvent;
  6. use Shopware\Storefront\Page\Checkout\Confirm\CheckoutConfirmPageLoadedEvent;
  7. use Shopware\Storefront\Page\Checkout\Offcanvas\OffcanvasCartPageLoadedEvent;
  8. use Shopware\Storefront\Page\Checkout\Register\CheckoutRegisterPageLoadedEvent;
  9. use Shopware\Storefront\Page\Page;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Wexo\FreeShipping\Service\FreeShippingCalculator;
  12. class FreeShippingSubscriber implements EventSubscriberInterface
  13. {
  14.     public const FREE_SHIPPING_EXTENSION 'free_shipping';
  15.     protected FreeShippingCalculator $freeShippingCalculator;
  16.     /**
  17.      * @param FreeShippingCalculator $freeShippingCalculator
  18.      */
  19.     public function __construct(FreeShippingCalculator $freeShippingCalculator)
  20.     {
  21.         $this->freeShippingCalculator $freeShippingCalculator;
  22.     }
  23.     /**
  24.      * @return string[]
  25.      */
  26.     public static function getSubscribedEvents(): array
  27.     {
  28.         return [
  29.             OffcanvasCartPageLoadedEvent::class => 'onOffcanvasCartPage',
  30.             CheckoutConfirmPageLoadedEvent::class => 'onCheckoutConfirmPage',
  31.             CheckoutRegisterPageLoadedEvent::class => 'onCheckoutRegisterPage',
  32.             CheckoutCartPageLoadedEvent::class => 'onCheckoutCartPage'
  33.         ];
  34.     }
  35.     /**
  36.      * @param OffcanvasCartPageLoadedEvent $event
  37.      */
  38.     public function onOffcanvasCartPage(OffcanvasCartPageLoadedEvent $event): void
  39.     {
  40.         $salesChannelContext $event->getSalesChannelContext();
  41.         $page $event->getPage();
  42.         $this->addFreeShippingAmount($page->getCart(), $page$salesChannelContext);
  43.     }
  44.     /**
  45.      * @param CheckoutCartPageLoadedEvent $event
  46.      */
  47.     public function onCheckoutCartPage(CheckoutCartPageLoadedEvent $event)
  48.     {
  49.         $salesChannelContext $event->getSalesChannelContext();
  50.         $page $event->getPage();
  51.         $this->addFreeShippingAmount($page->getCart(), $page$salesChannelContext);
  52.     }
  53.     /**
  54.      * @param CheckoutRegisterPageLoadedEvent $event
  55.      */
  56.     public function onCheckoutRegisterPage(CheckoutRegisterPageLoadedEvent $event)
  57.     {
  58.         $salesChannelContext $event->getSalesChannelContext();
  59.         $page $event->getPage();
  60.         $this->addFreeShippingAmount($page->getCart(), $page$salesChannelContext);
  61.     }
  62.     /**
  63.      * @param CheckoutConfirmPageLoadedEvent $event
  64.      */
  65.     public function onCheckoutConfirmPage(CheckoutConfirmPageLoadedEvent $event)
  66.     {
  67.         $salesChannelContext $event->getSalesChannelContext();
  68.         $page $event->getPage();
  69.         $this->addFreeShippingAmount($page->getCart(), $page$salesChannelContext);
  70.     }
  71.     /**
  72.      * @param Cart $cart
  73.      * @param Page $page
  74.      * @param SalesChannelContext $salesChannelContext
  75.      */
  76.     public function addFreeShippingAmount(Cart $cartPage $pageSalesChannelContext $salesChannelContext): void
  77.     {
  78.         $page->addExtension(
  79.             self::FREE_SHIPPING_EXTENSION,
  80.             $this->freeShippingCalculator->calculateAmountToFreeShipping(
  81.                 $cart->getPrice()->getPositionPrice(),
  82.                 $salesChannelContext
  83.             )
  84.         );
  85.     }
  86. }