Sonata\ProductBundle\Model\BaseProductProvider::basketMergeProduct PHP Method

basketMergeProduct() public method

Merge a product with another when the product is already present into the basket.
public basketMergeProduct ( Sonata\Component\Basket\BasketInterface $basket, Sonata\Component\Product\ProductInterface $product, Sonata\Component\Basket\BasketElementInterface $newBasketElement ) : boolean | Sonata\Component\Basket\BasketElementInterface
$basket Sonata\Component\Basket\BasketInterface
$product Sonata\Component\Product\ProductInterface
$newBasketElement Sonata\Component\Basket\BasketElementInterface
return boolean | Sonata\Component\Basket\BasketElementInterface
    public function basketMergeProduct(BasketInterface $basket, ProductInterface $product, BasketElementInterface $newBasketElement)
    {
        $event = new AddBasketElementEvent($basket, $newBasketElement, $product, $this);
        $this->getEventDispatcher()->dispatch(BasketEvents::PRE_MERGE_PRODUCT, $event);
        if (!$basket->hasProduct($product)) {
            return false;
        }
        $basketElement = $basket->getElement($product);
        if (!$basketElement) {
            throw new \RuntimeException('no basket element related to product.id : %s', $product->getId());
        }
        $basketElement->setQuantity($basketElement->getQuantity() + $newBasketElement->getQuantity());
        $this->updateComputationPricesFields($basket, $basketElement, $product);
        $event = new AddBasketElementEvent($basket, $basketElement, $product, $this);
        $this->getEventDispatcher()->dispatch(BasketEvents::POST_MERGE_PRODUCT, $event);
        return $event->getBasketElement();
    }