Mam kategorię produktów, które (zgodnie z prawem) wymagają zmiany stawki podatkowej, gdy zamawiasz więcej niż określoną ilość. Rozszerzyłem różne modele podatkowe, aby to działało, gdy dodajesz nowy produkt do koszyka, ale mam problemy, gdy użytkownik aktualizuje ilości w koszyku lub dodaje dodatkowe produkty, które przechylają ilości już w koszyku powyżej progu ilość.
Problem 1:
Przede wszystkim nie jestem w 100% świadomy (-ych) wydarzeń. Próbowałem następujących;
checkout_cart_save_after
(w oparciu o to -> https://stackoverflow.com/questions/14362702/magento-programatically-update-cart-via-event )
checkout_cart_update_items_after
(w oparciu o to -> https://stackoverflow.com/questions/5104482/programmatically-add-product-to-cart-with-price-change )
sales_quote_save_before
(w oparciu o to -> https://stackoverflow.com/questions/7638858/magento-recalculate-cart-total-in-observer )
Problem 2:
Jestem w stanie uzyskać dostęp do artykułów z koszyka, istnieje wiele sposobów, aby to zrobić. Mogę również iterować poszczególne elementy w koszyku, aktualizować właściwości tych przedmiotów, a następnie zapisywać przedmioty (przynajmniej tymczasowo). Jednak nie jestem w stanie zapisać wyceny i przeliczyć podatków w kasie.
Częściowo dlatego, że chociaż mam dostęp do wyceny koszyka, nie jestem pewien, której metody użyć, aby móc do niej napisać.
Co próbowałem:
To, czego próbowałem w zakresie dostępu do zawartości koszyka, zależało od tego, co zaobserwowałem, ale próbowałem wszystkich następujących rzeczy;
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();
Wydaje się, że przynajmniej pozwala mi uzyskać dostęp do wyceny, przejrzeć je i zaktualizować elementy
6.
$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
To pozwala mi aktualizować każdy element cytatu, gdy wykonuję iterację (wydaje mi się, że używam seterów magii, ponieważ nie mogę znaleźć odpowiednich metod). Miałem nadzieję, że będę w stanie zaktualizować identyfikator klasy podatkowej dla wyceny, a następnie ponownie obliczyć podatki. Jeśli użyję następujących (gdzie $ taxClassId różni się od tego, który jest już używany przez każdą pozycję wyceny);
$item->setTaxClassId( $taxClassId );
$item->getProduct()->setIsSuperMode(true);
$item->save;
A następnie zaloguj wyniki;
Mage::log($item->debug(), null,'taxobserver.log', true);
To pokazuje, że rzeczywiście zaktualizowałem ten cytat i zmieniłem identyfikator podatkowy. Jeśli jednak przejdę dalej i spróbuję zapisać zmodyfikowany cytat;
$quote->setTotalsCollectedFlag(false)->collectTotals();
$quote->save();
A następnie ponownie debuguj;
Mage::log($item->debug(), null,'taxobserver.log', true);
Moje zmiany nie zostały zapisane, zmiana pozycji oferty została zresetowana, a sumy koszyka nie są ponownie obliczane. Zaczynam się zastanawiać, czy znalezienie wysokiego budynku do zeskoczenia może być rozwiązaniem tego.