/**
  * This method creates a Order given a Cart.
  *
  * If cart has a order, this one is taken as order to be used, otherwise
  * new order will be created from the scratch
  *
  * This method dispatches these events
  *
  * ElcodiPurchaseEvents::ORDER_PRECREATED
  * ElcodiPurchaseEvents::ORDER_ONCREATED
  * ElcodiPurchaseEvents::ORDER_POSTCREATED
  *
  * @param CartInterface $cart Cart to create order from
  *
  * @return OrderInterface the created order
  */
 public function createOrderFromCart(CartInterface $cart)
 {
     $this->orderEventDispatcher->dispatchOrderPreCreatedEvent($cart);
     $order = $cart->getOrder() instanceof OrderInterface ? $cart->getOrder() : $this->orderFactory->create();
     $cart->setOrder($order);
     $orderLines = $this->cartLineOrderLineTransformer->createOrderLinesByCartLines($order, $cart->getCartLines());
     $order->setCustomer($cart->getCustomer())->setCart($cart)->setQuantity($cart->getQuantity())->setProductAmount($cart->getProductAmount())->setAmount($cart->getAmount())->setOrderLines($orderLines);
     $this->orderEventDispatcher->dispatchOrderOnCreatedEvent($cart, $order);
     return $order;
 }
 /**
  * Test dimensions transformation.
  *
  * @group Order
  */
 public function testCreateOrderFromCartDimensions()
 {
     /**
      * @var OrderInterface    $order
      * @var CurrencyInterface $currency
      */
     $order = $this->getMock('Elcodi\\Component\\Cart\\Entity\\Order', null);
     $currency = $this->getMock('Elcodi\\Component\\Currency\\Entity\\Currency', null);
     $currency->setIso('EUR');
     $this->orderFactory->expects($this->once())->method('create')->will($this->returnValue($order));
     $this->cartLineOrderLineTransformer->expects($this->any())->method('createOrderLinesByCartLines')->will($this->returnValue(new ArrayCollection()));
     $cart = $this->getMock('Elcodi\\Component\\Cart\\Entity\\Cart');
     $cart->expects($this->any())->method('getCartLines')->will($this->returnValue(new ArrayCollection()));
     $cart->expects($this->any())->method('getShippingAmount')->will($this->returnValue($this->getMock('Elcodi\\Component\\Currency\\Entity\\Interfaces\\MoneyInterface')));
     $cart->expects($this->any())->method('getCustomer')->will($this->returnValue(new Customer()));
     $cart->expects($this->any())->method('getPurchasableAmount')->will($this->returnValue(Money::create(10, $currency)));
     $cart->expects($this->any())->method('getCouponAmount')->will($this->returnValue(Money::create(0, $currency)));
     $cart->expects($this->any())->method('getAmount')->will($this->returnValue(Money::create(10, $currency)));
     $cart->expects($this->any())->method('getWeight')->will($this->returnValue(10));
     $cart->expects($this->any())->method('getHeight')->will($this->returnValue(11));
     $cart->expects($this->any())->method('getWidth')->will($this->returnValue(12));
     $cart->expects($this->any())->method('getDepth')->will($this->returnValue(13));
     $order = $this->cartOrderTransformer->createOrderFromCart($cart);
     $this->assertEquals(10, $order->getWeight());
     $this->assertEquals(11, $order->getHeight());
     $this->assertEquals(12, $order->getWidth());
     $this->assertEquals(13, $order->getDepth());
 }
 /**
  * test Create Order from Cart
  *
  * @group order
  */
 public function testCreateOrderFromCartNewOrderExistingOrder()
 {
     /**
      * @var OrderInterface    $order
      * @var CurrencyInterface $currency
      */
     $order = $this->getMock('Elcodi\\Component\\Cart\\Entity\\Order', null);
     $currency = $this->getMock('Elcodi\\Component\\Currency\\Entity\\Currency', null);
     $currency->setIso('EUR');
     $this->orderFactory->expects($this->never())->method('create')->will($this->returnValue($order));
     $this->cartLineOrderLineTransformer->expects($this->any())->method('createOrderLinesByCartLines')->will($this->returnValue(new ArrayCollection()));
     $customer = new Customer();
     $cart = new Cart();
     $cart->setCustomer($customer)->setQuantity(10)->setProductAmount(Money::create(20, $currency))->setOrder($order)->setAmount(Money::create(20, $currency))->setCartLines(new ArrayCollection());
     $this->cartOrderTransformer->createOrderFromCart($cart);
 }
 /**
  * This method creates a Order given a Cart.
  *
  * If cart has a order, this one is taken as order to be used, otherwise
  * new order will be created from the scratch
  *
  * This method dispatches these events
  *
  * ElcodiPurchaseEvents::ORDER_PRECREATED
  * ElcodiPurchaseEvents::ORDER_ONCREATED
  * ElcodiPurchaseEvents::ORDER_POSTCREATED
  *
  * @param CartInterface $cart Cart to create order from
  *
  * @return OrderInterface the created order
  */
 public function createOrderFromCart(CartInterface $cart)
 {
     $this->orderEventDispatcher->dispatchOrderPreCreatedEvent($cart);
     $order = $cart->getOrder() instanceof OrderInterface ? $cart->getOrder() : $this->orderFactory->create();
     $cart->setOrder($order);
     $orderLines = $this->cartLineOrderLineTransformer->createOrderLinesByCartLines($order, $cart->getCartLines());
     /**
      * @var OrderInterface $order
      */
     $order->setCustomer($cart->getCustomer())->setCart($cart)->setQuantity($cart->getQuantity())->setProductAmount($cart->getProductAmount())->setShippingAmount($cart->getShippingAmount())->setAmount($cart->getAmount())->setHeight($cart->getHeight())->setWidth($cart->getWidth())->setDepth($cart->getDepth())->setWeight($cart->getWeight())->setBillingAddress($cart->getBillingAddress())->setDeliveryAddress($cart->getDeliveryAddress())->setOrderLines($orderLines);
     $couponAmount = $cart->getCouponAmount();
     if ($couponAmount instanceof MoneyInterface) {
         $order->setCouponAmount($couponAmount);
     }
     $this->orderEventDispatcher->dispatchOrderOnCreatedEvent($cart, $order);
     return $order;
 }
 /**
  * This method creates a Order given a Cart.
  *
  * If cart has a order, this one is taken as order to be used, otherwise
  * new order will be created from the scratch
  *
  * This method dispatches these events
  *
  * ElcodiPurchaseEvents::ORDER_PRECREATED
  * ElcodiPurchaseEvents::ORDER_ONCREATED
  * ElcodiPurchaseEvents::ORDER_POSTCREATED
  *
  * @param CartInterface $cart Cart to create order from
  *
  * @return OrderInterface the created order
  */
 public function createOrderFromCart(CartInterface $cart)
 {
     $this->orderEventDispatcher->dispatchOrderPreCreatedEvent($cart);
     $order = $cart->getOrder() instanceof OrderInterface ? $cart->getOrder() : $this->orderFactory->create();
     $cart->setOrder($order);
     $orderLines = $this->cartLineOrderLineTransformer->createOrderLinesByCartLines($order, $cart->getCartLines());
     /**
      * @var OrderInterface $order
      */
     $order->setCustomer($cart->getCustomer())->setCart($cart)->setQuantity($cart->getTotalItemNumber())->setPurchasableAmount($cart->getPurchasableAmount())->setShippingAmount($cart->getShippingAmount())->setAmount($cart->getAmount())->setHeight($cart->getHeight())->setWidth($cart->getWidth())->setDepth($cart->getDepth())->setWeight($cart->getWeight())->setBillingAddress($cart->getBillingAddress())->setDeliveryAddress($cart->getDeliveryAddress())->setOrderLines($orderLines);
     $couponAmount = $cart->getCouponAmount();
     if ($couponAmount instanceof MoneyInterface) {
         $order->setCouponAmount($couponAmount);
     }
     $this->orderEventDispatcher->dispatchOrderOnCreatedEvent($cart, $order);
     // Salvataggio per fare in modo che rimanga collegato orderLineId al cartLine
     foreach ($cart->getCartLines() as $cartLine) {
         $this->cartLineObjectManager->persist($cartLine);
     }
     $this->cartLineObjectManager->flush();
     return $order;
 }