orderItemFactory = $orderItemFactory; $this->objectCopyService = $objectCopyService; $this->dataObjectHelper = $dataObjectHelper; } /** * Convert quote item(quote address item) into order item. * * @param Item|AddressItem $item * @param array $data * @return OrderItemInterface */ public function convert($item, $data = []) { $options = $item->getProductOrderOptions(); if (!$options) { $options = $item->getProduct()->getTypeInstance()->getOrderOptions($item->getProduct()); } $orderItemData = $this->objectCopyService->getDataFromFieldset( 'quote_convert_item', 'to_order_item', $item ); if ($item instanceof \Magento\Quote\Model\Quote\Address\Item) { $orderItemData = array_merge( $orderItemData, $this->objectCopyService->getDataFromFieldset( 'quote_convert_address_item', 'to_order_item', $item ) ); } if (!$item->getNoDiscount()) { $data = array_merge( $data, $this->objectCopyService->getDataFromFieldset( 'quote_convert_item', 'to_order_item_discount', $item ) ); } $orderItem = $this->orderItemFactory->create(); $this->dataObjectHelper->populateWithArray( $orderItem, array_merge($orderItemData, $data), \Magento\Sales\Api\Data\OrderItemInterface::class ); $orderItem->setProductOptions($options); if ($item->getParentItem()) { $orderItem->setQtyOrdered( $orderItemData[OrderItemInterface::QTY_ORDERED] * $item->getParentItem()->getQty() ); } return $orderItem; } }