/**
  * Obtain final price of selection in a bundle product
  *
  * @param ItemInterface $item
  * @param \Magento\Catalog\Model\Product $selectionProduct
  * @return float
  */
 public function getSelectionFinalPrice(ItemInterface $item, \Magento\Catalog\Model\Product $selectionProduct)
 {
     $selectionProduct->unsetData('final_price');
     $product = $item->getProduct();
     /** @var \Magento\Bundle\Model\Product\Price $price */
     $price = $product->getPriceModel();
     return $price->getSelectionFinalTotalPrice($product, $selectionProduct, $item->getQty(), $this->getSelectionQty($product, $selectionProduct->getSelectionId()), false, true);
 }
Esempio n. 2
0
 /**
  * Prepare inventory data from custom attribute
  *
  * @param Product $object
  * @return void
  */
 public function beforeSave($object)
 {
     $stockData = $object->getData($this->getAttribute()->getAttributeCode());
     if (isset($stockData['qty']) && $stockData['qty'] === '') {
         $stockData['qty'] = null;
     }
     if ($object->getStockData() !== null || $stockData !== null) {
         $object->setStockData(array_replace((array) $object->getStockData(), (array) $stockData));
     }
     $object->unsetData($this->getAttribute()->getAttributeCode());
     parent::beforeSave($object);
 }
Esempio n. 3
0
 /**
  * Initialize grouped product links
  *
  * @param \Magento\Catalog\Model\Product\Initialization\Helper\ProductLinks $subject
  * @param \Magento\Catalog\Model\Product $product
  * @param array $links
  *
  * @return \Magento\Catalog\Model\Product
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  */
 public function beforeInitializeLinks(\Magento\Catalog\Model\Product\Initialization\Helper\ProductLinks $subject, \Magento\Catalog\Model\Product $product, array $links)
 {
     if ($product->getTypeId() == TypeGrouped::TYPE_CODE && !$product->getGroupedReadonly()) {
         $links = isset($links[self::TYPE_NAME]) ? $links[self::TYPE_NAME] : $product->getGroupedLinkData();
         if ($product->getGroupedLinkData()) {
             $links = array_merge($links, $product->getGroupedLinkData());
         }
         $newLinks = [];
         $existingLinks = $product->getProductLinks();
         $product->unsetData('_cache_instance_associated_products');
         if ($links) {
             foreach ($links as $linkId => $linkRaw) {
                 /** @var \Magento\Catalog\Api\Data\ProductLinkInterface $productLink */
                 $productLink = $this->productLinkFactory->create();
                 if (isset($linkRaw['id'])) {
                     $productId = $linkRaw['id'];
                 } else {
                     $productId = $linkId;
                 }
                 $linkedProduct = $this->productRepository->getById($productId);
                 $productLink->setSku($product->getSku())->setLinkType(self::TYPE_NAME)->setLinkedProductSku($linkedProduct->getSku())->setLinkedProductType($linkedProduct->getTypeId())->setPosition($linkRaw['position'])->getExtensionAttributes()->setQty($linkRaw['qty']);
                 if (isset($linkRaw['custom_attributes'])) {
                     $productLinkExtension = $productLink->getExtensionAttributes();
                     if ($productLinkExtension === null) {
                         $productLinkExtension = $this->productLinkExtensionFactory->create();
                     }
                     foreach ($linkRaw['custom_attributes'] as $option) {
                         $name = $option['attribute_code'];
                         $value = $option['value'];
                         $setterName = 'set' . ucfirst($name);
                         // Check if setter exists
                         if (method_exists($productLinkExtension, $setterName)) {
                             call_user_func([$productLinkExtension, $setterName], $value);
                         }
                     }
                     $productLink->setExtensionAttributes($productLinkExtension);
                 }
                 $newLinks[] = $productLink;
             }
         }
         $existingLinks = $this->removeUnExistingLinks($existingLinks, $newLinks);
         $product->setProductLinks(array_merge($existingLinks, $newLinks));
     }
 }
Esempio n. 4
0
 public function testIsSalable()
 {
     $this->_product->unsetData('is_salable');
     $this->assertTrue($this->_model->isSalable($this->_product));
 }
Esempio n. 5
0
 /**
  * Reset the cached configurable attributes of a product
  *
  * @param \Magento\Catalog\Model\Product $product
  * @return $this
  */
 public function resetConfigurableAttributes($product)
 {
     $product->unsetData($this->_configurableAttributes);
     return $this;
 }
Esempio n. 6
0
 /**
  * @param \Magento\Catalog\Model\Product $product
  * @return void
  */
 private function dropRelationProductsCache(\Magento\Catalog\Model\Product $product)
 {
     $product->unsetData('up_sell_products');
     $product->unsetData('up_sell_products_ids');
     $product->unsetData('related_products');
     $product->unsetData('related_products_ids');
     $product->unsetData('cross_sell_products');
     $product->unsetData('cross_sell_products_ids');
 }
Esempio n. 7
0
 /**
  * {@inheritdoc}
  */
 public function unsetData($key = null)
 {
     $pluginInfo = $this->pluginList->getNext($this->subjectType, 'unsetData');
     if (!$pluginInfo) {
         return parent::unsetData($key);
     } else {
         return $this->___callPlugins('unsetData', func_get_args(), $pluginInfo);
     }
 }
Esempio n. 8
0
 /**
  * Reset the cached configurable attributes of a product
  *
  * @param \Magento\Catalog\Model\Product $product
  * @return $this
  */
 public function resetConfigurableAttributes($product)
 {
     $metadata = $this->getMetadataPool()->getMetadata(ProductInterface::class);
     $productId = $product->getData($metadata->getLinkField());
     $product->unsetData($this->_configurableAttributes);
     $cacheId = __CLASS__ . $productId . '_' . $product->getStoreId();
     $this->getCache()->remove($cacheId);
     $this->getCache()->clean(\Zend_Cache::CLEANING_MODE_MATCHING_TAG, [self::TYPE_CODE . '_' . $productId]);
     return $this;
 }