Saya memiliki kategori produk yang (secara hukum) perlu mengubah tarif pajaknya saat Anda memesan lebih dari jumlah tertentu. Saya telah memperluas berbagai model pajak agar ini berfungsi ketika Anda menambahkan produk baru ke troli, tetapi saya mengalami masalah ketika pengguna memperbarui jumlah di troli atau menambahkan produk tambahan yang memberi tip jumlah yang sudah ada di troli melewati ambang jumlah.
Masalah 1:
Pertama-tama, saya tidak 100% acara yang harus diamati. Saya sudah mencoba yang berikut ini;
checkout_cart_save_after
(berdasarkan ini -> https://stackoverflow.com/questions/14362702/magento-programatically-update-cart-via-event )
checkout_cart_update_items_after
(berdasarkan ini -> https://stackoverflow.com/questions/5104482/programmatically-add-product-to-cart-with-price-change )
sales_quote_save_before
(berdasarkan ini -> https://stackoverflow.com/questions/7638858/magento-recalculate-cart-total-in-observer )
Masalah 2:
Saya dapat mengakses item kutipan dari troli, ada banyak cara untuk melakukannya. Saya juga dapat melakukan iterasi melalui item individual di troli, memperbarui properti item tersebut dan kemudian menyimpan item (setidaknya untuk sementara). Namun, saya tidak dapat menyimpan kutipan dan menghitung kembali pajak di kasir.
Sebagian alasannya adalah bahwa sementara saya dapat mengakses kutipan keranjang, saya tidak yakin metode mana yang digunakan untuk dapat menulis kepadanya.
Apa yang Sudah Saya Coba:
Apa yang saya coba dalam hal mengakses isi troli tergantung pada peristiwa yang saya amati tetapi saya sudah mencoba semua hal berikut;
1.
$item = $observer->getQuoteItem;
2.
$cart = Mage::getSingleton('checkout/cart');
$cartItems = $cart->getCart()->getItems();
3.
$cart = $observer->getData('cart');
$quote = $cart->getData('quote');
$cartItems = $quote->getAllVisibleItems();
4.
$cartHelper = Mage::helper('checkout/cart');
$cartItems = $cartHelper->getCart()->getItems();
5.
$quote = Mage::getModel('checkout/cart');
$cartItems = $quote->getItems();
Salah satu yang tampaknya setidaknya memungkinkan saya untuk mengakses kutipan, menjalankannya dan memperbarui item
6.
$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
Ini memungkinkan saya untuk memperbarui setiap item kutipan ketika saya mengulanginya (saya percaya menggunakan setter ajaib karena saya tidak dapat menemukan metode yang sesuai). Saya berharap dapat memperbarui ID Kelas Pajak untuk item penawaran dan kemudian menghitung ulang pajak. Jika saya menggunakan yang berikut (di mana $ taxClassId berbeda dengan yang sudah digunakan oleh setiap item penawaran);
$item->setTaxClassId( $taxClassId );
$item->getProduct()->setIsSuperMode(true);
$item->save;
Dan kemudian catat hasilnya;
Mage::log($item->debug(), null,'taxobserver.log', true);
Ini menunjukkan bahwa saya memang memperbarui item kutipan ini dan mengubah ID pajak. Namun, jika saya kemudian menindaklanjuti dan mencoba menyimpan kutipan yang dimodifikasi;
$quote->setTotalsCollectedFlag(false)->collectTotals();
$quote->save();
Dan kemudian debug lagi;
Mage::log($item->debug(), null,'taxobserver.log', true);
Perubahan saya belum disimpan, perubahan item kutipan telah diatur ulang dan total keranjang tidak dihitung ulang. Mulai bertanya-tanya apakah menemukan gedung tinggi untuk melompat mungkin menjadi solusi untuk yang satu ini.