/** * {@inheritdoc} */ public function createVariation(ProductInterface $product, $copyDependencies = true) { if ($product->isVariation()) { throw new \RuntimeException('Cannot create a variation from a variation product'); } $variation = clone $product; $variation->setParent($product); $variation->setId(null); $variation->setVariations(new ArrayCollection()); $variation->setDeliveries(new ArrayCollection()); $variation->setProductCategories(new ArrayCollection()); $variation->setProductCollections(new ArrayCollection()); $variation->setPackages(new ArrayCollection()); $product->addVariation($variation); $variationCollection = new ArrayCollection(array($variation)); $this->synchronizeVariationsProduct($product, $variationCollection); if ($copyDependencies) { $this->synchronizeVariationsDeliveries($product, $variationCollection); $this->synchronizeVariationsPackages($product, $variationCollection); $this->synchronizeVariationsCategories($product, $variationCollection); $this->synchronizeVariationsCollections($product, $variationCollection); } $variation->setEnabled(false); $variation->setName(sprintf('%s (duplicated)', $product->getName())); $variation->setSku(sprintf('%s_DUPLICATE', $product->getSku())); return $variation; }