custom/plugins/WbfkExtensions/src/Service/TaxSwitchServiceDecorator.php line 33

Open in your IDE?
  1. <?php
  2. namespace WbfkExtensions\Service;
  3. use Maxia\MaxiaTaxSwitch6\Service\TaxSwitchService;
  4. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  5. use Shopware\Core\System\SystemConfig\SystemConfigService;
  6. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. class TaxSwitchServiceDecorator extends TaxSwitchService
  9. {
  10.     private const FORCE_NET_FOR_PATHS '~'
  11.         '^/checkout/order$'
  12.         '|' '^/offer-checkout/[a-zA-Z0-9_-]*/order$'
  13.         '|' '^/offer/[a-zA-Z0-9_-]*$' // Offer Deeplink checkout
  14.         '|' '^/api/_action/sm-split-order/move-line-items-to-new-order$' // Plugin: SchnitzraumSplitOrderSW6 - Split Orders
  15.         '|' '^/api/_action/sm-split-order/copy-line-items-to-new-order$' // Plugin: SchnitzraumSplitOrderSW6 - Split Orders
  16.         '|' '^/api/_action/product-price/order/*$' // On Recalculating in the Backend
  17.     '~';
  18.     public function __construct(
  19.         RequestStack $requestStack,
  20.         EventDispatcherInterface $eventDispatcher,
  21.         SystemConfigService $configService,
  22.         private readonly TaxSwitchService $decoratedService
  23.     ) {
  24.         parent::__construct($requestStack$eventDispatcher$configService);
  25.     }
  26.     public function initializeContext(SalesChannelContext $context): SalesChannelContext
  27.     {
  28.         if($this->isOfferPreviewOrDownload()){
  29.             return $context;
  30.         }
  31.         return $this->decoratedService->initializeContext($context);
  32.     }
  33.     /**
  34.      * Returns the current tax switch setting.
  35.      * We force the taxState to be net for certain paths
  36.      * Set null/plugin deactivated state for offer preview or download from admin
  37.      */
  38.     public function getDisplayNet(SalesChannelContext $context): ?bool
  39.     {
  40.         if($this->isOfferPreviewOrDownload()){
  41.             return null;
  42.         }
  43.         if ($context->hasState('allow_net_cart')) {
  44.             return true;
  45.         }
  46.         if ($this->getMainRequest() && preg_match(self::FORCE_NET_FOR_PATHS$this->getMainRequest()->getPathInfo())) {
  47.             return true;
  48.         }
  49.         if ($this->isApiRequest()) {
  50.             /*
  51.              * Yes, on requests to the API, we want to force TAX_FREE or NET
  52.              * E.g. Orders created in the Admin
  53.              */
  54.             return true;
  55.         }
  56.         return $this->decoratedService->getDisplayNet($context);
  57.     }
  58.     public function setDisplayNet(SalesChannelContext $contextbool $displayNet): void
  59.     {
  60.         $this->decoratedService->setDisplayNet($context$displayNet);
  61.     }
  62.     protected function isOfferPreviewOrDownload(): bool
  63.     {
  64.         return $this->getMainRequest() && (
  65.                 str_starts_with($this->getMainRequest()->getPathInfo(), '/api/_action/wbfk-offer/preview') ||
  66.                 str_starts_with($this->getMainRequest()->getPathInfo(), '/api/_action/wbfk-offer/download')
  67.             );
  68.     }
  69. }