| Current Path : /home/rtorresani/www/vendor/magento/module-shipping/Block/Adminhtml/Order/ |
| Current File : //home/rtorresani/www/vendor/magento/module-shipping/Block/Adminhtml/Order/Packaging.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Shipping\Block\Adminhtml\Order;
use Magento\Framework\App\ObjectManager;
use Magento\Shipping\Helper\Carrier;
/**
* Adminhtml shipment packaging
*
* @api
* @since 100.0.2
*/
class Packaging extends \Magento\Backend\Block\Template
{
/**
* Source size model
*
* @var \Magento\Shipping\Model\Carrier\Source\GenericInterface
*/
protected $_sourceSizeModel;
/**
* Core registry
*
* @var \Magento\Framework\Registry
*/
protected $_coreRegistry = null;
/**
* @var \Magento\Framework\Json\EncoderInterface
*/
protected $_jsonEncoder;
/**
* @var \Magento\Shipping\Model\CarrierFactory
*/
protected $_carrierFactory;
/**
* @param \Magento\Backend\Block\Template\Context $context
* @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
* @param \Magento\Shipping\Model\Carrier\Source\GenericInterface $sourceSizeModel
* @param \Magento\Framework\Registry $coreRegistry
* @param \Magento\Shipping\Model\CarrierFactory $carrierFactory
* @param array $data
* @param Carrier|null $carrierHelper
*/
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Framework\Json\EncoderInterface $jsonEncoder,
\Magento\Shipping\Model\Carrier\Source\GenericInterface $sourceSizeModel,
\Magento\Framework\Registry $coreRegistry,
\Magento\Shipping\Model\CarrierFactory $carrierFactory,
array $data = [],
?Carrier $carrierHelper = null
) {
$this->_jsonEncoder = $jsonEncoder;
$this->_coreRegistry = $coreRegistry;
$this->_sourceSizeModel = $sourceSizeModel;
$this->_carrierFactory = $carrierFactory;
$data['carrierHelper'] = $carrierHelper ?? ObjectManager::getInstance()->get(Carrier::class);
parent::__construct($context, $data);
}
/**
* Retrieve shipment model instance
*
* @return \Magento\Sales\Model\Order\Shipment
*/
public function getShipment()
{
return $this->_coreRegistry->registry('current_shipment');
}
/**
* Configuration for popup window for packaging
*
* @return string
* @SuppressWarnings(PHPMD.RequestAwareBlockMethod)
*/
public function getConfigDataJson()
{
$shipmentId = $this->getShipment()->getId();
$orderId = $this->getRequest()->getParam('order_id');
$urlParams = [];
$itemsQty = [];
$itemsPrice = [];
$itemsName = [];
$itemsWeight = [];
$itemsProductId = [];
$itemsOrderItemId = [];
if ($shipmentId) {
$urlParams['shipment_id'] = $shipmentId;
$createLabelUrl = $this->getUrl('adminhtml/order_shipment/createLabel', $urlParams);
$itemsGridUrl = $this->getUrl('adminhtml/order_shipment/getShippingItemsGrid', $urlParams);
foreach ($this->getShipment()->getAllItems() as $item) {
$itemsQty[$item->getId()] = $item->getQty();
$itemsPrice[$item->getId()] = $item->getPrice();
$itemsName[$item->getId()] = $item->getName();
$itemsWeight[$item->getId()] = $item->getWeight();
$itemsProductId[$item->getId()] = $item->getProductId();
$itemsOrderItemId[$item->getId()] = $item->getOrderItemId();
}
} else {
if ($orderId) {
$urlParams['order_id'] = $orderId;
$createLabelUrl = $this->getUrl('adminhtml/order_shipment/save', $urlParams);
$itemsGridUrl = $this->getUrl('adminhtml/order_shipment/getShippingItemsGrid', $urlParams);
foreach ($this->getShipment()->getAllItems() as $item) {
$itemsQty[$item->getOrderItemId()] = $item->getQty() * 1;
$itemsPrice[$item->getOrderItemId()] = $item->getPrice();
$itemsName[$item->getOrderItemId()] = $item->getName();
$itemsWeight[$item->getOrderItemId()] = $item->getWeight();
$itemsProductId[$item->getOrderItemId()] = $item->getProductId();
$itemsOrderItemId[$item->getOrderItemId()] = $item->getOrderItemId();
}
}
}
$data = [
'createLabelUrl' => $createLabelUrl,
'itemsGridUrl' => $itemsGridUrl,
'errorQtyOverLimit' => __(
'You are trying to add a quantity for some products that doesn\'t match the quantity that was shipped.'
),
'titleDisabledSaveBtn' => __('Products should be added to package(s)'),
'validationErrorMsg' => __('The value that you entered is not valid.'),
'shipmentItemsQty' => $itemsQty,
'shipmentItemsPrice' => $itemsPrice,
'shipmentItemsName' => $itemsName,
'shipmentItemsWeight' => $itemsWeight,
'shipmentItemsProductId' => $itemsProductId,
'shipmentItemsOrderItemId' => $itemsOrderItemId,
'customizable' => $this->_getCustomizableContainers(),
];
return $this->_jsonEncoder->encode($data);
}
/**
* Return container types of carrier
*
* @return array
*/
public function getContainers()
{
$order = $this->getShipment()->getOrder();
$storeId = $this->getShipment()->getStoreId();
$address = $order->getShippingAddress();
$carrier = $this->_carrierFactory->create($order->getShippingMethod(true)->getCarrierCode());
$countryShipper = $this->_scopeConfig->getValue(
\Magento\Sales\Model\Order\Shipment::XML_PATH_STORE_COUNTRY_ID,
\Magento\Store\Model\ScopeInterface::SCOPE_STORE,
$storeId
);
if ($carrier) {
$params = new \Magento\Framework\DataObject(
[
'method' => $order->getShippingMethod(true)->getMethod(),
'country_shipper' => $countryShipper,
'country_recipient' => $address->getCountryId(),
]
);
return $carrier->getContainerTypes($params);
}
return [];
}
/**
* Get codes of customizable container types of carrier
*
* @return array
*/
protected function _getCustomizableContainers()
{
$order = $this->getShipment()->getOrder();
$carrier = $this->_carrierFactory->create($order->getShippingMethod(true)->getCarrierCode());
if ($carrier) {
return $carrier->getCustomizableContainerTypes();
}
return [];
}
/**
* Return name of container type by its code
*
* @param string $code
* @return string
*/
public function getContainerTypeByCode($code)
{
$order = $this->getShipment()->getOrder();
$carrier = $this->_carrierFactory->create($order->getShippingMethod(true)->getCarrierCode());
if ($carrier) {
$containerTypes = $carrier->getContainerTypes();
$containerType = !empty($containerTypes[$code]) ? $containerTypes[$code] : '';
return $containerType;
}
return '';
}
/**
* Return name of delivery confirmation type by its code
*
* @param string $code
* @return string
*/
public function getDeliveryConfirmationTypeByCode($code)
{
$countryId = $this->getShipment()->getOrder()->getShippingAddress()->getCountryId();
$order = $this->getShipment()->getOrder();
$carrier = $this->_carrierFactory->create($order->getShippingMethod(true)->getCarrierCode());
if ($carrier) {
$params = new \Magento\Framework\DataObject(['country_recipient' => $countryId]);
$confirmationTypes = $carrier->getDeliveryConfirmationTypes($params);
$confirmationType = !empty($confirmationTypes[$code]) ? $confirmationTypes[$code] : '';
return $confirmationType;
}
return '';
}
/**
* Return name of content type by its code
*
* @param string $code
* @return string
*/
public function getContentTypeByCode($code)
{
$contentTypes = $this->getContentTypes();
if (!empty($contentTypes[$code])) {
return $contentTypes[$code];
}
return '';
}
/**
* Get packed products in packages
*
* @return array
*/
public function getPackages()
{
return $this->getShipment()->getPackages();
}
/**
* Get item of shipment by its id
*
* @param string $itemId
* @param string $itemsOf
* @return \Magento\Framework\DataObject
*/
public function getShipmentItem($itemId, $itemsOf)
{
$items = $this->getShipment()->getAllItems();
foreach ($items as $item) {
if ($itemsOf == 'order' && $item->getOrderItemId() == $itemId) {
return $item;
} else {
if ($itemsOf == 'shipment' && $item->getId() == $itemId) {
return $item;
}
}
}
return new \Magento\Framework\DataObject();
}
/**
* Can display customs value
*
* @return bool
*/
public function displayCustomsValue()
{
$storeId = $this->getShipment()->getStoreId();
$order = $this->getShipment()->getOrder();
$address = $order->getShippingAddress();
$shipperAddressCountryCode = $this->_scopeConfig->getValue(
\Magento\Sales\Model\Order\Shipment::XML_PATH_STORE_COUNTRY_ID,
\Magento\Store\Model\ScopeInterface::SCOPE_STORE,
$storeId
);
$recipientAddressCountryCode = $address->getCountryId();
if ($shipperAddressCountryCode != $recipientAddressCountryCode) {
return true;
}
return false;
}
/**
* Return delivery confirmation types of current carrier
*
* @return array
*/
public function getDeliveryConfirmationTypes()
{
$countryId = $this->getShipment()->getOrder()->getShippingAddress()->getCountryId();
$order = $this->getShipment()->getOrder();
$carrier = $this->_carrierFactory->create($order->getShippingMethod(true)->getCarrierCode());
$params = new \Magento\Framework\DataObject(['country_recipient' => $countryId]);
if ($carrier && is_array($carrier->getDeliveryConfirmationTypes($params))) {
return $carrier->getDeliveryConfirmationTypes($params);
}
return [];
}
/**
* Print button for creating pdf
*
* @return string
*/
public function getPrintButton()
{
$data['shipment_id'] = $this->getShipment()->getId();
return $this->getUrl('adminhtml/order_shipment/printPackage', $data);
}
/**
* Check whether girth is allowed for current carrier
*
* @return bool
*/
public function isGirthAllowed()
{
$order = $this->getShipment()->getOrder();
$carrier = $this->_carrierFactory->create($order->getShippingMethod(true)->getCarrierCode());
return $carrier->isGirthAllowed($this->getShipment()->getOrder()->getShippingAddress()->getCountryId());
}
/**
* Is display girth value
*
* @return bool
*/
public function isDisplayGirthValue()
{
return false;
}
/**
* Return content types of package
*
* @return array
*/
public function getContentTypes()
{
$order = $this->getShipment()->getOrder();
$storeId = $this->getShipment()->getStoreId();
$address = $order->getShippingAddress();
$carrier = $this->_carrierFactory->create($order->getShippingMethod(true)->getCarrierCode());
$countryShipper = $this->_scopeConfig->getValue(
\Magento\Sales\Model\Order\Shipment::XML_PATH_STORE_COUNTRY_ID,
\Magento\Store\Model\ScopeInterface::SCOPE_STORE,
$storeId
);
if ($carrier) {
$params = new \Magento\Framework\DataObject(
[
'method' => $order->getShippingMethod(true)->getMethod(),
'country_shipper' => $countryShipper,
'country_recipient' => $address->getCountryId(),
]
);
return $carrier->getContentTypes($params);
}
return [];
}
/**
* Get Currency Code for Custom Value
*
* @return string
*/
public function getCustomValueCurrencyCode()
{
$orderInfo = $this->getShipment()->getOrder();
return $orderInfo->getOrderCurrency()->getCurrencyCode();
}
/**
* Display formatted price
*
* @param float $price
* @return string
*/
public function displayPrice($price)
{
return $this->getShipment()->getOrder()->formatPriceTxt($price);
}
/**
* Display formatted customs price
*
* @param float $price
* @return string
*/
public function displayCustomsPrice($price)
{
$orderInfo = $this->getShipment()->getOrder();
return $orderInfo->getBaseCurrency()->formatTxt($price);
}
/**
* Get ordered qty of item
*
* @param int $itemId
* @return int|null
*/
public function getQtyOrderedItem($itemId)
{
if ($itemId) {
return $this->getShipment()->getOrder()->getItemById($itemId)->getQtyOrdered() * 1;
} else {
return;
}
}
/**
* Get source size model
*
* @return \Magento\Shipping\Model\Carrier\Source\GenericInterface
*/
public function getSourceSizeModel()
{
return $this->_sourceSizeModel;
}
}