![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-tax/Observer/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Tax\Observer; use Magento\Catalog\Pricing\Price\BasePrice; use Magento\Catalog\Pricing\Price\RegularPrice; use Magento\Framework\Event\ObserverInterface; /** * Modifies the bundle config for the front end to resemble the tax included price when tax included prices. */ class GetPriceConfigurationObserver implements ObserverInterface { /** * Tax data * * @var \Magento\Tax\Helper\Data */ protected $taxData; /** * @var \Magento\Framework\Registry */ protected $registry; /** * @var array Cache of the current bundle selection items */ private $selectionCache = []; /** * @param \Magento\Framework\Registry $registry * @param \Magento\Tax\Helper\Data $taxData */ public function __construct( \Magento\Framework\Registry $registry, \Magento\Tax\Helper\Data $taxData ) { $this->registry = $registry; $this->taxData = $taxData; } /** * Modify the bundle config for the front end to resemble the tax included price when tax included prices * * @param \Magento\Framework\Event\Observer $observer * @return $this * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function execute(\Magento\Framework\Event\Observer $observer) { $this->selectionCache = []; if ($this->taxData->displayPriceIncludingTax()) { /** @var \Magento\Catalog\Model\Product $product */ $product = $this->registry->registry('current_product'); if ($product->getTypeId() == \Magento\Catalog\Model\Product\Type::TYPE_BUNDLE) { $priceConfigObj = $observer->getData('configObj'); try { $priceConfig = $this->recurConfigAndUpdatePrice( $priceConfigObj->getConfig(), 'prices' ); $priceConfigObj->setConfig($priceConfig); } catch (\Exception $e) { return $this; } } } return $this; } /** * Recurse through the config array and modify the base price * * @param array $input * @param string $searchKey * @return array */ private function recurConfigAndUpdatePrice($input, $searchKey) { $holder = []; if (is_array($input)) { foreach ($input as $key => $el) { if (is_array($el)) { $holder[$key] = $this->recurConfigAndUpdatePrice($el, $searchKey); if ($key === $searchKey && array_key_exists('optionId', $input) && array_key_exists('basePrice', $holder[$key]) ) { $holder = $this->updatePriceForBundle($holder, $key); } } else { $holder[$key] = $el; } } } return $holder; } /** * Update the base price for bundle product option * * @param array $holder * @param int|string $key * @return array */ private function updatePriceForBundle($holder, $key) { if (array_key_exists($key, $holder) && array_key_exists('basePrice', $holder[$key])) { /** @var \Magento\Catalog\Model\Product $product */ $product = $this->registry->registry('current_product'); if ($product->getTypeId() == \Magento\Catalog\Model\Product\Type::TYPE_BUNDLE) { if (!isset($this->selectionCache[$product->getId()])) { $typeInstance = $product->getTypeInstance(); $typeInstance->setStoreFilter($product->getStoreId(), $product); $selectionCollection = $typeInstance->getSelectionsCollection( $typeInstance->getOptionsIds($product), $product ); $this->selectionCache[$product->getId()] = $selectionCollection->getItems(); } $arrSelections = $this->selectionCache[$product->getId()]; foreach ($arrSelections as $selectionItem) { if ($holder['optionId'] == $selectionItem->getId()) { /** @var \Magento\Framework\Pricing\Amount\Base $baseAmount */ $baseAmount = $selectionItem->getPriceInfo()->getPrice(BasePrice::PRICE_CODE)->getAmount(); /** @var \Magento\Framework\Pricing\Amount\Base $oldAmount */ $oldAmount = $selectionItem->getPriceInfo()->getPrice(RegularPrice::PRICE_CODE)->getAmount(); if ($baseAmount->hasAdjustment('tax')) { $holder[$key]['basePrice']['amount'] = $baseAmount->getBaseAmount() + $baseAmount->getAdjustmentAmount('tax'); $holder[$key]['oldPrice']['amount'] = $oldAmount->getBaseAmount() + $oldAmount->getAdjustmentAmount('tax'); } } } } } return $holder; } }