/**
* @param OrderInterface $order
* @param BasketInterface $basket
*
* @return BasketInterface
*/
public function transformIntoBasket(OrderInterface $order, BasketInterface $basket)
{
$event = new OrderTransformEvent($order);
$this->eventDispatcher->dispatch(TransformerEvents::PRE_ORDER_TO_BASKET_TRANSFORM, $event);
// we reset the current basket
$basket->reset(true);
$basket->setCurrency($order->getCurrency());
$basket->setLocale($order->getLocale());
// We are free to convert !
foreach ($order->getOrderElements() as $orderElement) {
/*
* @var $orderElement OrderElementInterface
*/
$provider = $this->productPool->getProvider($orderElement->getProductType());
$manager = $this->productPool->getManager($orderElement->getProductType());
$product = $manager->findOneBy(array('id' => $orderElement->getProductId()));
if (!$product) {
continue;
}
$basketElement = $provider->createBasketElement($product, $orderElement->getOptions());
$basketElement->setQuantity($orderElement->getQuantity());
$provider->basketAddProduct($basket, $product, $basketElement);
}
$basket->setCustomer($order->getCustomer());
$basket->buildPrices();
$event = new BasketTransformEvent($basket);
$this->eventDispatcher->dispatch(TransformerEvents::POST_ORDER_TO_BASKET_TRANSFORM, $event);
return $basket;
}