/**
* Creates an OrderElement from a given Product.
*
* @param BasketInterface $basket A basket instance
* @param BaseProduct $product A product instance
*
* @return OrderElement
*/
protected function createOrderElement(BasketInterface $basket, BaseProduct $product)
{
$productProvider = $this->getProductPool()->getProvider($product);
$productManager = $this->getProductPool()->getManager($product);
$productDefinition = new ProductDefinition($productProvider, $productManager);
$basketElement = $productProvider->createBasketElement($product);
$basketElement->setProductDefinition($productDefinition);
$basket->addBasketElement($basketElement);
$productProvider->updateComputationPricesFields($basket, $basketElement, $product);
$orderElement = $productProvider->createOrderElement($basketElement);
return $orderElement;
}