AddTrack.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. /**
  3. *
  4. * Copyright © Magento, Inc. All rights reserved.
  5. * See COPYING.txt for license details.
  6. */
  7. namespace Magento\Shipping\Controller\Adminhtml\Order\Shipment;
  8. use Magento\Backend\App\Action;
  9. class AddTrack extends \Magento\Backend\App\Action
  10. {
  11. /**
  12. * Authorization level of a basic admin session
  13. *
  14. * @see _isAllowed()
  15. */
  16. const ADMIN_RESOURCE = 'Magento_Sales::shipment';
  17. /**
  18. * @var \Magento\Shipping\Controller\Adminhtml\Order\ShipmentLoader
  19. */
  20. protected $shipmentLoader;
  21. /**
  22. * @param Action\Context $context
  23. * @param \Magento\Shipping\Controller\Adminhtml\Order\ShipmentLoader $shipmentLoader
  24. */
  25. public function __construct(
  26. Action\Context $context,
  27. \Magento\Shipping\Controller\Adminhtml\Order\ShipmentLoader $shipmentLoader
  28. ) {
  29. $this->shipmentLoader = $shipmentLoader;
  30. parent::__construct($context);
  31. }
  32. /**
  33. * Add new tracking number action
  34. *
  35. * @return void
  36. * @throws \Magento\Framework\Exception\LocalizedException
  37. */
  38. public function execute()
  39. {
  40. try {
  41. $carrier = $this->getRequest()->getPost('carrier');
  42. $number = $this->getRequest()->getPost('number');
  43. $title = $this->getRequest()->getPost('title');
  44. if (empty($carrier)) {
  45. throw new \Magento\Framework\Exception\LocalizedException(__('Please specify a carrier.'));
  46. }
  47. if (empty($number)) {
  48. throw new \Magento\Framework\Exception\LocalizedException(__('Please enter a tracking number.'));
  49. }
  50. $this->shipmentLoader->setOrderId($this->getRequest()->getParam('order_id'));
  51. $this->shipmentLoader->setShipmentId($this->getRequest()->getParam('shipment_id'));
  52. $this->shipmentLoader->setShipment($this->getRequest()->getParam('shipment'));
  53. $this->shipmentLoader->setTracking($this->getRequest()->getParam('tracking'));
  54. $shipment = $this->shipmentLoader->load();
  55. if ($shipment) {
  56. $track = $this->_objectManager->create(
  57. \Magento\Sales\Model\Order\Shipment\Track::class
  58. )->setNumber(
  59. $number
  60. )->setCarrierCode(
  61. $carrier
  62. )->setTitle(
  63. $title
  64. );
  65. $shipment->addTrack($track)->save();
  66. $this->_view->loadLayout();
  67. $this->_view->getPage()->getConfig()->getTitle()->prepend(__('Shipments'));
  68. $response = $this->_view->getLayout()->getBlock('shipment_tracking')->toHtml();
  69. } else {
  70. $response = [
  71. 'error' => true,
  72. 'message' => __('We can\'t initialize shipment for adding tracking number.'),
  73. ];
  74. }
  75. } catch (\Magento\Framework\Exception\LocalizedException $e) {
  76. $response = ['error' => true, 'message' => $e->getMessage()];
  77. } catch (\Exception $e) {
  78. $response = ['error' => true, 'message' => __('Cannot add tracking number.')];
  79. }
  80. if (is_array($response)) {
  81. $response = $this->_objectManager->get(\Magento\Framework\Json\Helper\Data::class)->jsonEncode($response);
  82. $this->getResponse()->representJson($response);
  83. } else {
  84. $this->getResponse()->setBody($response);
  85. }
  86. }
  87. }