123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Quote\Model\Quote\Item;
- use Magento\Framework\DataObject\Copy;
- use Magento\Quote\Model\Quote\Item;
- use Magento\Quote\Model\Quote\Address\Item as AddressItem;
- use Magento\Sales\Api\Data\OrderItemInterfaceFactory as OrderItemFactory;
- use Magento\Sales\Api\Data\OrderItemInterface;
- /**
- * Class ToOrderItem
- */
- class ToOrderItem
- {
- /**
- * @var Copy
- */
- protected $objectCopyService;
- /**
- * @var OrderItemFactory
- */
- protected $orderItemFactory;
- /**
- * @var \Magento\Framework\Api\DataObjectHelper
- */
- protected $dataObjectHelper;
- /**
- * @param OrderItemFactory $orderItemFactory
- * @param Copy $objectCopyService
- * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
- */
- public function __construct(
- OrderItemFactory $orderItemFactory,
- Copy $objectCopyService,
- \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
- ) {
- $this->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;
- }
- }
|