custom/plugins/AmMacTradeCustomPlugins/src/Core/Checkout/Promotion/Cart/ProcessorCustom.php line 32

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace AmMacTradeCustomPlugins\Core\Checkout\Promotion\Cart;
  4. use AmMacTradeCustomPlugins\Subscriber\MacTradeSubscriber;
  5. use Shopware\Core\Checkout\Cart\Cart;
  6. use Shopware\Core\Checkout\Cart\CartBehavior;
  7. use Shopware\Core\Checkout\Cart\CartProcessorInterface;
  8. use Shopware\Core\Checkout\Cart\LineItem\CartDataCollection;
  9. use Shopware\Core\Checkout\Cart\LineItem\LineItem;
  10. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  11. use Shopware\Core\Checkout\Cart\Price\Struct\QuantityPriceDefinition;
  12. use Shopware\Core\Checkout\Cart\Price\QuantityPriceCalculator;
  13. use Shopware\Core\System\SystemConfig\SystemConfigService;
  14. class ProcessorCustom implements CartProcessorInterface
  15. {
  16.     private QuantityPriceCalculator $QPCalculator;
  17.     private SystemConfigService $systemConfigService;
  18.     public function __construct(
  19.         QuantityPriceCalculator $QPCalculator,
  20.         SystemConfigService     $systemConfigService
  21.     )
  22.     {
  23.         $this->QPCalculator $QPCalculator;
  24.         $this->systemConfigService $systemConfigService;
  25.     }
  26.     public function process(CartDataCollection $dataCart $originalCart $toCalculateSalesChannelContext $contextCartBehavior $behavior): void
  27.     {
  28.         $config $this->systemConfigService->get('AmMacTradeCustomPlugins.config');
  29.         $configIdealoFeedManagement $config['idealoFeed'] ?? false;
  30.         if ($configIdealoFeedManagement) {
  31.             $lineItems $toCalculate->getLineItems()->filterType(LineItem::PRODUCT_LINE_ITEM_TYPE);
  32.             $productsOriginal $original->getLineItems()->filterType(LineItem::PRODUCT_LINE_ITEM_TYPE);
  33.             if (@$_SESSION['CREATED'] && (time() - $_SESSION['CREATED'] > MacTradeSubscriber::SESSION_EXPIRE_TIME)) {
  34.                 // session started more than 2 minutes ago
  35.                 unset($_SESSION['sw-idealo-feed-product-id']);
  36.                 unset($_SESSION['sw-platform-url']);
  37.                 unset($_SESSION['CREATED']);
  38.                 // session_regenerate_id(true);   // change session ID for the current session and invalidate old session ID
  39.             }
  40.             foreach ($lineItems as $lineItem) {
  41.                 // Session data for product
  42.                 $comparisonSite = @$_SESSION['sw-idealo-feed-product-id'];
  43.                 if (@$comparisonSite && sizeof($comparisonSite) > && in_array($lineItem->getReferencedId(), $comparisonSite)) {
  44. //                $originalUnitPrice = @$lineItem->getPayload()['customFields']['product_custom_fields_idealo'] ? $lineItem->getPayload()['customFields']['product_custom_fields_idealo'] : $lineItem->getPrice()->getUnitPrice();
  45.                     $originalUnitPrice $lineItem->getPayload()['customFields']['product_custom_fields_idealo'] ?? $lineItem->getPrice()->getUnitPrice();
  46.                 } else {
  47.                     $originalUnitPrice $lineItem->getPrice()->getUnitPrice();
  48.                 }
  49.                 // build new price definition
  50.                 $definition = new QuantityPriceDefinition(
  51.                     $originalUnitPrice,
  52.                     $lineItem->getPrice()->getTaxRules(),
  53.                     $lineItem->getPrice()->getQuantity()
  54.                 );
  55.                 // build CalculatedPrice over calculator class for overwritten price
  56.                 $QPCalculated $this->QPCalculator->calculate($definition$context);
  57.                 // set new price into line item
  58.                 $lineItem->setPrice($QPCalculated);
  59.                 $lineItem->setPriceDefinition($definition);
  60.             }
  61.             foreach ($productsOriginal as $product) {
  62.                 // Session data for product
  63.                 $comparisonSite = @$_SESSION['sw-idealo-feed-product-id'];
  64.                 if (@$comparisonSite && sizeof($comparisonSite) > && in_array($product->getReferencedId(), $comparisonSite)) {
  65. //                $originalUnitPrice = @$product->getPayload()['customFields']['product_custom_fields_idealo'] ? $product->getPayload()['customFields']['product_custom_fields_idealo'] : $product->getPrice()->getUnitPrice();
  66.                     $originalUnitPrice $product->getPayload()['customFields']['product_custom_fields_idealo'] ?? $product->getPrice()->getUnitPrice();
  67.                 } else {
  68.                     $originalUnitPrice $product->getPrice()->getUnitPrice();
  69.                 }
  70.                 // build new price definition
  71.                 $definition = new QuantityPriceDefinition(
  72.                     $originalUnitPrice,
  73.                     $product->getPrice()->getTaxRules(),
  74.                     $product->getPrice()->getQuantity()
  75.                 );
  76.                 // build CalculatedPrice over calculator class for overwritten price
  77.                 $QPCalculated $this->QPCalculator->calculate($definition$context);
  78.                 // set new price into line item
  79.                 $product->setPrice($QPCalculated);
  80.                 $product->setPriceDefinition($definition);
  81.             }
  82.         }
  83.     }
  84. }