OrderItemInterfaceBuilder.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <?php
  2. /**
  3. * Refer to LICENSE.txt distributed with the Temando Shipping module for notice of license
  4. */
  5. namespace Temando\Shipping\Model\Order;
  6. use Magento\Catalog\Model\Product\Configuration\Item\ItemInterface;
  7. use Magento\Directory\Model\Currency;
  8. use Magento\Framework\Api\AbstractSimpleObjectBuilder;
  9. use Magento\Framework\Api\ObjectFactory;
  10. use Magento\Quote\Model\Quote\Address\RateRequest;
  11. use Temando\Shipping\Model\Config\ModuleConfigInterface;
  12. use Temando\Shipping\Setup\SetupData;
  13. /**
  14. * Temando Order Item Builder
  15. *
  16. * Create an order item entity to be shared between shipping module and Temando platform.
  17. *
  18. * @package Temando\Shipping\Model
  19. * @author Christoph Aßmann <christoph.assmann@netresearch.de>
  20. * @author Sebastian Ertner <sebastian.ertner@netresearch.de>
  21. * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  22. * @link http://www.temando.com/
  23. */
  24. class OrderItemInterfaceBuilder extends AbstractSimpleObjectBuilder
  25. {
  26. /**
  27. * @var ModuleConfigInterface
  28. */
  29. private $config;
  30. /**
  31. * OrderItemInterfaceBuilder constructor.
  32. * @param ObjectFactory $objectFactory
  33. * @param ModuleConfigInterface $config
  34. */
  35. public function __construct(
  36. ObjectFactory $objectFactory,
  37. ModuleConfigInterface $config
  38. ) {
  39. $this->config = $config;
  40. parent::__construct($objectFactory);
  41. }
  42. /**
  43. * @param RateRequest $rateRequest
  44. * @return void
  45. */
  46. public function setRateRequest(RateRequest $rateRequest)
  47. {
  48. $currencyCode = $rateRequest->getBaseCurrency();
  49. if ($currencyCode instanceof Currency) {
  50. $currencyCode = $currencyCode->getCurrencyCode();
  51. }
  52. $this->_set(OrderItemInterface::CURRENCY, $currencyCode);
  53. }
  54. /**
  55. * @param ItemInterface|\Magento\Quote\Model\Quote\Item\AbstractItem $quoteItem
  56. * @return void
  57. */
  58. public function setQuoteItem(ItemInterface $quoteItem)
  59. {
  60. $weightUom = $this->config->getWeightUnit($quoteItem->getQuote()->getStoreId());
  61. $dimensionsUom = ($weightUom === 'kgs') ? 'cm' : 'in';
  62. /** @var \Magento\Catalog\Model\ResourceModel\Category\Collection $categoryCollection */
  63. $categoryCollection = $quoteItem->getProduct()->getCategoryCollection();
  64. $categoryCollection->addNameToResult();
  65. $categoryNames = $categoryCollection->getColumnValues('name');
  66. $itemAmount = $quoteItem->getData('base_price');
  67. $itemAmount -= $quoteItem->getBaseDiscountAmount() / $quoteItem->getQty();
  68. $this->_set(OrderItemInterface::PRODUCT_ID, $quoteItem->getData('product_id'));
  69. $this->_set(OrderItemInterface::QTY, $quoteItem->getQty());
  70. $this->_set(OrderItemInterface::SKU, $quoteItem->getData('sku'));
  71. $this->_set(OrderItemInterface::NAME, $quoteItem->getData('name'));
  72. $this->_set(OrderItemInterface::DESCRIPTION, $quoteItem->getData('description'));
  73. $this->_set(OrderItemInterface::CATEGORIES, $categoryNames);
  74. $this->_set(OrderItemInterface::DIMENSIONS_UOM, $dimensionsUom);
  75. $this->_set(OrderItemInterface::LENGTH, $quoteItem->getProduct()->getData(SetupData::ATTRIBUTE_CODE_LENGTH));
  76. $this->_set(OrderItemInterface::WIDTH, $quoteItem->getProduct()->getData(SetupData::ATTRIBUTE_CODE_WIDTH));
  77. $this->_set(OrderItemInterface::HEIGHT, $quoteItem->getProduct()->getData(SetupData::ATTRIBUTE_CODE_HEIGHT));
  78. $this->_set(OrderItemInterface::WEIGHT_UOM, $weightUom);
  79. $this->_set(OrderItemInterface::WEIGHT, $quoteItem->getData('weight'));
  80. $this->_set(OrderItemInterface::AMOUNT, $itemAmount);
  81. $this->_set(OrderItemInterface::IS_FRAGILE, null);
  82. $this->_set(OrderItemInterface::IS_VIRTUAL, $quoteItem->getProduct()->getIsVirtual());
  83. $this->_set(OrderItemInterface::IS_PREPACKAGED, null);
  84. $this->_set(OrderItemInterface::CAN_ROTATE_VERTICAL, null);
  85. $this->_set(OrderItemInterface::COUNTRY_OF_ORIGIN, '');
  86. $this->_set(OrderItemInterface::COUNTRY_OF_MANUFACTURE, '');
  87. $this->_set(OrderItemInterface::ECCN, '');
  88. $this->_set(OrderItemInterface::SCHEDULE_B_INFO, '');
  89. $this->_set(OrderItemInterface::HS_CODE, '');
  90. }
  91. /**
  92. * @param \Magento\Sales\Api\Data\OrderInterface|\Magento\Sales\Model\Order $order
  93. * @return void
  94. */
  95. public function setOrder(\Magento\Sales\Api\Data\OrderInterface $order)
  96. {
  97. $this->_set(OrderItemInterface::CURRENCY, $order->getBaseCurrencyCode());
  98. }
  99. /**
  100. * @param \Magento\Sales\Api\Data\OrderItemInterface $orderItem
  101. * @return void
  102. */
  103. public function setOrderItem(\Magento\Sales\Api\Data\OrderItemInterface $orderItem)
  104. {
  105. $weightUom = $this->config->getWeightUnit($orderItem->getStoreId());
  106. $dimensionsUom = ($weightUom === 'kgs') ? 'cm' : 'in';
  107. /** @var \Magento\Sales\Model\Order\Item $orderItem */
  108. /** @var \Magento\Catalog\Model\ResourceModel\Category\Collection $categoryCollection */
  109. $categoryCollection = $orderItem->getProduct()->getCategoryCollection();
  110. $categoryCollection->addNameToResult();
  111. $categoryNames = $categoryCollection->getColumnValues('name');
  112. $itemAmount = $orderItem->getBasePrice();
  113. $itemAmount -= $orderItem->getBaseDiscountAmount() / $orderItem->getQtyOrdered();
  114. $this->_set(OrderItemInterface::PRODUCT_ID, $orderItem->getProductId());
  115. $this->_set(OrderItemInterface::QTY, $orderItem->getQtyOrdered());
  116. $this->_set(OrderItemInterface::SKU, $orderItem->getSku());
  117. $this->_set(OrderItemInterface::NAME, $orderItem->getName());
  118. $this->_set(OrderItemInterface::DESCRIPTION, $orderItem->getDescription());
  119. $this->_set(OrderItemInterface::CATEGORIES, $categoryNames);
  120. $this->_set(OrderItemInterface::DIMENSIONS_UOM, $dimensionsUom);
  121. $this->_set(OrderItemInterface::LENGTH, $orderItem->getProduct()->getData(SetupData::ATTRIBUTE_CODE_LENGTH));
  122. $this->_set(OrderItemInterface::WIDTH, $orderItem->getProduct()->getData(SetupData::ATTRIBUTE_CODE_WIDTH));
  123. $this->_set(OrderItemInterface::HEIGHT, $orderItem->getProduct()->getData(SetupData::ATTRIBUTE_CODE_HEIGHT));
  124. $this->_set(OrderItemInterface::WEIGHT_UOM, $weightUom);
  125. $this->_set(OrderItemInterface::WEIGHT, $orderItem->getWeight());
  126. $this->_set(OrderItemInterface::AMOUNT, $itemAmount);
  127. $this->_set(OrderItemInterface::IS_FRAGILE, null);
  128. $this->_set(OrderItemInterface::IS_VIRTUAL, $orderItem->getIsVirtual());
  129. $this->_set(OrderItemInterface::IS_PREPACKAGED, null);
  130. $this->_set(OrderItemInterface::CAN_ROTATE_VERTICAL, null);
  131. $this->_set(OrderItemInterface::COUNTRY_OF_ORIGIN, '');
  132. $this->_set(OrderItemInterface::COUNTRY_OF_MANUFACTURE, '');
  133. $this->_set(OrderItemInterface::ECCN, '');
  134. $this->_set(OrderItemInterface::SCHEDULE_B_INFO, '');
  135. $this->_set(OrderItemInterface::HS_CODE, '');
  136. }
  137. }