/** * {@inheritdoc} */ public function synchronizeVariationsDeliveries(ProductInterface $product, ArrayCollection $variations = null) { if (in_array('deliveries', $this->getVariationFields())) { return; } if (!$variations) { $variations = $product->getVariations(); } $productDeliveries = $product->getDeliveries(); /** @var ProductInterface $variation */ foreach ($variations as $variation) { $variationDeliveries = $variation->getDeliveries(); // browsing variation deliveries and remove excessing deliveries foreach ($variationDeliveries as $productDelivery) { if ($productDelivery && !$productDeliveries->contains($productDelivery)) { $variation->removeDelivery($productDelivery); } } // browsing Product deliveries and add missing deliveries foreach ($productDeliveries as $productDelivery) { if ($productDelivery && !$variationDeliveries->contains($productDelivery)) { $delivery = clone $productDelivery; $variation->addDelivery($delivery); } } } }