PickupItems.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. /**
  3. * Refer to LICENSE.txt distributed with the Temando Shipping module for notice of license
  4. */
  5. namespace Temando\Shipping\ViewModel\Pickup;
  6. use Magento\Framework\View\Element\Block\ArgumentInterface;
  7. use Magento\Sales\Api\Data\OrderItemInterface;
  8. use Magento\Sales\Model\Order;
  9. use Temando\Shipping\Model\PickupInterface;
  10. use Temando\Shipping\Model\PickupProviderInterface;
  11. /**
  12. * View model for Pickup Item blocks.
  13. *
  14. * @package Temando\Shipping\ViewModel
  15. * @author Sebastian Ertner<sebastian.ertner@netresearch.de>
  16. * @license https://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  17. * @link https://www.temando.com/
  18. */
  19. class PickupItems implements ArgumentInterface
  20. {
  21. /**
  22. * @var PickupProviderInterface
  23. */
  24. private $pickupProvider;
  25. /**
  26. * PickupItems constructor.
  27. * @param PickupProviderInterface $pickupProvider
  28. */
  29. public function __construct(PickupProviderInterface $pickupProvider)
  30. {
  31. $this->pickupProvider = $pickupProvider;
  32. }
  33. /**
  34. * @return OrderItemInterface[]
  35. */
  36. public function getAllOrderItems(): array
  37. {
  38. $items = [];
  39. /** @var Order $order */
  40. $order = $this->pickupProvider->getOrder();
  41. $orderItems = $order->getAllItems();
  42. foreach ($orderItems as $orderItem) {
  43. if ($orderItem->getParentItem()) {
  44. continue;
  45. }
  46. $items[] = $orderItem;
  47. }
  48. return $items;
  49. }
  50. /**
  51. * Depending on the pickup state, obtain an appropriate "Quantity" label/heading.
  52. *
  53. * @return string
  54. */
  55. public function getQtyLabel()
  56. {
  57. $pickup = $this->pickupProvider->getPickup();
  58. switch ($pickup->getState()) {
  59. case PickupInterface::STATE_REQUESTED:
  60. return 'Qty Prepared';
  61. case PickupInterface::STATE_READY:
  62. return 'Qty Packed';
  63. case PickupInterface::STATE_PICKED_UP:
  64. return 'Qty Collected';
  65. default:
  66. return 'Quantity';
  67. }
  68. }
  69. /**
  70. * @param string $sku
  71. * @return int
  72. */
  73. public function getQtyPrepared(string $sku): int
  74. {
  75. $qty = 0;
  76. foreach ($this->pickupProvider->getPickups() as $pickup) {
  77. if ($pickup->getState() !== PickupInterface::STATE_READY) {
  78. continue;
  79. }
  80. $pickupItems = $pickup->getItems();
  81. if (!isset($pickupItems[$sku])) {
  82. continue;
  83. }
  84. $qty += $pickupItems[$sku];
  85. }
  86. return $qty;
  87. }
  88. /**
  89. * Obtain the item quantity included with the current pickup.
  90. *
  91. * @param string $sku
  92. * @return int
  93. */
  94. public function getItemQty(string $sku): int
  95. {
  96. $pickup = $this->pickupProvider->getPickup();
  97. $items = $pickup->getItems();
  98. if (!isset($items[$sku])) {
  99. return 0;
  100. }
  101. return $items[$sku];
  102. }
  103. }