_authSession = $authSession; $this->_request = $request; parent::__construct( $scopeConfig, $shippingConfig, $storeManager, $carrierFactory, $rateResultFactory, $shipmentRequestFactory, $regionFactory, $mathDivision, $stockRegistry ); } /** * Prepare and do request to shipment * * @param Shipment $orderShipment * @return \Magento\Framework\DataObject * @throws \Magento\Framework\Exception\LocalizedException * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function requestToShipment(Shipment $orderShipment) { $admin = $this->_authSession->getUser(); $order = $orderShipment->getOrder(); $shippingMethod = $order->getShippingMethod(true); $shipmentStoreId = $orderShipment->getStoreId(); $shipmentCarrier = $this->_carrierFactory->create($order->getShippingMethod(true)->getCarrierCode()); $baseCurrencyCode = $this->_storeManager->getStore($shipmentStoreId)->getBaseCurrencyCode(); if (!$shipmentCarrier) { throw new LocalizedException( __('The "%1" carrier is invalid. Verify and try again.', $shippingMethod->getCarrierCode()) ); } $shipperRegionCode = $this->_scopeConfig->getValue( Shipment::XML_PATH_STORE_REGION_ID, ScopeInterface::SCOPE_STORE, $shipmentStoreId ); if (is_numeric($shipperRegionCode)) { $shipperRegionCode = $this->_regionFactory->create()->load($shipperRegionCode)->getCode(); } $originStreet1 = $this->_scopeConfig->getValue( Shipment::XML_PATH_STORE_ADDRESS1, ScopeInterface::SCOPE_STORE, $shipmentStoreId ); $storeInfo = new DataObject( (array)$this->_scopeConfig->getValue( 'general/store_information', ScopeInterface::SCOPE_STORE, $shipmentStoreId ) ); if (!$admin->getFirstName() || !$admin->getLastName() || !$storeInfo->getName() || !$storeInfo->getPhone() || !$originStreet1 || !$this->_scopeConfig->getValue( Shipment::XML_PATH_STORE_CITY, ScopeInterface::SCOPE_STORE, $shipmentStoreId ) || !$this->_scopeConfig->getValue( Shipment::XML_PATH_STORE_ZIP, ScopeInterface::SCOPE_STORE, $shipmentStoreId ) || !$this->_scopeConfig->getValue( Shipment::XML_PATH_STORE_COUNTRY_ID, ScopeInterface::SCOPE_STORE, $shipmentStoreId ) ) { throw new LocalizedException( __( "Shipping labels can't be created. " . "Verify that the store information and settings are complete and try again." ) ); } /** @var $request \Magento\Shipping\Model\Shipment\Request */ $request = $this->_shipmentRequestFactory->create(); $request->setOrderShipment($orderShipment); $address = $order->getShippingAddress(); $this->setShipperDetails($request, $admin, $storeInfo, $shipmentStoreId, $shipperRegionCode, $originStreet1); $this->setRecipientDetails($request, $address); $request->setShippingMethod($shippingMethod->getMethod()); $request->setPackageWeight($order->getWeight()); $request->setPackages($orderShipment->getPackages()); $request->setBaseCurrencyCode($baseCurrencyCode); $request->setStoreId($shipmentStoreId); return $shipmentCarrier->requestToShipment($request); } /** * Set shipper details into request * @param \Magento\Shipping\Model\Shipment\Request $request * @param \Magento\User\Model\User $storeAdmin * @param \Magento\Framework\DataObject $store * @param $shipmentStoreId * @param $regionCode * @param $originStreet * @return void */ protected function setShipperDetails( Request $request, User $storeAdmin, DataObject $store, $shipmentStoreId, $regionCode, $originStreet ) { $originStreet2 = $this->_scopeConfig->getValue( Shipment::XML_PATH_STORE_ADDRESS2, ScopeInterface::SCOPE_STORE, $shipmentStoreId ); $request->setShipperContactPersonName($storeAdmin->getName()); $request->setShipperContactPersonFirstName($storeAdmin->getFirstName()); $request->setShipperContactPersonLastName($storeAdmin->getLastName()); $request->setShipperContactCompanyName($store->getName()); $request->setShipperContactPhoneNumber($store->getPhone()); $request->setShipperEmail($storeAdmin->getEmail()); $request->setShipperAddressStreet(trim($originStreet . ' ' . $originStreet2)); $request->setShipperAddressStreet1($originStreet); $request->setShipperAddressStreet2($originStreet2); $request->setShipperAddressCity( $this->_scopeConfig->getValue( Shipment::XML_PATH_STORE_CITY, ScopeInterface::SCOPE_STORE, $shipmentStoreId ) ); $request->setShipperAddressStateOrProvinceCode($regionCode); $request->setShipperAddressPostalCode( $this->_scopeConfig->getValue( Shipment::XML_PATH_STORE_ZIP, ScopeInterface::SCOPE_STORE, $shipmentStoreId ) ); $request->setShipperAddressCountryCode( $this->_scopeConfig->getValue( Shipment::XML_PATH_STORE_COUNTRY_ID, ScopeInterface::SCOPE_STORE, $shipmentStoreId ) ); } /** * Set recipient details into request * @param \Magento\Shipping\Model\Shipment\Request $request * @param \Magento\Sales\Model\Order\Address $address * @return void */ protected function setRecipientDetails(Request $request, Address $address) { $request->setRecipientContactPersonName(trim($address->getFirstname() . ' ' . $address->getLastname())); $request->setRecipientContactPersonFirstName($address->getFirstname()); $request->setRecipientContactPersonLastName($address->getLastname()); $request->setRecipientContactCompanyName($address->getCompany()); $request->setRecipientContactPhoneNumber($address->getTelephone()); $request->setRecipientEmail($address->getEmail()); $request->setRecipientAddressStreet(trim($address->getStreetLine(1) . ' ' . $address->getStreetLine(2))); $request->setRecipientAddressStreet1($address->getStreetLine(1)); $request->setRecipientAddressStreet2($address->getStreetLine(2)); $request->setRecipientAddressCity($address->getCity()); $request->setRecipientAddressStateOrProvinceCode($address->getRegionCode() ?: $address->getRegion()); $request->setRecipientAddressRegionCode($address->getRegionCode()); $request->setRecipientAddressPostalCode($address->getPostcode()); $request->setRecipientAddressCountryCode($address->getCountryId()); } }