shipmentLoader = $shipmentLoader; parent::__construct($context); } /** * Add new tracking number action * * @return void * @throws \Magento\Framework\Exception\LocalizedException */ public function execute() { try { $carrier = $this->getRequest()->getPost('carrier'); $number = $this->getRequest()->getPost('number'); $title = $this->getRequest()->getPost('title'); if (empty($carrier)) { throw new \Magento\Framework\Exception\LocalizedException(__('Please specify a carrier.')); } if (empty($number)) { throw new \Magento\Framework\Exception\LocalizedException(__('Please enter a tracking number.')); } $this->shipmentLoader->setOrderId($this->getRequest()->getParam('order_id')); $this->shipmentLoader->setShipmentId($this->getRequest()->getParam('shipment_id')); $this->shipmentLoader->setShipment($this->getRequest()->getParam('shipment')); $this->shipmentLoader->setTracking($this->getRequest()->getParam('tracking')); $shipment = $this->shipmentLoader->load(); if ($shipment) { $track = $this->_objectManager->create( \Magento\Sales\Model\Order\Shipment\Track::class )->setNumber( $number )->setCarrierCode( $carrier )->setTitle( $title ); $shipment->addTrack($track)->save(); $this->_view->loadLayout(); $this->_view->getPage()->getConfig()->getTitle()->prepend(__('Shipments')); $response = $this->_view->getLayout()->getBlock('shipment_tracking')->toHtml(); } else { $response = [ 'error' => true, 'message' => __('We can\'t initialize shipment for adding tracking number.'), ]; } } catch (\Magento\Framework\Exception\LocalizedException $e) { $response = ['error' => true, 'message' => $e->getMessage()]; } catch (\Exception $e) { $response = ['error' => true, 'message' => __('Cannot add tracking number.')]; } if (is_array($response)) { $response = $this->_objectManager->get(\Magento\Framework\Json\Helper\Data::class)->jsonEncode($response); $this->getResponse()->representJson($response); } else { $this->getResponse()->setBody($response); } } }