![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-offline-shipping/Model/Carrier/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ /** * Free shipping model * * @author Magento Core Team <[email protected]> */ namespace Magento\OfflineShipping\Model\Carrier; use Magento\Quote\Model\Quote\Address\RateRequest; /** * Free shipping model * * @api * @since 100.0.2 */ class Freeshipping extends \Magento\Shipping\Model\Carrier\AbstractCarrier implements \Magento\Shipping\Model\Carrier\CarrierInterface { /** * @var string */ protected $_code = 'freeshipping'; /** * @var bool */ protected $_isFixed = true; /** * @var \Magento\Shipping\Model\Rate\ResultFactory */ protected $_rateResultFactory; /** * @var \Magento\Quote\Model\Quote\Address\RateResult\MethodFactory */ protected $_rateMethodFactory; /** * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param \Magento\Quote\Model\Quote\Address\RateResult\ErrorFactory $rateErrorFactory * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Shipping\Model\Rate\ResultFactory $rateResultFactory * @param \Magento\Quote\Model\Quote\Address\RateResult\MethodFactory $rateMethodFactory * @param array $data */ public function __construct( \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Quote\Model\Quote\Address\RateResult\ErrorFactory $rateErrorFactory, \Psr\Log\LoggerInterface $logger, \Magento\Shipping\Model\Rate\ResultFactory $rateResultFactory, \Magento\Quote\Model\Quote\Address\RateResult\MethodFactory $rateMethodFactory, array $data = [] ) { $this->_rateResultFactory = $rateResultFactory; $this->_rateMethodFactory = $rateMethodFactory; parent::__construct($scopeConfig, $rateErrorFactory, $logger, $data); } /** * Check subtotal for allowed free shipping * * @param RateRequest $request * * @return bool */ private function isFreeShippingRequired(RateRequest $request): bool { $minSubtotal = $request->getPackageValueWithDiscount(); if ($request->getBaseSubtotalWithDiscountInclTax() && $this->getConfigFlag('tax_including')) { $minSubtotal = $request->getBaseSubtotalWithDiscountInclTax(); } return $minSubtotal >= $this->getConfigData('free_shipping_subtotal'); } /** * FreeShipping Rates Collector * * @param RateRequest $request * @return \Magento\Shipping\Model\Rate\Result|bool */ public function collectRates(RateRequest $request) { if (!$this->getConfigFlag('active')) { return false; } /** @var \Magento\Shipping\Model\Rate\Result $result */ $result = $this->_rateResultFactory->create(); $this->_updateFreeMethodQuote($request); if ($request->getFreeShipping() || $this->isFreeShippingRequired($request)) { /** @var \Magento\Quote\Model\Quote\Address\RateResult\Method $method */ $method = $this->_rateMethodFactory->create(); $method->setCarrier('freeshipping'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('freeshipping'); $method->setMethodTitle($this->getConfigData('name')); $method->setPrice('0.00'); $method->setCost('0.00'); $result->append($method); } elseif ($this->getConfigData('showmethod')) { $error = $this->_rateErrorFactory->create(); $error->setCarrier($this->_code); $error->setCarrierTitle($this->getConfigData('title')); $errorMsg = $this->getConfigData('specificerrmsg'); $error->setErrorMessage( $errorMsg ? $errorMsg : __( 'Sorry, but we can\'t deliver to the destination country with this shipping module.' ) ); return $error; } return $result; } /** * Allows free shipping when all product items have free shipping (promotions etc.) * * @param \Magento\Quote\Model\Quote\Address\RateRequest $request * @return void */ protected function _updateFreeMethodQuote($request) { $freeShipping = false; $items = $request->getAllItems(); $c = count($items); for ($i = 0; $i < $c; $i++) { if ($items[$i]->getProduct() instanceof \Magento\Catalog\Model\Product) { if ($items[$i]->getFreeShipping()) { $freeShipping = true; } else { return; } } } if ($freeShipping) { $request->setFreeShipping(true); } } /** * Returns allowed shipping methods * * @return array */ public function getAllowedMethods() { return [$this->_code => $this->getConfigData('name')]; } }