Example #1
0
 /**
  * {@inheritdoc}
  */
 public function getProductAttributes()
 {
     $pluginInfo = $this->pluginList->getNext($this->subjectType, 'getProductAttributes');
     if (!$pluginInfo) {
         return parent::getProductAttributes();
     } else {
         return $this->___callPlugins('getProductAttributes', func_get_args(), $pluginInfo);
     }
 }
 /**
  * Add products to items and item options
  *
  * @return $this
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  */
 protected function _assignProducts()
 {
     \Magento\Framework\Profiler::start('QUOTE:' . __METHOD__, ['group' => 'QUOTE', 'method' => __METHOD__]);
     $productIds = [];
     foreach ($this as $item) {
         $productIds[] = (int) $item->getProductId();
     }
     $this->_productIds = array_merge($this->_productIds, $productIds);
     $productCollection = $this->_productCollectionFactory->create()->setStoreId($this->getStoreId())->addIdFilter($this->_productIds)->addAttributeToSelect($this->_quoteConfig->getProductAttributes())->addOptionsToResult()->addStoreFilter()->addUrlRewrite()->addTierPriceData();
     $this->_eventManager->dispatch('prepare_catalog_product_collection_prices', ['collection' => $productCollection, 'store_id' => $this->getStoreId()]);
     $this->_eventManager->dispatch('sales_quote_item_collection_products_after_load', ['collection' => $productCollection]);
     $recollectQuote = false;
     foreach ($this as $item) {
         $product = $productCollection->getItemById($item->getProductId());
         if ($product) {
             $product->setCustomOptions([]);
             $qtyOptions = [];
             $optionProductIds = [];
             foreach ($item->getOptions() as $option) {
                 /**
                  * Call type-specific logic for product associated with quote item
                  */
                 $product->getTypeInstance()->assignProductToOption($productCollection->getItemById($option->getProductId()), $option, $product);
                 if (is_object($option->getProduct()) && $option->getProduct()->getId() != $product->getId()) {
                     $optionProductIds[$option->getProduct()->getId()] = $option->getProduct()->getId();
                 }
             }
             if ($optionProductIds) {
                 foreach ($optionProductIds as $optionProductId) {
                     $qtyOption = $item->getOptionByCode('product_qty_' . $optionProductId);
                     if ($qtyOption) {
                         $qtyOptions[$optionProductId] = $qtyOption;
                     }
                 }
             }
             $item->setQtyOptions($qtyOptions)->setProduct($product);
         } else {
             $item->isDeleted(true);
             $recollectQuote = true;
         }
         $item->checkData();
     }
     if ($recollectQuote && $this->_quote) {
         $this->_quote->collectTotals();
     }
     \Magento\Framework\Profiler::stop('QUOTE:' . __METHOD__);
     return $this;
 }
 public function testGetProductAttributes()
 {
     $attributes = ['attribute_one', 'attribute_two'];
     $this->_attributeConfig->expects($this->once())->method('getAttributeNames')->with('quote_item')->will($this->returnValue($attributes));
     $this->assertEquals($attributes, $this->_model->getProductAttributes());
 }