<?php namespace uafrica\Customshipping\Model\Carrier; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\DataObject; use Magento\Shipping\Model\Carrier\AbstractCarrier; use Magento\Shipping\Model\Carrier\CarrierInterface; use Magento\Shipping\Model\Config; use Magento\Shipping\Model\Rate\ResultFactory; use Magento\Store\Model\ScopeInterface; use Magento\Quote\Model\Quote\Address\RateResult\ErrorFactory; use Magento\Quote\Model\Quote\Address\RateResult\Method; use Magento\Quote\Model\Quote\Address\RateResult\MethodFactory; use Magento\Quote\Model\Quote\Address\RateRequest; use Psr\Log\LoggerInterface; use Magento\Framework\App\ActionInterface; use Magento\Framework\App\ResponseInterface; use Magento\Framework\Controller\ResultInterface; use Magento\Framework\Controller\Result\JsonFactory; use Magento\Framework\HTTP\Client\Curl; use Magento\Framework\HTTP\Client\CurlFactory; /** * @category uafrica * @package uafrica_Customshipping * @author info@bob.co.za * @website https://www.bob.co.za */ class Customshipping extends AbstractCarrier implements CarrierInterface { /** * Carrier's code * * @var string */ protected $_code = 'uafrica'; /** * Whether this carrier has fixed rates calculation * * @var bool */ protected $_isFixed = true; /** * @var ResultFactory */ protected $_rateResultFactory; /** * @var MethodFactory */ protected $_rateMethodFactory; //TODO: REFACTO THIS /** * @var \Magento\Framework\Controller\Result\JsonFactory */ protected $jsonFactory; /** * @var \Magento\Framework\HTTP\Client\Curl */ protected $curl; /** * @param \Magento\Framework\Controller\Result\JsonFactory $jsonFactory */ /** * @param ScopeConfigInterface $scopeConfig * @param ErrorFactory $rateErrorFactory * @param LoggerInterface $logger * @param ResultFactory $rateResultFactory * @param MethodFactory $rateMethodFactory * @param array $data */ public function __construct( ScopeConfigInterface $scopeConfig, ErrorFactory $rateErrorFactory, LoggerInterface $logger, ResultFactory $rateResultFactory, MethodFactory $rateMethodFactory, JsonFactory $jsonFactory, CurlFactory $curlFactory, array $data = [] ) { $this->jsonFactory = $jsonFactory; $this->curl = $curlFactory->create(); $this->_rateResultFactory = $rateResultFactory; $this->_rateMethodFactory = $rateMethodFactory; parent::__construct($scopeConfig, $rateErrorFactory, $logger, $data); } /** * Generates list of allowed carrier`s shipping methods * Displays on cart price rules page * * @return array * @api */ public function getAllowedMethods(): array { return [$this->getCarrierCode() => __($this->getConfigData('name'))]; } /** * Allow Display of uAfrica/Bobgo in the list of carriers (Admin) * @return bool */ public function isTrackingAvailable(): bool { return true; } /** * Collect and get rates for storefront * * @SuppressWarnings(PHPMD.UnusedFormalParameter) * @param RateRequest $request * @return DataObject|bool|null * @api */ public function collectRates(RateRequest $request) { /** * Make sure that Shipping method is enabled */ if (!$this->isActive()) { return false; } /** @var \Magento\Shipping\Model\Rate\Result $result */ $result = $this->_rateResultFactory->create(); $shippingPrice = $this->getConfigData('price'); $method = $this->_rateMethodFactory->create(); /** * Set carrier's method data */ $method->setCarrier($this->getCarrierCode()); $method->setCarrierTitle($this->getConfigData('title')); /** * Displayed as shipping method under Carrier */ $method->setMethod($this->getCarrierCode()); $method->setMethodTitle($this->getConfigData('name')); $method->setPrice($shippingPrice); $method->setCost($shippingPrice); $result->append($method); return $result; } }