storeManager = $storeManager; $this->currencyFactory = $currencyFactory; $this->logger = $logger; } /** * @inheritdoc */ public function convert($amount, $scope = null, $currency = null) { $currentCurrency = $this->getCurrency($scope, $currency); return $this->getStore($scope) ->getBaseCurrency() ->convert($amount, $currentCurrency); } /** * @inheritdoc */ public function convertAndRound($amount, $scope = null, $currency = null, $precision = self::DEFAULT_PRECISION) { return $this->roundPrice($this->convert($amount, $scope, $currency), $precision); } /** * @inheritdoc */ public function format( $amount, $includeContainer = true, $precision = self::DEFAULT_PRECISION, $scope = null, $currency = null ) { return $this->getCurrency($scope, $currency) ->formatPrecision($amount, $precision, [], $includeContainer); } /** * @inheritdoc */ public function convertAndFormat( $amount, $includeContainer = true, $precision = self::DEFAULT_PRECISION, $scope = null, $currency = null ) { $amount = $this->convert($amount, $scope, $currency); return $this->format($amount, $includeContainer, $precision, $scope, $currency); } /** * @inheritdoc */ public function getCurrency($scope = null, $currency = null) { if ($currency instanceof Currency) { $currentCurrency = $currency; } elseif (is_string($currency)) { $currency = $this->currencyFactory->create() ->load($currency); $baseCurrency = $this->getStore($scope) ->getBaseCurrency(); $currentCurrency = $baseCurrency->getRate($currency) ? $currency : $baseCurrency; } else { $currentCurrency = $this->getStore($scope) ->getCurrentCurrency(); } return $currentCurrency; } /** * Get currrency symbol * * @param null|string|bool|int|\Magento\Framework\App\ScopeInterface $scope * @param \Magento\Framework\Model\AbstractModel|string|null $currency * @return string */ public function getCurrencySymbol($scope = null, $currency = null) { return $this->getCurrency($scope, $currency)->getCurrencySymbol(); } /** * Get store model * * @param null|string|bool|int|ScopeInterface $scope * @return Store */ protected function getStore($scope = null) { try { if (!$scope instanceof Store) { $scope = $this->storeManager->getStore($scope); } } catch (\Exception $e) { $this->logger->critical($e); $scope = $this->storeManager->getStore(); } return $scope; } /** * @inheritdoc */ public function round($price) { return round($price, 2); } /** * Round price with precision * * @param float $price * @param int $precision * @return float */ public function roundPrice($price, $precision = self::DEFAULT_PRECISION) { return round($price, $precision); } }