Come ottenere il prezzo del prodotto in tutte le valute consentite?


10

Ho una configurazione con due punti vendita.

La prima vista dello store ha base e l'unica valuta impostata su USD. Il secondo ha 2 valute consentite - USD e EUR. L'EUR è quello predefinito visualizzato, l'USD è impostato come base.

Tutti i prezzi dei prodotti sono fissati solo in USD e il tasso di cambio per EUR è fissato a 0,75. Il prezzo del prodotto è diciamo $ 14.

E il mio codice dice:

// 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();

Questo codice ottiene sempre il prezzo corretto (10,50) in EUR. Ma ho bisogno di entrambi i prezzi - in USD e in EUR, ma non ho trovato il modo di passare la valuta a nessun getPricemetodo.

Ho provato a usare Magento\Directory\Helper\Dataper convertire:

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

Ma mi dà $ 13,99 quando il prezzo reale in USD è $ 14 - quindi il calcolo è sbagliato.

Sai come posso ottenere i prezzi dei prodotti per entrambe le valute del negozio? Molte grazie!

Risposte:


1

Quando ti senti come "il calcolo è sbagliato", aiuta sempre a guardare il codice sorgente. Quando guardo \Magento\Directory\Model\Currency::convert()(questo è il metodo interiore che \Magento\Directory\Helper\Data::currencyConvert()usa), vedo qualcosa di interessante:

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

Ciò significa che converte il prezzo nella tariffa impostata in $toCurrency. Nel tuo esempio, converti EUR in USD. Immagino che il tasso di USD sia 1,00, quindi quando converti 14 USD * 1,00, ottieni 13,99 (suppongo che ciò sia dovuto al modo in cui funzionano i numeri fluttuanti?).

Come risolverlo? Bene, hai il tuo prezzo di base in USD e sai che l'EUR ha un tasso di 0,75, quindi se hai un codice che recupera il prezzo di base del tuo prodotto, carica il tasso di EUR e lo moltiplica con quello che potresti essere impostato per andare . Per esempio:

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

Non l'ho ancora testato, quindi non sono sicuro che funzioni, solo seguendo il codice. Ma forse ti aiuta a trovare la tua soluzione.


1

Si prega di utilizzare il codice sottostante

$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');
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.