Exception #0 (Magento\Framework\Exception\RuntimeException): Type Error occurred when creating object: Namespace\Module\Model\Ups\Carrier
Namespace\Module\Model\Ups\Carrier.php
<?php
namespace Namespace\Module\Model\Ups;
use Magento\Quote\Model\Quote\Address\RateRequest;
use Magento\Framework\Xml\Security;
use Magento\Framework\HTTP\AsyncClientInterface;
use Magento\Framework\HTTP\ClientFactory;
use Magento\Shipping\Model\Rate\Result\ProxyDeferredFactory;
use Magento\Shipping\Model\Carrier\CarrierInterface;
use Magento\Ups\Helper\Config;
class Carrier extends \Magento\Ups\Model\Carrier
{
protected $_localeFormat;
protected $configHelper;
private $asyncHttpClient;
private $deferredProxyFactory;
public function __construct(
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
\Magento\Quote\Model\Quote\Address\RateResult\ErrorFactory $rateErrorFactory,
\Psr\Log\LoggerInterface $logger,
Security $xmlSecurity,
\Magento\Shipping\Model\Simplexml\ElementFactory $xmlElFactory,
\Magento\Shipping\Model\Rate\ResultFactory $rateFactory,
\Magento\Quote\Model\Quote\Address\RateResult\MethodFactory $rateMethodFactory,
\Magento\Shipping\Model\Tracking\ResultFactory $trackFactory,
\Magento\Shipping\Model\Tracking\Result\ErrorFactory $trackErrorFactory,
\Magento\Shipping\Model\Tracking\Result\StatusFactory $trackStatusFactory,
\Magento\Directory\Model\RegionFactory $regionFactory,
\Magento\Directory\Model\CountryFactory $countryFactory,
\Magento\Directory\Model\CurrencyFactory $currencyFactory,
\Magento\Directory\Helper\Data $directoryData,
\Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry,
\Magento\Framework\Locale\FormatInterface $localeFormat,
Config $configHelper,
ClientFactory $httpClientFactory,
array $data = [],
?AsyncClientInterface $asyncHttpClient = null,
?ProxyDeferredFactory $proxyDeferredFactory
) {
parent::__construct(
$scopeConfig,
$rateErrorFactory,
$logger,
$xmlSecurity,
$xmlElFactory,
$rateFactory,
$rateMethodFactory,
$trackFactory,
$trackErrorFactory,
$trackStatusFactory,
$regionFactory,
$countryFactory,
$currencyFactory,
$directoryData,
$stockRegistry,
$data
);
$this->_localeFormat = $localeFormat;
$this->configHelper = $configHelper;
$this->asyncHttpClient = $asyncHttpClient ?? ObjectManager::getInstance()->get(AsyncClientInterface::class);
$this->deferredProxyFactory = $proxyDeferredFactory
?? ObjectManager::getInstance()->get(ProxyDeferredFactory::class);
}
public function setRequest(RateRequest $request)
{
$this->_request = $request;
$rowRequest = new \Magento\Framework\DataObject();
if ($request->getLimitMethod()) {
$rowRequest->setAction($this->configHelper->getCode('action', 'single'));
$rowRequest->setProduct($request->getLimitMethod());
} else {
$rowRequest->setAction($this->configHelper->getCode('action', 'all'));
$rowRequest->setProduct('GND' . $this->getConfigData('dest_type'));
}
if ($request->getUpsPickup()) {
$pickup = $request->getUpsPickup();
} else {
$pickup = $this->getConfigData('pickup');
}
$rowRequest->setPickup($this->configHelper->getCode('pickup', $pickup));
if ($request->getUpsContainer()) {
$container = $request->getUpsContainer();
} else {
$container = $this->getConfigData('container');
}
$rowRequest->setContainer($this->configHelper->getCode('container', $container));
if ($request->getUpsDestType()) {
$destType = $request->getUpsDestType();
} else {
$destType = $this->getConfigData('dest_type');
}
$rowRequest->setDestType($this->configHelper->getCode('dest_type', $destType));
if ($request->getOrigCountry()) {
$origCountry = $request->getOrigCountry();
} else {
$origCountry = $this->_scopeConfig->getValue(
\Magento\Sales\Model\Order\Shipment::XML_PATH_STORE_COUNTRY_ID,
\Magento\Store\Model\ScopeInterface::SCOPE_STORE,
$request->getStoreId()
);
}
$rowRequest->setOrigCountry($this->_countryFactory->create()->load($origCountry)->getData('iso2_code'));
if ($request->getOrigRegionCode()) {
$origRegionCode = $request->getOrigRegionCode();
} else {
$origRegionCode = $this->_scopeConfig->getValue(
\Magento\Sales\Model\Order\Shipment::XML_PATH_STORE_REGION_ID,
\Magento\Store\Model\ScopeInterface::SCOPE_STORE,
$request->getStoreId()
);
}
if (is_numeric($origRegionCode)) {
$origRegionCode = $this->_regionFactory->create()->load($origRegionCode)->getCode();
}
$rowRequest->setOrigRegionCode($origRegionCode);
if ($request->getOrigPostcode()) {
$rowRequest->setOrigPostal($request->getOrigPostcode());
} else {
$rowRequest->setOrigPostal(
$this->_scopeConfig->getValue(
\Magento\Sales\Model\Order\Shipment::XML_PATH_STORE_ZIP,
\Magento\Store\Model\ScopeInterface::SCOPE_STORE,
$request->getStoreId()
)
);
}
if ($request->getOrigCity()) {
$rowRequest->setOrigCity($request->getOrigCity());
} else {
$rowRequest->setOrigCity(
$this->_scopeConfig->getValue(
\Magento\Sales\Model\Order\Shipment::XML_PATH_STORE_CITY,
\Magento\Store\Model\ScopeInterface::SCOPE_STORE,
$request->getStoreId()
)
);
}
if ($request->getDestCountryId()) {
$destCountry = $request->getDestCountryId();
} else {
$destCountry = self::USA_COUNTRY_ID;
}
//for UPS, puero rico state for US will assume as puerto rico country
if ($destCountry == self::USA_COUNTRY_ID && ($request->getDestPostcode() == '00912' ||
$request->getDestRegionCode() == self::PUERTORICO_COUNTRY_ID)
) {
$destCountry = self::PUERTORICO_COUNTRY_ID;
}
// For UPS, Guam state of the USA will be represented by Guam country
if ($destCountry == self::USA_COUNTRY_ID && $request->getDestRegionCode() == self::GUAM_REGION_CODE) {
$destCountry = self::GUAM_COUNTRY_ID;
}
// For UPS, Las Palmas and Santa Cruz de Tenerife will be represented by Canary Islands country
if ($destCountry === 'ES' &&
($request->getDestRegionCode() === 'Las Palmas'
|| $request->getDestRegionCode() === 'Santa Cruz de Tenerife')
) {
$destCountry = 'IC';
}
$country = $this->_countryFactory->create()->load($destCountry);
$rowRequest->setDestCountry($country->getData('iso2_code') ?: $destCountry);
$rowRequest->setDestRegionCode($request->getDestRegionCode());
if ($request->getDestPostcode()) {
$rowRequest->setDestPostal($request->getDestPostcode());
}
$weight = $this->getTotalNumOfBoxes($request->getPackageWeight());
$weight = $this->_getCorrectWeight($weight);
$rowRequest->setWeight($weight);
if ($request->getFreeMethodWeight() != $request->getPackageWeight()) {
$rowRequest->setFreeMethodWeight($request->getFreeMethodWeight());
}
$rowRequest->setValue($request->getPackageValue());
$rowRequest->setValueWithDiscount($request->getPackageValueWithDiscount());
if ($request->getUpsUnitMeasure()) {
$unit = $request->getUpsUnitMeasure();
} else {
$unit = $this->getConfigData('unit_of_measure');
}
$rowRequest->setUnitMeasure($unit);
$rowRequest->setIsReturn($request->getIsReturn());
$rowRequest->setBaseSubtotalInclTax($request->getBaseSubtotalInclTax());
$this->_rawRequest = $rowRequest;
return $this;
}
}
Namespace\Module\etc\di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Ups\Model\Carrier" type="Namespace\Module\Model\Ups\Carrier" />
</config>
Note: Without constructor function overriding is working but i need to use constructor for custom functionality.
Help is highly appriciated thank you very much.