OrderDetails.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. <?php
  2. /**
  3. * Refer to LICENSE.txt distributed with the Temando Shipping module for notice of license
  4. */
  5. namespace Temando\Shipping\ViewModel\Order;
  6. use Magento\Framework\Exception\NoSuchEntityException;
  7. use Magento\Framework\View\Element\Block\ArgumentInterface;
  8. use Magento\Sales\Api\Data\OrderInterface;
  9. use Magento\Sales\Model\Order;
  10. use Magento\Store\Api\GroupRepositoryInterface as StoreGroupRepository;
  11. use Magento\Store\Api\WebsiteRepositoryInterface;
  12. use Magento\Store\Model\StoreManagerInterface;
  13. use Temando\Shipping\Model\ResourceModel\Repository\OrderRepositoryInterface;
  14. use Temando\Shipping\ViewModel\DataProvider\DeliveryType;
  15. use Temando\Shipping\ViewModel\DataProvider\OrderDate;
  16. use Temando\Shipping\ViewModel\DataProvider\OrderUrl;
  17. /**
  18. * View model for order related information.
  19. *
  20. * @package Temando\Shipping\ViewModel
  21. * @author Christoph Aßmann <christoph.assmann@netresearch.de>
  22. * @license https://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  23. * @link https://www.temando.com/
  24. */
  25. class OrderDetails implements ArgumentInterface
  26. {
  27. /**
  28. * @var OrderDate
  29. */
  30. private $orderDate;
  31. /**
  32. * @var OrderUrl
  33. */
  34. private $orderUrl;
  35. /**
  36. * @var StoreManagerInterface
  37. */
  38. private $storeManager;
  39. /**
  40. * @var StoreGroupRepository
  41. */
  42. private $storeGroupRepository;
  43. /**
  44. * @var WebsiteRepositoryInterface
  45. */
  46. private $websiteRepository;
  47. /**
  48. * @var OrderRepositoryInterface
  49. */
  50. private $orderRepository;
  51. /**
  52. * @var DeliveryType
  53. */
  54. private $deliveryType;
  55. /**
  56. * OrderDetails constructor.
  57. * @param OrderDate $orderDate
  58. * @param OrderUrl $orderUrl
  59. * @param StoreManagerInterface $storeManager
  60. * @param StoreGroupRepository $storeGroupRepository
  61. * @param WebsiteRepositoryInterface $websiteRepository
  62. * @param OrderRepositoryInterface $orderRepository
  63. * @param DeliveryType $orderType
  64. */
  65. public function __construct(
  66. OrderDate $orderDate,
  67. OrderUrl $orderUrl,
  68. StoreManagerInterface $storeManager,
  69. StoreGroupRepository $storeGroupRepository,
  70. WebsiteRepositoryInterface $websiteRepository,
  71. OrderRepositoryInterface $orderRepository,
  72. DeliveryType $orderType
  73. ) {
  74. $this->orderDate = $orderDate;
  75. $this->orderUrl = $orderUrl;
  76. $this->storeManager = $storeManager;
  77. $this->storeGroupRepository = $storeGroupRepository;
  78. $this->websiteRepository = $websiteRepository;
  79. $this->orderRepository = $orderRepository;
  80. $this->deliveryType = $orderType;
  81. }
  82. /**
  83. * Get timezone for store
  84. *
  85. * @see \Magento\Sales\Block\Adminhtml\Order\View\Info::getTimezoneForStore
  86. *
  87. * @param OrderInterface $order
  88. * @return string
  89. */
  90. public function getOrderTimezone(OrderInterface $order)
  91. {
  92. return $this->orderDate->getStoreTimezone((int)$order->getStoreId());
  93. }
  94. /**
  95. * @param OrderInterface $order
  96. * @return string
  97. */
  98. public function getOrderAdminDate(OrderInterface $order): string
  99. {
  100. $date = $order->getCreatedAt();
  101. return $this->orderDate->getAdminDate($date);
  102. }
  103. /**
  104. * @param OrderInterface $order
  105. * @return string
  106. */
  107. public function getOrderStoreDate(OrderInterface $order): string
  108. {
  109. $date = $order->getCreatedAt();
  110. $storeId = (int)$order->getStoreId();
  111. return $this->orderDate->getStoreDate($date, $storeId);
  112. }
  113. /**
  114. * @see \Magento\Sales\Block\Adminhtml\Order\View\Info::getOrderStoreName
  115. *
  116. * @param OrderInterface $order
  117. * @return string
  118. */
  119. public function getOrderStoreName(OrderInterface $order): string
  120. {
  121. $storeId = $order->getStoreId();
  122. if ($storeId === null) {
  123. $deleted = __(' [deleted]');
  124. return nl2br($order->getStoreName()) . $deleted;
  125. }
  126. $store = $this->storeManager->getStore($storeId);
  127. $group = $this->storeGroupRepository->get($store->getStoreGroupId());
  128. $website = $this->websiteRepository->getById($store->getWebsiteId());
  129. $name = [$website->getName(), $group->getName(), $store->getName()];
  130. return implode('<br/>', $name);
  131. }
  132. /**
  133. * Is single store mode
  134. *
  135. * @see \Magento\Sales\Block\Adminhtml\Order\View\Info::isSingleStoreMode
  136. *
  137. * @return bool
  138. */
  139. public function isSingleStoreMode(): bool
  140. {
  141. return $this->storeManager->isSingleStoreMode();
  142. }
  143. /**
  144. * Obtain platform order id by given order entity.
  145. *
  146. * @param OrderInterface $order
  147. * @return string
  148. */
  149. public function getExtOrderId(OrderInterface $order): string
  150. {
  151. try {
  152. /** @var \Temando\Shipping\Api\Data\Order\OrderReferenceInterface $orderReference */
  153. $orderReference = $this->orderRepository->getReferenceByOrderId($order->getEntityId());
  154. return $orderReference->getExtOrderId();
  155. } catch (NoSuchEntityException $noSuchEntityException) {
  156. return '';
  157. }
  158. }
  159. /**
  160. * @param string $orderId
  161. *
  162. * @return string
  163. */
  164. public function getViewActionUrl(string $orderId): string
  165. {
  166. return $this->orderUrl->getViewActionUrl(['order_id' => $orderId]);
  167. }
  168. /**
  169. * @param OrderInterface|Order $order
  170. * @return bool
  171. */
  172. public function isPickupOrder(OrderInterface $order): bool
  173. {
  174. return $this->deliveryType->isPickupOrder($order);
  175. }
  176. }