123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Shipping\Model\Shipping;
- use Magento\Framework\DataObject;
- use Magento\Framework\Exception\LocalizedException;
- use Magento\Sales\Model\Order\Shipment;
- use Magento\Sales\Model\Order\Address;
- use Magento\Shipping\Model\Shipment\Request;
- use Magento\Store\Model\ScopeInterface;
- use Magento\User\Model\User;
- /**
- * Shipping labels model
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class Labels extends \Magento\Shipping\Model\Shipping
- {
- /**
- * @var \Magento\Backend\Model\Auth\Session
- */
- protected $_authSession;
- /**
- * @var \Magento\Shipping\Model\Shipment\Request
- */
- protected $_request;
- /**
- * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
- * @param \Magento\Shipping\Model\Config $shippingConfig
- * @param \Magento\Store\Model\StoreManagerInterface $storeManager
- * @param \Magento\Shipping\Model\CarrierFactory $carrierFactory
- * @param \Magento\Shipping\Model\Rate\ResultFactory $rateResultFactory
- * @param \Magento\Shipping\Model\Shipment\RequestFactory $shipmentRequestFactory
- * @param \Magento\Directory\Model\RegionFactory $regionFactory
- * @param \Magento\Framework\Math\Division $mathDivision
- * @param \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
- * @param \Magento\Backend\Model\Auth\Session $authSession
- * @param \Magento\Shipping\Model\Shipment\Request $request
- * @SuppressWarnings(PHPMD.ExcessiveParameterList)
- */
- public function __construct(
- \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
- \Magento\Shipping\Model\Config $shippingConfig,
- \Magento\Store\Model\StoreManagerInterface $storeManager,
- \Magento\Shipping\Model\CarrierFactory $carrierFactory,
- \Magento\Shipping\Model\Rate\ResultFactory $rateResultFactory,
- \Magento\Shipping\Model\Shipment\RequestFactory $shipmentRequestFactory,
- \Magento\Directory\Model\RegionFactory $regionFactory,
- \Magento\Framework\Math\Division $mathDivision,
- \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry,
- \Magento\Backend\Model\Auth\Session $authSession,
- Request $request
- ) {
- $this->_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());
- }
- }
|