/** * 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 object creation * * @group order */ public function testCreate() { $orderLineHistoryFactory = new OrderLineHistoryFactory(); $orderLineHistoryFactory->setEntityNamespace('Elcodi\\Component\\Cart\\Entity\\OrderLineHistory'); $orderLineFactory = new OrderLineFactory(); $orderLineFactory->setOrderLineHistoryFactory($orderLineHistoryFactory)->setInitialOrderHistoryState('new')->setEntityNamespace('Elcodi\\Component\\Cart\\Entity\\OrderLine'); $orderLine = $orderLineFactory->create(); $orderHistoryFactory = new OrderHistoryFactory(); $orderHistoryFactory->setEntityNamespace('Elcodi\\Component\\Cart\\Entity\\OrderHistory'); $orderFactory = new OrderFactory(); $orderFactory->setOrderHistoryFactory($orderHistoryFactory)->setInitialOrderHistoryState('new')->setEntityNamespace('Elcodi\\Component\\Cart\\Entity\\Order'); $order = $orderFactory->create(); $order->addOrderLine($orderLine); $this->assertCount(1, $order->getOrderHistories()); $this->assertInstanceOf('Elcodi\\Component\\Cart\\Entity\\Interfaces\\OrderHistoryInterface', $order->getOrderHistories()->first()); $this->assertEquals('new', $order->getOrderHistories()->first()->getState()); $this->assertInstanceOf('Elcodi\\Component\\Cart\\Entity\\Interfaces\\OrderHistoryInterface', $order->getLastOrderHistory()); $this->assertSame($order->getOrderHistories()->first(), $order->getLastOrderHistory()); $this->assertCount(1, $order->getOrderLines()); $orderLine = $order->getOrderLines()->first(); $this->assertCount(1, $orderLine->getOrderLineHistories()); $this->assertInstanceOf('Elcodi\\Component\\Cart\\Entity\\Interfaces\\OrderLineHistoryInterface', $orderLine->getOrderLineHistories()->first()); $this->assertEquals($orderLine->getOrderLineHistories()->first()->getState(), 'new'); $this->assertInstanceOf('Elcodi\\Component\\Cart\\Entity\\Interfaces\\OrderLineHistoryInterface', $orderLine->getLastOrderLineHistory()); $this->assertSame($orderLine->getOrderLineHistories()->first(), $orderLine->getLastOrderLineHistory()); }
/** * 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; }