<?php declare(strict_types=1);
namespace KliksteenPriceVATToggle\Subscriber;
use Shopware\Core\Checkout\Cart\Price\Struct\CartPrice;
use Shopware\Core\Checkout\Customer\CustomerEvents;
use Shopware\Core\Content\Cms\Events\CmsPageLoaderCriteriaEvent;
use Shopware\Core\Content\Product\Events\ProductListingCriteriaEvent;
use Shopware\Core\Content\Product\Events\ProductSearchCriteriaEvent;
use Shopware\Core\Content\Product\Events\ProductSuggestCriteriaEvent;
use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Shopware\Core\System\SystemConfig\SystemConfigService;
use Shopware\Core\Content\Product\ProductEvents;
use Shopware\Core\System\SalesChannel\Entity\SalesChannelEntityLoadedEvent;
use Shopware\Storefront\Page\Product\ProductPageCriteriaEvent;
use Symfony\Component\HttpFoundation\Session\Session;
class ProductLoaded implements EventSubscriberInterface
{
private $systemConfigService;
/**
* @var Session
*/
private $session;
public function __construct(Session $session,SystemConfigService $systemConfigService)
{
// Get system config
$this->session = $session;
$this->systemConfigService = $systemConfigService;
}
/**
* @return array
*/
public static function getSubscribedEvents(): array
{
return [
ProductListingCriteriaEvent::class => 'onProductCriteriaLoaded',
ProductSuggestCriteriaEvent::class => 'onProductSuggestCriteriaLoaded',
ProductSearchCriteriaEvent::class => 'onProductSearchCriteriaLoaded',
ProductPageCriteriaEvent::class => 'onProductPageCriteriaLoaded',
CmsPageLoaderCriteriaEvent::class => "onCMSCriteriaLoaded"
];
}
public function onCMSCriteriaLoaded(CmsPageLoaderCriteriaEvent $event)
{
$salesChannelContext = $event->getSalesChannelContext();
$taxState = $this->getTaxState();
$salesChannelContext->getContext()->setTaxState($taxState);
}
public function onProductSuggestCriteriaLoaded(ProductSuggestCriteriaEvent $event)
{
$salesChannelContext = $event->getSalesChannelContext();
$taxState = $this->getTaxState();
$salesChannelContext->getContext()->setTaxState($taxState);
}
public function onProductSearchCriteriaLoaded(ProductSearchCriteriaEvent $event)
{
$salesChannelContext = $event->getSalesChannelContext();
$taxState = $this->getTaxState();
$salesChannelContext->getContext()->setTaxState($taxState);
}
public function onProductCriteriaLoaded(ProductListingCriteriaEvent $event)
{
$salesChannelContext = $event->getSalesChannelContext();
$taxState = $this->getTaxState();
$salesChannelContext->getContext()->setTaxState($taxState);
}
public function onProductPageCriteriaLoaded(ProductPageCriteriaEvent $event)
{
$salesChannelContext = $event->getSalesChannelContext();
$taxState = $this->getTaxState();
$salesChannelContext->getContext()->setTaxState($taxState);
}
private function getTaxState()
{
$taxState = '';
if($this->session->has('toggleCustomerGroup')) {
if($this->session->get('toggleCustomerGroup') == 'NET'){
$taxState = CartPrice::TAX_STATE_NET;
}else{
$taxState = CartPrice::TAX_STATE_GROSS;
}
}else{
$this->session->set('toggleCustomerGroup', 'NET');
$taxState = CartPrice::TAX_STATE_NET;
}
return $taxState;
}
}