ToOrderItem.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Quote\Model\Quote\Item;
  7. use Magento\Framework\DataObject\Copy;
  8. use Magento\Quote\Model\Quote\Item;
  9. use Magento\Quote\Model\Quote\Address\Item as AddressItem;
  10. use Magento\Sales\Api\Data\OrderItemInterfaceFactory as OrderItemFactory;
  11. use Magento\Sales\Api\Data\OrderItemInterface;
  12. /**
  13. * Class ToOrderItem
  14. */
  15. class ToOrderItem
  16. {
  17. /**
  18. * @var Copy
  19. */
  20. protected $objectCopyService;
  21. /**
  22. * @var OrderItemFactory
  23. */
  24. protected $orderItemFactory;
  25. /**
  26. * @var \Magento\Framework\Api\DataObjectHelper
  27. */
  28. protected $dataObjectHelper;
  29. /**
  30. * @param OrderItemFactory $orderItemFactory
  31. * @param Copy $objectCopyService
  32. * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
  33. */
  34. public function __construct(
  35. OrderItemFactory $orderItemFactory,
  36. Copy $objectCopyService,
  37. \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
  38. ) {
  39. $this->orderItemFactory = $orderItemFactory;
  40. $this->objectCopyService = $objectCopyService;
  41. $this->dataObjectHelper = $dataObjectHelper;
  42. }
  43. /**
  44. * Convert quote item(quote address item) into order item.
  45. *
  46. * @param Item|AddressItem $item
  47. * @param array $data
  48. * @return OrderItemInterface
  49. */
  50. public function convert($item, $data = [])
  51. {
  52. $options = $item->getProductOrderOptions();
  53. if (!$options) {
  54. $options = $item->getProduct()->getTypeInstance()->getOrderOptions($item->getProduct());
  55. }
  56. $orderItemData = $this->objectCopyService->getDataFromFieldset(
  57. 'quote_convert_item',
  58. 'to_order_item',
  59. $item
  60. );
  61. if ($item instanceof \Magento\Quote\Model\Quote\Address\Item) {
  62. $orderItemData = array_merge(
  63. $orderItemData,
  64. $this->objectCopyService->getDataFromFieldset(
  65. 'quote_convert_address_item',
  66. 'to_order_item',
  67. $item
  68. )
  69. );
  70. }
  71. if (!$item->getNoDiscount()) {
  72. $data = array_merge(
  73. $data,
  74. $this->objectCopyService->getDataFromFieldset(
  75. 'quote_convert_item',
  76. 'to_order_item_discount',
  77. $item
  78. )
  79. );
  80. }
  81. $orderItem = $this->orderItemFactory->create();
  82. $this->dataObjectHelper->populateWithArray(
  83. $orderItem,
  84. array_merge($orderItemData, $data),
  85. \Magento\Sales\Api\Data\OrderItemInterface::class
  86. );
  87. $orderItem->setProductOptions($options);
  88. if ($item->getParentItem()) {
  89. $orderItem->setQtyOrdered(
  90. $orderItemData[OrderItemInterface::QTY_ORDERED] * $item->getParentItem()->getQty()
  91. );
  92. }
  93. return $orderItem;
  94. }
  95. }