From f1d425427c7c42a602cd35094e589c38e5aff1cd Mon Sep 17 00:00:00 2001 From: Dmytro Yushkin Date: Wed, 12 Aug 2020 15:55:06 -0500 Subject: [PATCH] MC-36547: Unexpected behavior of "FedEx" shipping method in the case of multiple currencies --- app/code/Magento/Fedex/Model/Carrier.php | 43 +++++++++++-------- .../Fedex/Test/Unit/Model/CarrierTest.php | 1 + 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/app/code/Magento/Fedex/Model/Carrier.php b/app/code/Magento/Fedex/Model/Carrier.php index e19b632fc268c..9b3ea6af6a58d 100644 --- a/app/code/Magento/Fedex/Model/Carrier.php +++ b/app/code/Magento/Fedex/Model/Carrier.php @@ -161,6 +161,29 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C */ private $_rawTrackingRequest; + /** + * ISO 4217 to Fedex currency codes matching + * + * @var string[] + */ + private $codes = [ + 'DOP' => 'RDD', + 'XCD' => 'ECD', + 'ARS' => 'ARN', + 'SGD' => 'SID', + 'KRW' => 'WON', + 'JMD' => 'JAD', + 'CHF' => 'SFR', + 'JPY' => 'JYE', + 'KWD' => 'KUD', + 'GBP' => 'UKL', + 'AED' => 'DHS', + 'MXN' => 'NMP', + 'UYU' => 'UYP', + 'CLP' => 'CHP', + 'TWD' => 'NTD', + ]; + /** * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param \Magento\Quote\Model\Quote\Address\RateResult\ErrorFactory $rateErrorFactory @@ -678,6 +701,7 @@ protected function _getRateAmountOriginBased($rate) */ private function getBaseCurrencyRate(string $currencyCode): float { + $currencyCode = array_search($currencyCode, $this->codes) ?: $currencyCode; if (!isset($this->baseCurrencyRate[$currencyCode])) { $baseCurrencyCode = $this->_request->getBaseCurrency()->getCode(); $rate = $this->_currencyFactory->create() @@ -1033,26 +1057,9 @@ public function getCode($type, $code = '') */ public function getCurrencyCode() { - $codes = [ - 'DOP' => 'RDD', - 'XCD' => 'ECD', - 'ARS' => 'ARN', - 'SGD' => 'SID', - 'KRW' => 'WON', - 'JMD' => 'JAD', - 'CHF' => 'SFR', - 'JPY' => 'JYE', - 'KWD' => 'KUD', - 'GBP' => 'UKL', - 'AED' => 'DHS', - 'MXN' => 'NMP', - 'UYU' => 'UYP', - 'CLP' => 'CHP', - 'TWD' => 'NTD', - ]; $currencyCode = $this->_storeManager->getStore()->getBaseCurrencyCode(); - return $codes[$currencyCode] ?? $currencyCode; + return $this->codes[$currencyCode] ?? $currencyCode; } /** diff --git a/app/code/Magento/Fedex/Test/Unit/Model/CarrierTest.php b/app/code/Magento/Fedex/Test/Unit/Model/CarrierTest.php index 722dad6536246..10e5c64a930cf 100644 --- a/app/code/Magento/Fedex/Test/Unit/Model/CarrierTest.php +++ b/app/code/Magento/Fedex/Test/Unit/Model/CarrierTest.php @@ -358,6 +358,7 @@ public function collectRatesDataProvider() [12.12, 'USD', 'USD', 'RATED_LIST_SHIPMENT', 12.12, 0], [38.9, 'USD', 'USD', 'PAYOR_LIST_SHIPMENT', 38.9], [38.9, 'USD', 'USD', 'PAYOR_LIST_SHIPMENT', 38.9, 0], + [10.0, 'SID', 'USD', 'PAYOR_LIST_SHIPMENT', 10.0, 0], ]; }