Bagaimana cara mendapatkan harga produk dalam semua mata uang yang diperbolehkan?

10

Saya memiliki pengaturan dengan dua tampilan toko.

Tampilan toko pertama memiliki basis dan satu-satunya mata uang yang ditetapkan ke USD. Yang kedua memiliki 2 mata uang yang diperbolehkan - USD dan EUR. EUR adalah default yang ditampilkan, USD ditetapkan sebagai basis.

Harga semua produk ditetapkan hanya dalam USD dan nilai tukar untuk EUR diatur ke 0,75. Harga produk adalah katakanlah $ 14.

Dan kode saya berjalan:

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

Kode ini selalu mengambil harga yang benar (10,50) dalam EUR. Tetapi saya membutuhkan kedua harga - dalam USD dan EUR, tetapi saya tidak menemukan cara untuk meneruskan mata uang ke getPricemetode apa pun .

Saya mencoba menggunakan Magento\Directory\Helper\Datauntuk mengonversi:

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

Tapi itu memberi saya $ 13,99 ketika harga riil dalam USD adalah $ 14 - jadi perhitungannya salah.

Apakah Anda tahu bagaimana saya bisa mendapatkan harga produk untuk kedua mata uang toko? Terima kasih banyak!

Jan Petr
sumber

Jawaban:

1

Ketika Anda merasa seperti 'perhitungan salah', selalu membantu untuk melihat kode sumber. Ketika saya melihat \Magento\Directory\Model\Currency::convert()(ini adalah metode batin yang \Magento\Directory\Helper\Data::currencyConvert()digunakan), saya melihat sesuatu yang menarik:

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

Ini berarti bahwa itu mengkonversi harga ke kurs yang diatur dalam $toCurrency. Dalam contoh Anda, konversi EUR ke USD. Saya kira kurs USD adalah 1,00, jadi ketika Anda mengonversi 14 USD * 1,00, Anda mendapatkan 13,99 (saya kira ini karena cara kerja angka mengambang?).

Bagaimana cara mengatasinya? Nah, Anda memiliki harga dasar dalam USD, dan Anda tahu bahwa EUR memiliki tarif 0,75, jadi jika Anda memiliki kode yang mengambil harga dasar produk Anda, muatkan tarif EUR dan gandakan dengan yang Anda mungkin akan tuju . Sebagai contoh:

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

Belum mengujinya jadi saya tidak yakin apakah itu berhasil, hanya mengikuti kode. Tapi mungkin itu membantu Anda menemukan solusi Anda.

Giel Berkers
sumber
1

Silakan gunakan kode di bawah ini

$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
sumber