/** * Populate product with variation of attributes * * @param Product $product * @param array $variations * @param array $attributes * @return array */ private function populateProductVariation(Product $product, $variations, $attributes) { $products = []; foreach ($variations as $attributeId => $variation) { $price = $product->getPrice(); $this->productBuilder->populate($product); $suffix = ''; foreach ($variation as $attributeId => $valueInfo) { $suffix .= '-' . $valueInfo['value']; $this->productBuilder->setCustomAttribute($attributes[$attributeId]['attribute_code'], $valueInfo['value']); $priceInfo = $valueInfo['price']; $price += (!empty($priceInfo['is_percent']) ? $product->getPrice() / 100.0 : 1.0) * $priceInfo['price']; } $this->productBuilder->setPrice($price); $this->productBuilder->setName($product->getName() . $suffix); $this->productBuilder->setSku($product->getSku() . $suffix); $this->productBuilder->setVisibility(\Magento\Catalog\Model\Product\Visibility::VISIBILITY_NOT_VISIBLE); $products[] = $this->productBuilder->create(); } return $products; }
/** * Convert a product model to a product data entity * * @param \Magento\Catalog\Model\Product $productModel * @return \Magento\Catalog\Service\V1\Data\Product */ public function createProductDataFromModel(\Magento\Catalog\Model\Product $productModel) { $this->_populateBuilderWithAttributes($productModel); return $this->productBuilder->create(); }