/** * @param \Magento\Catalog\Model\Product $product * @return array */ protected function getVisibilities($product) { /** @var \Magento\Catalog\Model\Product[] $collection */ $collection = $product->getTypeInstance()->getAssociatedProducts($product) ?: []; $visibilities = []; /** @var \Magento\Catalog\Model\Product $item */ foreach ($collection as $item) { if ($this->msrpData->canApplyMsrp($item)) { $visibilities[] = $item->getMsrpDisplayActualPriceType() == TypePrice::TYPE_USE_CONFIG ? $this->config->getDisplayActualPriceType() : $item->getMsrpDisplayActualPriceType(); } } return $visibilities; }
/** * Check if can apply Minimum Advertise price to product * in specific visibility * * @param int|Product $product * @param int|null $visibility Check displaying price in concrete place (by default generally) * @return bool * * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function canApplyMsrp($product, $visibility = null) { if (!$this->config->isEnabled()) { return false; } if (is_numeric($product)) { $product = $this->productRepository->getById($product, false, $this->storeManager->getStore()->getId()); } $result = $this->msrp->canApplyToProduct($product); if ($result && $visibility !== null) { $productPriceVisibility = $product->getMsrpDisplayActualPriceType(); if ($productPriceVisibility == Type\Price::TYPE_USE_CONFIG) { $productPriceVisibility = $this->config->getDisplayActualPriceType(); } $result = $productPriceVisibility == $visibility; } if ($product->getTypeInstance()->isComposite($product) && (!$result || $visibility !== null)) { $isEnabledInOptions = $this->productOptions->isEnabled($product, $visibility); if ($isEnabledInOptions !== null) { $result = $isEnabledInOptions; } } return $result; }