ฉันมีหมวดหมู่ของผลิตภัณฑ์ที่ (ถูกกฎหมาย) ต้องมีการเปลี่ยนแปลงอัตราภาษีของพวกเขาเมื่อคุณสั่งซื้อมากกว่าจำนวนที่แน่นอน ฉันได้ขยายแบบจำลองภาษีต่างๆเพื่อให้สามารถใช้งานได้เมื่อคุณเพิ่มผลิตภัณฑ์ใหม่ลงในรถเข็น แต่ฉันมีปัญหาเมื่อผู้ใช้อัปเดตปริมาณในรถเข็นหรือเพิ่มผลิตภัณฑ์เพิ่มเติมซึ่งทิปปริมาณที่มีอยู่ในรถเข็นเกินเกณฑ์แล้ว จำนวน
ปัญหาที่ 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();
สิ่งนี้ทำให้ฉันสามารถอัปเดตรายการอ้างอิงแต่ละรายการได้เมื่อฉันวนซ้ำ (ฉันเชื่อว่าใช้เวทเซเตอร์เพราะฉันไม่สามารถหาวิธีการที่สอดคล้องกันได้) ฉันหวังว่าจะสามารถอัปเดตรหัสระดับภาษีสำหรับรายการใบเสนอราคาจากนั้นคำนวณภาษีใหม่ ถ้าฉันใช้สิ่งต่อไปนี้ (โดยที่ $ taxClassId แตกต่างจากที่ใช้โดยแต่ละรายการที่อ้างถึง);
$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);
การเปลี่ยนแปลงของฉันยังไม่ได้รับการบันทึกการเปลี่ยนแปลงรายการอ้างถูกรีเซ็ตและยอดรวมของรถเข็นจะไม่คำนวณใหม่ เริ่มสงสัยว่าการหาตึกสูงเพื่อกระโดดออกอาจเป็นทางออกสำหรับตึกนี้หรือไม่