Belirli bir miktardan daha fazla sipariş verirken (yasal olarak) vergi oranlarını değiştirmesi gereken ürünler kategorisine sahibim. Alışveriş sepetine yeni bir ürün eklediğinizde bu çalışmayı sağlamak için çeşitli vergi modellerini genişlettim, ancak kullanıcı alışveriş sepetindeki miktarları güncellediğinde veya alışveriş sepetindeki miktarları eşiğin üzerinde belirten ek ürünler eklediğinde sorun yaşıyorum Miktar.
Sorun 1:
Her şeyden önce, hangi olayları gözlemleyeceğimi% 100 değilim. Aşağıdakileri denedim;
checkout_cart_save_after
(buna dayanarak -> https://stackoverflow.com/questions/14362702/magento-programatic-update-cart-via-event )
checkout_cart_update_items_after
(buna dayanarak -> https://stackoverflow.com/questions/5104482/programmatically-add-product-to-cart-with-price-change )
sales_quote_save_before
(buna dayanarak -> https://stackoverflow.com/questions/7638858/magento-recalculate-cart-total-in-observer )
Sorun 2:
Fiyat teklifine ürün sepetinden erişebiliyorum, göründüğü gibi yapmanın bir sürü yolu var. Ayrıca alışveriş sepetindeki bireysel öğeleri yineleyebilir, bu öğelerin özelliklerini güncelleyebilir ve sonra öğeleri kaydedebilirim (en azından geçici olarak). Ancak, o zaman teklifi kaydetmek ve kasada vergileri yeniden hesaplamak mümkün değildir.
Sebeplerin bir kısmı, alışveriş sepetinin fiyatına erişebilirken, hangi yöntemi kullanabileceğime emin olamıyorum.
Ne Denedim?
Alışveriş sepetinin içeriğine erişmek konusunda denediklerim, gözlemlediğim olaya bağlı, ancak aşağıdakilerin hepsini denedim;
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();
En azından teklife erişmeme, içinden geçmeme ve kalemleri güncellememe izin veren gibi görünüyor.
6.
$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
Bu, yinelendiğimde her bir teklif öğesini güncellememe izin veriyor (karşılık gelen herhangi bir yöntem bulamadığım için sihirli ayarlayıcıları kullandığımı düşünüyorum). Teklif kalemi için Vergi Sınıfı Kimliğini güncelleyebileceğimi ve vergileri yeniden hesaplayabileceğimi umuyordum. Aşağıdakileri kullanırsam (burada $ taxClassId, her bir teklif öğesi tarafından zaten kullanılandan farklı);
$item->setTaxClassId( $taxClassId );
$item->getProduct()->setIsSuperMode(true);
$item->save;
Ve sonra sonuçları günlüğe kaydedin;
Mage::log($item->debug(), null,'taxobserver.log', true);
Bu teklif öğesini gerçekten güncellediğimi ve vergi kimliğimi değiştirdiğimi gösteriyor. Ancak, o zaman izler ve değiştirilmiş teklifi kaydetmeye çalışırsam;
$quote->setTotalsCollectedFlag(false)->collectTotals();
$quote->save();
Ve sonra tekrar hata ayıklama;
Mage::log($item->debug(), null,'taxobserver.log', true);
Değişikliklerim kaydedilmedi, teklif kalemi değişikliği sıfırlandı ve alışveriş sepeti toplamları yeniden hesaplanmadı. Atlamak için yüksek bir bina bulmak olup olmadığını merak etmeye başlamak bunun için bir çözüm olabilir.