0

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.

asked Jan 29, 2020 at 8:14
4
  • Delete the generated/meta generated/code and do the di:compile again. Commented Jan 29, 2020 at 8:21
  • Its in developer mode @SukumarGorai however i have tried after deleting generated folder its same. Commented Jan 29, 2020 at 8:23
  • @AmanAlam are you able to find your answers? Commented Feb 28, 2020 at 12:05
  • @sumeetbajaj not yet Commented Feb 28, 2020 at 12:09

1 Answer 1

0

you used the newest Magento version than the Module. Change the module constructor like this code

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,
 \Magento\Store\Model\StoreManagerInterface $storeManager,
 Config $configHelper, 
 \Magento\Framework\HTTP\ClientFactory $httpClientFactory, 
 array $data = []
) {
 $this->_storeManager = $storeManager;
 parent::__construct(
 $scopeConfig,
 $rateErrorFactory,
 $logger,
 $xmlSecurity,
 $xmlElFactory,
 $rateFactory,
 $rateMethodFactory,
 $trackFactory,
 $trackErrorFactory,
 $trackStatusFactory,
 $regionFactory,
 $countryFactory,
 $currencyFactory,
 $directoryData,
 $stockRegistry,
 $localeFormat,
 $configHelper,
 $httpClientFactory,
 $data
 );
}

Or just use auto-generation of IDE to generate the constructor.

Msquare
9,4627 gold badges30 silver badges71 bronze badges
answered Mar 15, 2023 at 6:38

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.