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;
}