![]() 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-weee/Helper/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Weee\Helper; use Magento\Sales\Model\Order\Item as OrderItem; use Magento\Quote\Model\Quote\Item\AbstractItem as QuoteAbstractItem; use Magento\Store\Model\Store; use Magento\Store\Model\Website; use Magento\Weee\Model\Tax as WeeeDisplayConfig; /** * WEEE data helper * * @SuppressWarnings(PHPMD.ExcessiveClassComplexity) * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @api * @since 100.0.2 */ class Data extends \Magento\Framework\App\Helper\AbstractHelper { /**#@+ * Constants defined for keys of array, makes typos less likely */ const KEY_WEEE_AMOUNT_INVOICED = 'weee_amount_invoiced'; const KEY_BASE_WEEE_AMOUNT_INVOICED = 'base_weee_amount_invoiced'; const KEY_WEEE_TAX_AMOUNT_INVOICED = 'weee_tax_amount_invoiced'; const KEY_BASE_WEEE_TAX_AMOUNT_INVOICED = 'base_weee_tax_amount_invoiced'; const KEY_WEEE_AMOUNT_REFUNDED = 'weee_amount_refunded'; const KEY_BASE_WEEE_AMOUNT_REFUNDED = 'base_weee_amount_refunded'; const KEY_WEEE_TAX_AMOUNT_REFUNDED = 'weee_tax_amount_refunded'; const KEY_BASE_WEEE_TAX_AMOUNT_REFUNDED = 'base_weee_tax_amount_refunded'; /**#@-*/ /**#@-*/ protected $_storeDisplayConfig = []; /** * Core registry * * @var \Magento\Framework\Registry */ protected $_coreRegistry; /** * Tax data * * @var \Magento\Tax\Helper\Data */ protected $_taxData; /** * @var \Magento\Weee\Model\Tax */ protected $_weeeTax; /** * @var \Magento\Weee\Model\Config */ protected $_weeeConfig; /** * @var \Magento\Store\Model\StoreManagerInterface */ protected $_storeManager; /** * @var string */ protected $cacheProductWeeeAmount = '_cache_product_weee_amount'; /** * @var \Magento\Framework\Serialize\Serializer\Json */ private $serializer; /** * Data constructor. * * @param \Magento\Framework\App\Helper\Context $context * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Weee\Model\Tax $weeeTax * @param \Magento\Weee\Model\Config $weeeConfig * @param \Magento\Tax\Helper\Data $taxData * @param \Magento\Framework\Registry $coreRegistry * @param \Magento\Framework\Serialize\Serializer\Json|null $serializer * @throws \RuntimeException */ public function __construct( \Magento\Framework\App\Helper\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Weee\Model\Tax $weeeTax, \Magento\Weee\Model\Config $weeeConfig, \Magento\Tax\Helper\Data $taxData, \Magento\Framework\Registry $coreRegistry, \Magento\Framework\Serialize\Serializer\Json $serializer = null ) { $this->_storeManager = $storeManager; $this->_weeeTax = $weeeTax; $this->_coreRegistry = $coreRegistry; $this->_taxData = $taxData; $this->_weeeConfig = $weeeConfig; $this->serializer = $serializer ?: \Magento\Framework\App\ObjectManager::getInstance() ->get(\Magento\Framework\Serialize\Serializer\Json::class); parent::__construct($context); } /** * Get weee amount display type on product view page * * @param null|string|bool|int|Store $store * @return int */ public function getPriceDisplayType($store = null) { return $this->_weeeConfig->getPriceDisplayType($store); } /** * Get weee amount display type on product list page * * @param null|string|bool|int|Store $store * @return int */ public function getListPriceDisplayType($store = null) { return $this->_weeeConfig->getListPriceDisplayType($store); } /** * Get weee amount display type in sales modules * * @param null|string|bool|int|Store $store * @return int */ public function getSalesPriceDisplayType($store = null) { return $this->_weeeConfig->getSalesPriceDisplayType($store); } /** * Get weee amount display type in email templates * * @param null|string|bool|int|Store $store * @return int */ public function getEmailPriceDisplayType($store = null) { return $this->_weeeConfig->getEmailPriceDisplayType($store); } /** * Check if weee tax amount should be taxable * * @param null|string|bool|int|Store $store * @return bool */ public function isTaxable($store = null) { return $this->_weeeConfig->isTaxable($store); } /** * Check if weee tax amount should be included to subtotal * * @param null|string|bool|int|Store $store * @return bool */ public function includeInSubtotal($store = null) { return $this->_weeeConfig->includeInSubtotal($store); } /** * Check if fixed taxes are used in system * * @param null|string|bool|int|Store $store * @return bool */ public function isEnabled($store = null) { return $this->_weeeConfig->isEnabled($store); } /** * Check if the FPT totals line(s) should be displayed with tax included * * @param null|string|bool|int|Store $store * @return bool */ public function displayTotalsInclTax($store = null) { // If catalog prices include tax, then display FPT totals with tax included return $this->_taxData->priceIncludesTax($store); } /** * Get weee tax amount for product based on website * * @param \Magento\Catalog\Model\Product $product * @param mixed $website * @return float */ public function getAmountExclTax($product, $website = null) { if (!$product->hasData($this->cacheProductWeeeAmount)) { /** @var \Magento\Store\Model\Store $store */ if ($website) { $store = $this->_storeManager->getWebsite($website)->getDefaultGroup()->getDefaultStore(); } else { $store = $product->getStore(); } $amount = 0; if ($this->isEnabled($store)) { $amount = $this->_weeeTax->getWeeeAmountExclTax($product, null, null, $website); } $product->setData($this->cacheProductWeeeAmount, $amount); } return $product->getData($this->cacheProductWeeeAmount); } /** * Returns display type for price accordingly to current zone * * @param int|int[]|null $compareTo * @param string $zone * @param Store|int|string $store * @return bool|int * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function typeOfDisplay( $compareTo = null, $zone = \Magento\Framework\Pricing\Render::ZONE_DEFAULT, $store = null ) { if (!$this->isEnabled($store)) { return false; } switch ($zone) { case \Magento\Framework\Pricing\Render::ZONE_ITEM_VIEW: $type = $this->getPriceDisplayType($store); break; case \Magento\Framework\Pricing\Render::ZONE_ITEM_LIST: $type = $this->getListPriceDisplayType($store); break; case \Magento\Framework\Pricing\Render::ZONE_SALES: case \Magento\Framework\Pricing\Render::ZONE_CART: $type = $this->getSalesPriceDisplayType($store); break; case \Magento\Framework\Pricing\Render::ZONE_EMAIL: $type = $this->getEmailPriceDisplayType($store); break; default: if ($this->_coreRegistry->registry('current_product')) { $type = $this->getPriceDisplayType($store); } else { $type = $this->getListPriceDisplayType($store); } break; } if ($compareTo === null) { return $type; } else { if (is_array($compareTo)) { return in_array($type, $compareTo); } else { return $type == $compareTo; } } } /** * Proxy for \Magento\Weee\Model\Tax::getProductWeeeAttributes() * * @param \Magento\Catalog\Model\Product $product * @param null|false|\Magento\Framework\DataObject $shipping * @param null|false|\Magento\Framework\DataObject $billing * @param Website $website * @param bool $calculateTaxes * @param bool $round * @return \Magento\Framework\DataObject[] */ public function getProductWeeeAttributes( $product, $shipping = null, $billing = null, $website = null, $calculateTaxes = false, $round = true ) { return $this->_weeeTax->getProductWeeeAttributes( $product, $shipping, $billing, $website, $calculateTaxes, $round ); } /** * Returns applied weee tax amount * * @param QuoteAbstractItem $item * @return float */ public function getWeeeTaxAppliedAmount($item) { return $this->getRecursiveNumericAmount($item, 'getWeeeTaxAppliedAmount'); } /** * Returns applied weee tax amount for the row * * @param QuoteAbstractItem $item * @return float */ public function getWeeeTaxAppliedRowAmount($item) { return $this->getRecursiveNumericAmount($item, 'getWeeeTaxAppliedRowAmount'); } /** * Returns applied base weee tax amount for the row * * @param QuoteAbstractItem|OrderItem $item * @return float * @since 100.2.0 */ public function getBaseWeeeTaxAppliedRowAmount($item) { return $this->getRecursiveNumericAmount($item, 'getBaseWeeeTaxAppliedRowAmnt'); } /** * Returns accumulated amounts for the item * * @param QuoteAbstractItem|OrderItem $item * @param string $functionName * @return float */ protected function getRecursiveNumericAmount($item, $functionName) { if ($item instanceof QuoteAbstractItem || $item instanceof OrderItem) { if ($item->getHasChildren() && $item->isChildrenCalculated()) { $result = 0; $children = $item instanceof OrderItem ? $item->getChildrenItems() : $item->getChildren(); foreach ($children as $child) { $childData = $this->getRecursiveNumericAmount($child, $functionName); if (!empty($childData)) { $result += $childData; } } return $result; } } $data = $item->$functionName(); if (empty($data)) { return 0; } return $data; } /** * Returns applied weee taxes * * @param QuoteAbstractItem $item * @return array */ public function getApplied($item) { if ($item instanceof QuoteAbstractItem) { if ($item->getHasChildren() && $item->isChildrenCalculated()) { $result = []; foreach ($item->getChildren() as $child) { $childData = $this->getApplied($child); if (is_array($childData)) { $result = array_merge($result, $childData); } } return $result; } } // if order item data is old enough then weee_tax_applied might not be valid $data = $item->getWeeeTaxApplied(); if (empty($data)) { return []; } return $this->serializer->unserialize($item->getWeeeTaxApplied()); } /** * Sets applied weee taxes * * @param QuoteAbstractItem $item * @param array $value * @return $this */ public function setApplied($item, $value) { $item->setWeeeTaxApplied($this->serializer->serialize($value)); return $this; } /** * Returns array of weee attributes allowed for display * * @param \Magento\Catalog\Model\Product $product * @return \Magento\Framework\DataObject[] */ public function getProductWeeeAttributesForDisplay($product) { /** @var \Magento\Store\Model\Store $store */ $store = $product->getStore(); if ($this->isEnabled($store)) { $calculateTax = ($this->typeOfDisplay(1) || $this->typeOfDisplay(2)) ? 1 : 0; return $this->getProductWeeeAttributes($product, null, null, null, $calculateTax, false); } return []; } /** * Get Product Weee attributes for price renderer * * @param \Magento\Catalog\Model\Product $product * @param null|false|\Magento\Framework\DataObject $shipping Shipping Address * @param null|false|\Magento\Framework\DataObject $billing Billing Address * @param null|Website $website * @param bool $calculateTaxes * @return \Magento\Framework\DataObject[] */ public function getProductWeeeAttributesForRenderer( $product, $shipping = null, $billing = null, $website = null, $calculateTaxes = false ) { /** @var \Magento\Store\Model\Store $store */ if ($website) { $store = $this->_storeManager->getWebsite($website)->getDefaultGroup()->getDefaultStore(); } else { $store = $product->getStore(); } if ($this->isEnabled($store)) { return $this->getProductWeeeAttributes( $product, $shipping, $billing, $website, $calculateTaxes ? $calculateTaxes : $this->typeOfDisplay(1) ); } return []; } /** * Get the weee tax including tax * * @param QuoteAbstractItem $item * @return float */ public function getWeeeTaxInclTax($item) { $weeeTaxAppliedAmounts = $this->getApplied($item); $totalWeeeTaxIncTaxApplied = 0; foreach ($weeeTaxAppliedAmounts as $weeeTaxAppliedAmount) { $totalWeeeTaxIncTaxApplied += max($weeeTaxAppliedAmount['amount_incl_tax'], 0); } return $totalWeeeTaxIncTaxApplied; } /** * Get the total base weee tax * * @param QuoteAbstractItem $item * @return float */ public function getBaseWeeeTaxInclTax($item) { $weeeTaxAppliedAmounts = $this->getApplied($item); $totalBaseWeeeTaxIncTaxApplied = 0; foreach ($weeeTaxAppliedAmounts as $weeeTaxAppliedAmount) { $totalBaseWeeeTaxIncTaxApplied += max($weeeTaxAppliedAmount['base_amount_incl_tax'], 0); } return $totalBaseWeeeTaxIncTaxApplied; } /** * Get the total weee including tax by row * * @param QuoteAbstractItem $item * @return float */ public function getRowWeeeTaxInclTax($item) { $weeeTaxAppliedAmounts = $this->getApplied($item); $totalWeeeTaxIncTaxApplied = 0; foreach ($weeeTaxAppliedAmounts as $weeeTaxAppliedAmount) { $totalWeeeTaxIncTaxApplied += max($weeeTaxAppliedAmount['row_amount_incl_tax'], 0); } return $totalWeeeTaxIncTaxApplied; } /** * Get the total base weee including tax by row * * @param QuoteAbstractItem $item * @return float */ public function getBaseRowWeeeTaxInclTax($item) { $weeeTaxAppliedAmounts = $this->getApplied($item); $totalWeeeTaxIncTaxApplied = 0; foreach ($weeeTaxAppliedAmounts as $weeeTaxAppliedAmount) { $totalWeeeTaxIncTaxApplied += max($weeeTaxAppliedAmount['base_row_amount_incl_tax'], 0); } return $totalWeeeTaxIncTaxApplied; } /** * Get the total tax applied on weee by unit * * @param QuoteAbstractItem $item * @return float */ public function getTotalTaxAppliedForWeeeTax($item) { $weeeTaxAppliedAmounts = $this->getApplied($item); $totalTaxForWeeeTax = 0; foreach ($weeeTaxAppliedAmounts as $weeeTaxAppliedAmount) { $totalTaxForWeeeTax += max( $weeeTaxAppliedAmount['amount_incl_tax'] - $weeeTaxAppliedAmount['amount'], 0 ); } return $totalTaxForWeeeTax; } /** * Get the total tax applied on weee by unit * * @param QuoteAbstractItem $item * @return float */ public function getBaseTotalTaxAppliedForWeeeTax($item) { $weeeTaxAppliedAmounts = $this->getApplied($item); $totalTaxForWeeeTax = 0; foreach ($weeeTaxAppliedAmounts as $weeeTaxAppliedAmount) { $totalTaxForWeeeTax += max( $weeeTaxAppliedAmount['base_amount_incl_tax'] - $weeeTaxAppliedAmount['base_amount'], 0 ); } return $totalTaxForWeeeTax; } /** * @param OrderItem $orderItem * @return float */ public function getWeeeAmountInvoiced($orderItem) { $weeeTaxAppliedAmounts = $this->getApplied($orderItem); $totalAmountInvoiced = 0; foreach ($weeeTaxAppliedAmounts as $weeeTaxAppliedAmount) { if (isset($weeeTaxAppliedAmount[self::KEY_WEEE_AMOUNT_INVOICED])) { $totalAmountInvoiced = $weeeTaxAppliedAmount[self::KEY_WEEE_AMOUNT_INVOICED]; break; } } return $totalAmountInvoiced; } /** * @param OrderItem $orderItem * @return float */ public function getBaseWeeeAmountInvoiced($orderItem) { $weeeTaxAppliedAmounts = $this->getApplied($orderItem); $baseTotalAmountInvoiced = 0; foreach ($weeeTaxAppliedAmounts as $weeeTaxAppliedAmount) { if (isset($weeeTaxAppliedAmount[self::KEY_BASE_WEEE_AMOUNT_INVOICED])) { $baseTotalAmountInvoiced = $weeeTaxAppliedAmount[self::KEY_BASE_WEEE_AMOUNT_INVOICED]; break; } } return $baseTotalAmountInvoiced; } /** * @param OrderItem $orderItem * @return float */ public function getWeeeTaxAmountInvoiced($orderItem) { $weeeTaxAppliedAmounts = $this->getApplied($orderItem); $totalTaxInvoiced = 0; foreach ($weeeTaxAppliedAmounts as $weeeTaxAppliedAmount) { if (isset($weeeTaxAppliedAmount[self::KEY_WEEE_TAX_AMOUNT_INVOICED])) { $totalTaxInvoiced = $weeeTaxAppliedAmount[self::KEY_WEEE_TAX_AMOUNT_INVOICED]; break; } } return $totalTaxInvoiced; } /** * @param OrderItem $orderItem * @return float */ public function getBaseWeeeTaxAmountInvoiced($orderItem) { $weeeTaxAppliedAmounts = $this->getApplied($orderItem); $baseTotalTaxInvoiced = 0; foreach ($weeeTaxAppliedAmounts as $weeeTaxAppliedAmount) { if (isset($weeeTaxAppliedAmount[self::KEY_BASE_WEEE_TAX_AMOUNT_INVOICED])) { $baseTotalTaxInvoiced = $weeeTaxAppliedAmount[self::KEY_BASE_WEEE_TAX_AMOUNT_INVOICED]; break; } } return $baseTotalTaxInvoiced; } /** * @param OrderItem $orderItem * @return float */ public function getWeeeAmountRefunded($orderItem) { $weeeTaxAppliedAmounts = $this->getApplied($orderItem); $totalAmountRefunded = 0; foreach ($weeeTaxAppliedAmounts as $weeeTaxAppliedAmount) { if (isset($weeeTaxAppliedAmount[self::KEY_WEEE_AMOUNT_REFUNDED])) { $totalAmountRefunded = $weeeTaxAppliedAmount[self::KEY_WEEE_AMOUNT_REFUNDED]; break; } } return $totalAmountRefunded; } /** * @param OrderItem $orderItem * @return float */ public function getBaseWeeeAmountRefunded($orderItem) { $weeeTaxAppliedAmounts = $this->getApplied($orderItem); $baseTotalAmountRefunded = 0; foreach ($weeeTaxAppliedAmounts as $weeeTaxAppliedAmount) { if (isset($weeeTaxAppliedAmount[self::KEY_BASE_WEEE_AMOUNT_REFUNDED])) { $baseTotalAmountRefunded = $weeeTaxAppliedAmount[self::KEY_BASE_WEEE_AMOUNT_REFUNDED]; break; } } return $baseTotalAmountRefunded; } /** * @param OrderItem $orderItem * @return float */ public function getWeeeTaxAmountRefunded($orderItem) { $weeeTaxAppliedAmounts = $this->getApplied($orderItem); $totalTaxRefunded = 0; foreach ($weeeTaxAppliedAmounts as $weeeTaxAppliedAmount) { if (isset($weeeTaxAppliedAmount[self::KEY_WEEE_TAX_AMOUNT_REFUNDED])) { $totalTaxRefunded = $weeeTaxAppliedAmount[self::KEY_WEEE_TAX_AMOUNT_REFUNDED]; break; } } return $totalTaxRefunded; } /** * @param OrderItem $orderItem * @return float */ public function getBaseWeeeTaxAmountRefunded($orderItem) { $weeeTaxAppliedAmounts = $this->getApplied($orderItem); $baseTotalTaxRefunded = 0; foreach ($weeeTaxAppliedAmounts as $weeeTaxAppliedAmount) { if (isset($weeeTaxAppliedAmount[self::KEY_BASE_WEEE_TAX_AMOUNT_REFUNDED])) { $baseTotalTaxRefunded = $weeeTaxAppliedAmount[self::KEY_BASE_WEEE_TAX_AMOUNT_REFUNDED]; break; } } return $baseTotalTaxRefunded; } /** * Returns the total amount of FPT across all items. Used for displaying the FPT totals line item. * * @param QuoteAbstractItem[] $items * @param null|string|bool|int|Store $store * @return float */ public function getTotalAmounts($items, $store = null) { $weeeTotal = 0; $displayTotalsInclTax = $this->displayTotalsInclTax($store); foreach ($items as $item) { if ($displayTotalsInclTax) { $weeeTotal += $this->getRowWeeeTaxInclTax($item); } else { $weeeTotal += $item->getWeeeTaxAppliedRowAmount(); } } return $weeeTotal; } /** * Returns the base total amount of FPT across all items. Used for displaying the FPT totals line item. * * @param QuoteAbstractItem[] $items * @param null|string|bool|int|Store $store * @return float * @since 100.1.0 */ public function getBaseTotalAmounts($items, $store = null) { $baseWeeeTotal = 0; $displayTotalsInclTax = $this->displayTotalsInclTax($store); foreach ($items as $item) { if ($displayTotalsInclTax) { $baseWeeeTotal += $this->getBaseRowWeeeTaxInclTax($item); } else { $baseWeeeTotal += $item->getBaseWeeeTaxAppliedRowAmnt(); } } return $baseWeeeTotal; } /** * Get FPT DISPLAY_INCL setting * * @param int|null $storeId * @return bool */ public function isDisplayIncl($storeId = null) { return $this->typeOfDisplay( WeeeDisplayConfig::DISPLAY_INCL, \Magento\Framework\Pricing\Render::ZONE_ITEM_VIEW, $storeId ); } /** * Get FPT DISPLAY_INCL_DESCR setting * * @param int|null $storeId * @return bool */ public function isDisplayInclDesc($storeId = null) { return $this->typeOfDisplay( WeeeDisplayConfig::DISPLAY_INCL_DESCR, \Magento\Framework\Pricing\Render::ZONE_ITEM_VIEW, $storeId ); } /** * Get FPT DISPLAY_EXCL_DESCR_INCL setting * * @param int|null $storeId * @return bool */ public function isDisplayExclDescIncl($storeId = null) { return $this->typeOfDisplay( WeeeDisplayConfig::DISPLAY_EXCL_DESCR_INCL, \Magento\Framework\Pricing\Render::ZONE_ITEM_VIEW, $storeId ); } /** * Get FPT DISPLAY_EXCL setting * * @param int|null $storeId * @return bool */ public function isDisplayExcl($storeId = null) { return $this->typeOfDisplay( WeeeDisplayConfig::DISPLAY_EXCL, \Magento\Framework\Pricing\Render::ZONE_ITEM_VIEW, $storeId ); } /** * Get tax price display settings * * @param null|string|bool|int|Store $store * @return int */ public function getTaxDisplayConfig($store = null) { return $this->_taxData->getPriceDisplayType($store); } /** * Return an array of FPT attributes for a bundle product * * @param \Magento\Catalog\Model\Product $product * @return array */ public function getWeeeAttributesForBundle($product) { if ($product->getTypeId() == \Magento\Catalog\Model\Product\Type::TYPE_BUNDLE) { $typeInstance = $product->getTypeInstance(); $typeInstance->setStoreFilter($product->getStoreId(), $product); $selectionCollection = $typeInstance->getSelectionsCollection( $typeInstance->getOptionsIds($product), $product ); $insertedWeeeCodesArray = []; foreach ($selectionCollection as $selectionItem) { $weeeAttributes = $this->getProductWeeeAttributes( $selectionItem, null, null, $product->getStore()->getWebsiteId(), true, false ); $priceTaxDisplay = $this->getTaxDisplayConfig(); $priceIncludesTax = $this->displayTotalsInclTax(); foreach ($weeeAttributes as $weeeAttribute) { if ($priceTaxDisplay == \Magento\Tax\Model\Config::DISPLAY_TYPE_INCLUDING_TAX || $priceTaxDisplay == \Magento\Tax\Model\Config::DISPLAY_TYPE_BOTH) { if ($priceIncludesTax == false) { $weeeAttribute['amount'] = $weeeAttribute['amount_excl_tax'] + $weeeAttribute['tax_amount']; } } elseif ($priceTaxDisplay == \Magento\Tax\Model\Config::DISPLAY_TYPE_EXCLUDING_TAX) { if ($priceIncludesTax == true) { $weeeAttribute['amount'] = $weeeAttribute['amount_excl_tax']; } } $insertedWeeeCodesArray[$selectionItem->getId()][$weeeAttribute->getCode()] = $weeeAttribute; } } return $insertedWeeeCodesArray; } return []; } }