11<?php
22/**
3- * Copyright © Magento, Inc. All rights reserved.
4- * See COPYING.txt for license details .
3+ * Copyright 2015 Adobe
4+ * All Rights Reserved .
55 */
66
77namespace Magento \ConfigurableProduct \Pricing \Price ;
88
99use Magento \Catalog \Model \Product ;
10- use Magento \ConfigurableProduct \Model \ConfigurableMaxPriceCalculator ;
1110use Magento \Framework \App \ObjectManager ;
1211use Magento \Framework \ObjectManager \ResetAfterRequestInterface ;
1312use Magento \Framework \Pricing \Price \AbstractPrice ;
@@ -55,18 +54,12 @@ class ConfigurableRegularPrice extends AbstractPrice implements
5554 */
5655 private $ lowestPriceOptionsProvider ;
5756
58- /**
59- * @var ConfigurableMaxPriceCalculator
60- */
61- private $ configurableMaxPriceCalculator ;
62-
6357 /**
6458 * @param \Magento\Framework\Pricing\SaleableInterface $saleableItem
6559 * @param float $quantity
6660 * @param \Magento\Framework\Pricing\Adjustment\CalculatorInterface $calculator
6761 * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
6862 * @param PriceResolverInterface $priceResolver
69- * @param ConfigurableMaxPriceCalculator $configurableMaxPriceCalculator
7063 * @param LowestPriceOptionsProviderInterface $lowestPriceOptionsProvider
7164 */
7265 public function __construct (
@@ -75,14 +68,12 @@ public function __construct(
7568 \Magento \Framework \Pricing \Adjustment \CalculatorInterface $ calculator ,
7669 \Magento \Framework \Pricing \PriceCurrencyInterface $ priceCurrency ,
7770 PriceResolverInterface $ priceResolver ,
78- ConfigurableMaxPriceCalculator $ configurableMaxPriceCalculator ,
7971 ?LowestPriceOptionsProviderInterface $ lowestPriceOptionsProvider = null
8072 ) {
8173 parent ::__construct ($ saleableItem , $ quantity , $ calculator , $ priceCurrency );
8274 $ this ->priceResolver = $ priceResolver ;
8375 $ this ->lowestPriceOptionsProvider = $ lowestPriceOptionsProvider ?:
8476 ObjectManager::getInstance ()->get (LowestPriceOptionsProviderInterface::class);
85- $ this ->configurableMaxPriceCalculator = $ configurableMaxPriceCalculator ;
8677 }
8778
8879 /**
@@ -196,26 +187,28 @@ public function _resetState(): void
196187 }
197188
198189 /**
199- * Check whether Configurable Product have more than one children products
190+ * Check whether Configurable Product has more than one child product and if their prices are equal
200191 *
201192 * @param SaleableInterface $product
202193 * @return bool
203194 */
204195 public function isChildProductsOfEqualPrices (SaleableInterface $ product ): bool
205196 {
206- $ minPrice = $ this ->getMinRegularAmount ()->getValue ();
207- $ final_price = $ product ->getFinalPrice ();
208- $ productId = $ product ->getId ();
209- if ($ final_price < $ minPrice ) {
210- return false ;
197+ // Get all child products of the configurable product
198+ $ childProducts = $ product ->getTypeInstance ()->getUsedProducts ($ product );
199+ if (count ($ childProducts ) <= 1 ) {
200+ return false ; // Not more than one child product
211201 }
212- $ attributes = $ product ->getTypeInstance ()->getConfigurableAttributes ($ product );
213- $ items = $ attributes ->getItems ();
214- $ options = reset ($ items );
215- $ maxPrice = $ this ->configurableMaxPriceCalculator ->getMaxPriceForConfigurableProduct ($ productId );
216- if ($ maxPrice == 0 ) {
217- $ maxPrice = $ this ->getMaxRegularAmount ()->getValue ();
202+
203+ $ prices = [];
204+ foreach ($ childProducts as $ child ) {
205+ $ prices [] = $ child ->getFinalPrice ();
218206 }
219- return (count ($ options ->getOptions ()) > 1 ) && $ minPrice == $ maxPrice ;
207+
208+ $ minPrice = min ($ prices );
209+ $ maxPrice = max ($ prices );
210+
211+ // Return true only if all child prices are equal (min == max)
212+ return $ minPrice == $ maxPrice ;
220213 }
221214}
0 commit comments