Collected.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. /**
  3. * Refer to LICENSE.txt distributed with the Temando Shipping module for notice of license
  4. */
  5. namespace Temando\Shipping\Controller\Adminhtml\Pickup;
  6. use Magento\Backend\App\Action;
  7. use Magento\Backend\App\Action\Context;
  8. use Magento\Framework\Controller\ResultFactory;
  9. use Magento\Framework\Controller\ResultInterface;
  10. use Magento\Framework\Exception\CouldNotSaveException;
  11. use Magento\Sales\Api\OrderRepositoryInterface;
  12. use Temando\Shipping\Model\Pickup\Email\Sender\PickupSender;
  13. use Temando\Shipping\Model\Pickup\PickupLoader;
  14. use Temando\Shipping\Model\PickupInterface;
  15. use Temando\Shipping\Model\PickupProviderInterface;
  16. use Temando\Shipping\Model\ResourceModel\Repository\PickupRepositoryInterface;
  17. /**
  18. * Mark Pickup Collected Action
  19. *
  20. * @package Temando\Shipping\Controller
  21. * @author Sebastian Ertner <sebastian.ertner@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 Collected extends Action
  26. {
  27. const ADMIN_RESOURCE = 'Temando_Shipping::pickups';
  28. /**
  29. * @var PickupLoader
  30. */
  31. private $pickupLoader;
  32. /**
  33. * @var PickupProviderInterface
  34. */
  35. private $pickupProvider;
  36. /**
  37. * @var PickupRepositoryInterface
  38. */
  39. private $pickupRepository;
  40. /**
  41. * @var OrderRepositoryInterface
  42. */
  43. private $orderRepository;
  44. /**
  45. * @var PickupSender
  46. */
  47. private $pickupSender;
  48. /**
  49. * Collected constructor.
  50. * @param Context $context
  51. * @param PickupLoader $pickupLoader
  52. * @param PickupProviderInterface $pickupProvider
  53. * @param PickupRepositoryInterface $pickupRepository
  54. * @param OrderRepositoryInterface $orderRepository
  55. * @param PickupSender $pickupSender
  56. */
  57. public function __construct(
  58. Context $context,
  59. PickupLoader $pickupLoader,
  60. PickupProviderInterface $pickupProvider,
  61. PickupRepositoryInterface $pickupRepository,
  62. OrderRepositoryInterface $orderRepository,
  63. PickupSender $pickupSender
  64. ) {
  65. $this->pickupLoader = $pickupLoader;
  66. $this->pickupProvider = $pickupProvider;
  67. $this->pickupRepository = $pickupRepository;
  68. $this->orderRepository = $orderRepository;
  69. $this->pickupSender = $pickupSender;
  70. parent::__construct($context);
  71. }
  72. /**
  73. * Execute action.
  74. *
  75. * @return ResultInterface
  76. */
  77. public function execute()
  78. {
  79. $orderId = $this->getRequest()->getParam('sales_order_id', 0);
  80. $pickupId = $this->getRequest()->getParam('pickup_id', '');
  81. $pickups = $this->pickupLoader->load($orderId, $pickupId);
  82. $this->pickupLoader->register($pickups, $orderId, $pickupId);
  83. /** @var \Temando\Shipping\Model\Pickup $pickup */
  84. $pickup = $this->pickupProvider->getPickup();
  85. /** @var \Magento\Sales\Model\Order $order */
  86. $order = $this->pickupProvider->getOrder();
  87. /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
  88. $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
  89. $resultRedirect->setUrl($this->_redirect->getRefererUrl());
  90. try {
  91. $pickup->setData(PickupInterface::STATE, PickupInterface::STATE_PICKED_UP);
  92. $this->pickupRepository->save($pickup);
  93. $this->messageManager->addSuccessMessage('Pickup was collected.');
  94. } catch (CouldNotSaveException $exception) {
  95. $this->messageManager->addErrorMessage('Failed to update pickup status.');
  96. return $resultRedirect;
  97. }
  98. try {
  99. $this->pickupSender->setPickupCollected();
  100. $this->pickupSender->send($order);
  101. $this->messageManager->addSuccessMessage('Email confirmation was sent.');
  102. } catch (\Exception $exception) {
  103. $this->messageManager->addSuccessMessage('Email confirmation could not be sent.');
  104. }
  105. // update item quantities and order status
  106. $pickupItems = $pickup->getItems();
  107. /** @var \Magento\Sales\Model\Order\Item $orderItem */
  108. foreach ($order->getAllVisibleItems() as $orderItem) {
  109. if ($orderItem->getParentItem()) {
  110. continue;
  111. }
  112. if (!isset($pickupItems[$orderItem->getSku()])) {
  113. continue;
  114. }
  115. $qtyShipped = $orderItem->getQtyShipped();
  116. $qtyFulfilled = $pickupItems[$orderItem->getSku()];
  117. $orderItem->setQtyShipped($qtyShipped + $qtyFulfilled);
  118. }
  119. $this->orderRepository->save($order);
  120. return $resultRedirect;
  121. }
  122. }