| Current Path : /var/www/clients/client3/web2/web/vendor/magento/module-shipping/Model/Shipping/ |
| Current File : /var/www/clients/client3/web2/web/vendor/magento/module-shipping/Model/Shipping/Labels.php |
<?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());
}
}