/** * @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; }
/** * Transforms an order into an invoice * * @param OrderInterface $order * @param InvoiceInterface $invoice */ public function transformFromOrder(OrderInterface $order, InvoiceInterface $invoice) { $event = new OrderTransformEvent($order); $this->eventDispatcher->dispatch(TransformerEvents::PRE_ORDER_TO_INVOICE_TRANSFORM, $event); $invoice->setName($order->getBillingName()); $invoice->setAddress1($order->getBillingAddress1()); $invoice->setAddress2($order->getBillingAddress2()); $invoice->setAddress3($order->getBillingAddress3()); $invoice->setCity($order->getBillingCity()); $invoice->setCountry($order->getBillingCountryCode()); $invoice->setPostcode($order->getBillingPostcode()); $invoice->setEmail($order->getBillingEmail()); $invoice->setFax($order->getBillingFax()); $invoice->setMobile($order->getBillingMobile()); $invoice->setPhone($order->getBillingPhone()); $invoice->setReference($order->getReference()); $invoice->setCurrency($order->getCurrency()); $invoice->setCustomer($order->getCustomer()); $invoice->setTotalExcl($order->getTotalExcl()); $invoice->setTotalInc($order->getTotalInc()); $invoice->setPaymentMethod($order->getPaymentMethod()); $invoice->setLocale($order->getLocale()); foreach ($order->getOrderElements() as $orderElement) { $invoiceElement = $this->createInvoiceElementFromOrderElement($orderElement); $invoiceElement->setInvoice($invoice); $invoice->addInvoiceElement($invoiceElement); } if ($order->getDeliveryCost() > 0) { $this->addDelivery($invoice, $order); } $invoice->setStatus(InvoiceInterface::STATUS_OPEN); $event = new InvoiceTransformEvent($invoice); $this->eventDispatcher->dispatch(TransformerEvents::POST_ORDER_TO_INVOICE_TRANSFORM, $event); }