मेरे पास उन उत्पादों की एक श्रेणी है जो (कानूनी रूप से) एक निश्चित मात्रा से अधिक ऑर्डर करने पर उनकी कर दर को बदलने की आवश्यकता होती है। जब आप कार्ट में एक नया उत्पाद जोड़ते हैं, तो मुझे यह काम करने के लिए विभिन्न कर मॉडलों को बढ़ाया जाता है, लेकिन मुझे तब समस्या होती है जब उपयोगकर्ता कार्ट में मात्रा को अपडेट करता है या अतिरिक्त उत्पादों को जोड़ता है जो थ्रेशोल्ड पर पहले से ही कार्ट में मात्राओं को टिप देते हैं रकम।
समस्या 1:
सबसे पहले, मैं 100% नहीं हूँ जो घटना (ओं) को निरीक्षण करने के लिए है। मैंने निम्नलिखित कोशिश की है;
checkout_cart_save_after
(इस पर आधारित -> https://stackoverflow.com/questions/14362702/magento-programatically-update-cart-via-event )
checkout_cart_update_items_after
(इस पर आधारित -> https://stackoverflow.com/questions/5104482/programmatically-add-product-to-cart-with-price-change )
sales_quote_save_before
(इस पर आधारित -> https://stackoverflow.com/questions/7638858/magento-recalculate-cart-total-in-observer )
समस्या 2:
मैं कार्ट से उद्धरण आइटम तक पहुंचने में सक्षम हूं, ऐसा करने के तरीकों का भार है कि ऐसा लगता है। मैं कार्ट में अलग-अलग वस्तुओं के माध्यम से पुनरावृति करने में सक्षम हूं, उन वस्तुओं के गुणों को अपडेट करें और फिर आइटम (कम से कम अस्थायी रूप से) को बचाएं। हालांकि, मैं तब बोली को बचाने और चेकआउट में करों को पुनर्गठित करने में सक्षम नहीं हूं।
इसका एक कारण यह है कि जब तक मैं कार्ट उद्धरण का उपयोग कर सकता हूं, मुझे यकीन नहीं है कि इसे लिखने के लिए कौन सी विधि का उपयोग किया जा सकता है।
मैंने क्या प्रयास किया है:
मैंने अपने द्वारा देखी गई घटना पर निर्भर करते हुए कार्ट की सामग्री तक पहुँचने की कोशिश की है, लेकिन मैंने निम्नलिखित सभी की कोशिश की है;
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();
ऐसा लगता है कि कम से कम मुझे उद्धरण तक पहुँचने की अनुमति है, उनके माध्यम से चलाएं और आइटम को अपडेट करें
6.
$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
यह मुझे प्रत्येक उद्धरण आइटम को अपडेट करने की अनुमति देता है, जब मैं इसके माध्यम से पुनरावृति करता हूं (मुझे विश्वास है कि मैं जादू बसने वालों का उपयोग कर सकता हूं क्योंकि मुझे कोई संगत विधियां नहीं मिल सकती हैं)। मैं उद्धरण आइटम के लिए टैक्स क्लास आईडी को अपडेट करने और फिर करों को पुनर्गणना करने में सक्षम होने की उम्मीद कर रहा था। यदि मैं निम्नलिखित का उपयोग करता हूं (जहां $ टैक्सक्लासआईड प्रत्येक उद्धरण आइटम द्वारा पहले से ही उपयोग किए गए के लिए अलग है);
$item->setTaxClassId( $taxClassId );
$item->getProduct()->setIsSuperMode(true);
$item->save;
और फिर परिणाम लॉग करें;
Mage::log($item->debug(), null,'taxobserver.log', true);
यह दिखाता है कि मैंने वास्तव में इस उद्धरण आइटम को अपडेट किया है और कर आईडी को बदल दिया है। हालाँकि, अगर मैं इसके माध्यम से अनुसरण करता हूं और संशोधित उद्धरण को बचाने की कोशिश करता हूं;
$quote->setTotalsCollectedFlag(false)->collectTotals();
$quote->save();
और फिर फिर से डीबग करें;
Mage::log($item->debug(), null,'taxobserver.log', true);
मेरे परिवर्तन सहेजे नहीं गए हैं, उद्धरण आइटम परिवर्तन को रीसेट कर दिया गया है और कार्ट योगों को पुनर्गणना नहीं की गई है। आश्चर्यचकित होना शुरू हो जाता है कि कूदने के लिए एक ऊंची इमारत ढूंढना इस के लिए समाधान हो सकता है।