/** * Get base currency rate * * @param string $code * @return float */ protected function _getBaseCurrencyRate($code) { if (!$this->_baseCurrencyRate) { $this->_baseCurrencyRate = $this->_currencyFactory->create()->load($code)->getAnyRate($this->_request->getBaseCurrency()->getCode()); } return $this->_baseCurrencyRate; }
/** * @param RateRequest $request * @return \Magento\Shipping\Model\Rate\Result */ public function collectRates(RateRequest $request) { if (!$this->getConfigFlag('active')) { return false; } /** @var Result $result */ $result = $this->_rateResultFactory->create(); $packageValue = $request->getBaseCurrency()->convert($request->getPackageValue(), $request->getPackageCurrency()); for ($i = 0; $i <= 5; $i++) { if ($this->getConfigData('type' . $i) == 'O') { // per order $shippingPrice = $this->getConfigData('price' . $i); } elseif ($this->getConfigData('type' . $i) == 'I') { // per item $shippingPrice = $request->getPackageQty() * $this->getConfigData('price' . $i) - $this->getFreeBoxes() * $this->getConfigData('price' . $i); } else { $shippingPrice = $this->getConfigData('price' . $i); } $shippingName = $this->getConfigData('name' . $i); if ($shippingName != "" && ($packageValue >= $this->getConfigData('min_shipping' . $i) && $packageValue <= $this->getConfigData('max_shipping' . $i)) or $shippingName != "" && $this->getConfigData('max_shipping' . $i) == "") { /** @var \Magento\Quote\Model\Quote\Address\RateResult\Method $method */ $method = $this->_rateMethodFactory->create(); $method->setCarrier('msmultiflat'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod($this->getConfigData('name' . $i)); $method->setMethodTitle($this->getConfigData('name' . $i)); $method->setMethodDetails($this->getConfigData('details' . $i)); $method->setMethodDescription($this->getConfigData('details' . $i)); $method->setPrice($shippingPrice); $method->setCost($shippingPrice); $result->append($method); } } return $result; }