12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\GroupedProduct\Pricing\Price;
- use Magento\Catalog\Model\Product;
- use Magento\Catalog\Pricing\Price\FinalPriceInterface;
- /**
- * Final price model
- */
- class FinalPrice extends \Magento\Catalog\Pricing\Price\FinalPrice implements FinalPriceInterface
- {
- /**
- * Price type final
- */
- const PRICE_CODE = 'final_price';
- /**
- * @var Product
- */
- protected $minProduct;
- /**
- * Return minimal product price
- *
- * @return float
- */
- public function getValue()
- {
- $minProduct = $this->getMinProduct();
- return $minProduct ?
- $minProduct->getPriceInfo()->getPrice(FinalPrice::PRICE_CODE)->getValue() :
- 0.00;
- }
- /**
- * Returns product with minimal price
- *
- * @return Product
- */
- public function getMinProduct()
- {
- if (null === $this->minProduct) {
- $products = $this->product->getTypeInstance()->getAssociatedProducts($this->product);
- $minPrice = null;
- foreach ($products as $item) {
- $product = clone $item;
- $product->setQty(\Magento\Framework\Pricing\PriceInfoInterface::PRODUCT_QUANTITY_DEFAULT);
- $price = $product->getPriceInfo()
- ->getPrice(FinalPrice::PRICE_CODE)
- ->getValue();
- if (($price !== false) && ($price <= ($minPrice === null ? $price : $minPrice))) {
- $this->minProduct = $product;
- $minPrice = $price;
- }
- }
- }
- return $this->minProduct;
- }
- }
|