![]() 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-bundle/Pricing/Price/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Bundle\Pricing\Price; use Magento\Bundle\Pricing\Adjustment\BundleCalculatorInterface; use Magento\Framework\Pricing\SaleableInterface; use Magento\Framework\Pricing\Amount\AmountInterface; use Magento\Catalog\Model\Product; /** * Bundle option price calculation model. */ class BundleOptions { /** * @var BundleCalculatorInterface */ private $calculator; /** * @var BundleSelectionFactory */ private $selectionFactory; /** * @var AmountInterface[] */ private $optionSelectionAmountCache = []; /** * @param BundleCalculatorInterface $calculator * @param BundleSelectionFactory $bundleSelectionFactory */ public function __construct( BundleCalculatorInterface $calculator, BundleSelectionFactory $bundleSelectionFactory ) { $this->calculator = $calculator; $this->selectionFactory = $bundleSelectionFactory; } /** * Get Options with attached Selections collection. * * @param SaleableInterface $bundleProduct * @return \Magento\Bundle\Model\ResourceModel\Option\Collection|array */ public function getOptions(SaleableInterface $bundleProduct) { /** @var \Magento\Bundle\Model\Product\Type $typeInstance */ $typeInstance = $bundleProduct->getTypeInstance(); $typeInstance->setStoreFilter($bundleProduct->getStoreId(), $bundleProduct); /** @var \Magento\Bundle\Model\ResourceModel\Option\Collection $optionCollection */ $optionCollection = $typeInstance->getOptionsCollection($bundleProduct); /** @var \Magento\Bundle\Model\ResourceModel\Selection\Collection $selectionCollection */ $selectionCollection = $typeInstance->getSelectionsCollection( $typeInstance->getOptionsIds($bundleProduct), $bundleProduct ); $priceOptions = $optionCollection->appendSelections($selectionCollection, true, false); return $priceOptions; } /** * Calculate maximal or minimal options value. * * @param SaleableInterface $bundleProduct * @param bool $searchMin * * @return float */ public function calculateOptions( SaleableInterface $bundleProduct, bool $searchMin = true ) : float { $priceList = []; /* @var \Magento\Bundle\Model\Option $option */ foreach ($this->getOptions($bundleProduct) as $option) { if ($searchMin && !$option->getRequired()) { continue; } /** @var \Magento\Bundle\Pricing\Price\BundleSelectionPrice $selectionPriceList */ $selectionPriceList = $this->calculator->createSelectionPriceList($option, $bundleProduct); $selectionPriceList = $this->calculator->processOptions($option, $selectionPriceList, $searchMin); $priceList = array_merge($priceList, $selectionPriceList); } $amount = $this->calculator->calculateBundleAmount(0., $bundleProduct, $priceList); return $amount->getValue(); } /** * Get selection amount. * * @param Product $bundleProduct * @param \Magento\Bundle\Model\Selection|Product $selection * @param bool $useRegularPrice * * @return AmountInterface */ public function getOptionSelectionAmount( Product $bundleProduct, $selection, bool $useRegularPrice = false ) : AmountInterface { $cacheKey = implode( '_', [ $bundleProduct->getId(), $selection->getOptionId(), $selection->getSelectionId(), $useRegularPrice ? 1 : 0, ] ); if (!isset($this->optionSelectionAmountCache[$cacheKey])) { $selectionPrice = $this->selectionFactory ->create( $bundleProduct, $selection, $selection->getSelectionQty(), ['useRegularPrice' => $useRegularPrice] ); $this->optionSelectionAmountCache[$cacheKey] = $selectionPrice->getAmount(); } return $this->optionSelectionAmountCache[$cacheKey]; } }