Como obter o preço do produto em todas as moedas permitidas?

10

Eu tenho uma configuração com duas visualizações de loja.

A primeira visualização da loja tem base e a única moeda definida como USD. O segundo possui 2 moedas permitidas - USD e EUR. EUR é o padrão exibido, USD é definido como base.

Os preços de todos os produtos são definidos apenas em dólares americanos e a taxa de câmbio do EUR é de 0,75. Preço do produto é digamos $ 14.

E meu código diz:

// Store ID 2 - default currency EUR, base currency USD
// $product is instance of Magento\Catalog\Model\Product
$priceInfo = $product->getPriceInfo();
$price = $priceInfo->getPrice('regular_price')->getValue();

Esse código sempre busca o preço correto (10,50) em euros. Mas preciso dos dois preços - em dólares e em euros, mas não encontrei uma maneira de passar a moeda para nenhum getPricemétodo.

Eu tentei usar Magento\Directory\Helper\Datapara converter:

$helper->currencyConvert($price, 'EUR', 'USD');

Mas isso me dá US $ 13,99 quando o preço real em dólares é US $ 14 - então o cálculo está errado.

Você sabe como posso obter os preços do produto para as duas moedas da loja? Muito obrigado!

Jan Petr
fonte

Respostas:

1

Quando você sente que 'o cálculo está errado', sempre ajuda observar o código-fonte. Quando olho para \Magento\Directory\Model\Currency::convert()(este é o método interno que \Magento\Directory\Helper\Data::currencyConvert()usa), vejo algo interessante:

public function convert($price, $toCurrency = null)
{
    if ($toCurrency === null) {
        return $price;
    } elseif ($rate = $this->getRate($toCurrency)) {
        return $price * $rate;
    }

Isso significa que ele converte o preço na taxa definida em $toCurrency. No seu exemplo, converta EUR para USD. Eu acho que a taxa de USD é 1,00, então, quando você está convertendo 14 USD * 1,00, obtém 13,99 (acho que isso se deve à forma como os números flutuantes funcionam?).

Como resolver isso? Bem, você tem seu preço base em USD e sabe que o EUR tem uma taxa de 0,75; portanto, se você tiver um código que busque o preço base do seu produto, carregue a taxa do EUR e a multiplique com a qual você pode estar pronto . Por exemplo:

$basePrice = $product->getPrice();
$currency  = $currencyFactory->create()->load('EUR');
$eurPrice  = $currency->convert($basePrice, 'EUR');

Ainda não testei, então não tenho certeza se funciona, apenas seguindo o código. Mas talvez isso ajude você a encontrar sua solução.

Giel Berkers
fonte
1

Por favor, use o código abaixo

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productId = 46;
$product = $objectManager->create('Magento\Catalog\Model\Product')->load(productId );
$price = $product->getFinalPrice();
$currency = $objectManager->create('Magento\Directory\Model\Currency')->load('USD');
echo $currency->convert($price,'EUR');
Nilesh Gosai
fonte