/** * @covers \Magento\Catalog\Model\Product::addCustomOption * @covers \Magento\Catalog\Model\Product::setCustomOptions * @covers \Magento\Catalog\Model\Product::getCustomOptions * @covers \Magento\Catalog\Model\Product::getCustomOption * @covers \Magento\Catalog\Model\Product::hasCustomOptions */ public function testCustomOptionsApi() { $this->assertEquals([], $this->_model->getCustomOptions()); $this->assertFalse($this->_model->hasCustomOptions()); $this->_model->setId(99); $this->_model->addCustomOption('one', 'value1'); $option = $this->_model->getCustomOption('one'); $this->assertInstanceOf('Magento\\Framework\\DataObject', $option); $this->assertEquals($this->_model->getId(), $option->getProductId()); $this->assertSame($option->getProduct(), $this->_model); $this->assertEquals('one', $option->getCode()); $this->assertEquals('value1', $option->getValue()); $this->assertEquals(['one' => $option], $this->_model->getCustomOptions()); $this->assertTrue($this->_model->hasCustomOptions()); $this->_model->setCustomOptions(['test']); $this->assertTrue(is_array($this->_model->getCustomOptions())); }
/** * Return product weight based on simple product * weight or configurable product weight * * @param \Magento\Catalog\Model\Product $product * @return float */ public function getWeight($product) { if ($product->hasCustomOptions() && ($simpleProductOption = $product->getCustomOption('simple_product'))) { $simpleProduct = $simpleProductOption->getProduct(); if ($simpleProduct) { return $simpleProduct->getWeight(); } } return $product->getData('weight'); }
/** * Check is virtual product * * @param \Magento\Catalog\Model\Product $product * @return bool */ public function isVirtual($product) { if ($product->hasCustomOptions()) { $customOption = $product->getCustomOption('bundle_selection_ids'); $selectionIds = unserialize($customOption->getValue()); $selections = $this->getSelectionsByIds($selectionIds, $product); $virtualCount = 0; foreach ($selections->getItems() as $selection) { if ($selection->isVirtual()) { $virtualCount++; } } return $virtualCount == count($selections); } return false; }
/** * Get Total price for Bundle items * * @param \Magento\Catalog\Model\Product $product * @param null|float $qty * @return float */ public function getTotalBundleItemsPrice($product, $qty = null) { $price = 0.0; if ($product->hasCustomOptions()) { $customOption = $product->getCustomOption('bundle_selection_ids'); if ($customOption) { $selectionIds = unserialize($customOption->getValue()); $selections = $product->getTypeInstance()->getSelectionsByIds($selectionIds, $product); $selections->addTierPriceData(); $this->_eventManager->dispatch('prepare_catalog_product_collection_prices', ['collection' => $selections, 'store_id' => $product->getStoreId()]); foreach ($selections->getItems() as $selection) { if ($selection->isSalable()) { $selectionQty = $product->getCustomOption('selection_qty_' . $selection->getSelectionId()); if ($selectionQty) { $price += $this->getSelectionFinalTotalPrice($product, $selection, $qty, $selectionQty->getValue()); } } } } } return $price; }
/** * {@inheritdoc} */ public function hasCustomOptions() { $pluginInfo = $this->pluginList->getNext($this->subjectType, 'hasCustomOptions'); if (!$pluginInfo) { return parent::hasCustomOptions(); } else { return $this->___callPlugins('hasCustomOptions', func_get_args(), $pluginInfo); } }