특정 수량을 초과하여 주문할 때 (법적으로) 세금율을 변경해야하는 제품 범주가 있습니다. 장바구니에 새 제품을 추가 할 때이 작업을 수행하기 위해 다양한 세금 모델을 확장했지만 사용자가 장바구니의 수량을 업데이트하거나 이미 장바구니에있는 수량을 임계 값을 초과하는 추가 제품을 추가 할 때 문제가 있습니다 양.
문제 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();
이렇게하면 반복 할 때 각 견적 항목을 업데이트 할 수 있습니다 (해당하는 방법을 찾을 수 없으므로 마술 설정기를 사용한다고 생각합니다). 견적 항목의 세금 클래스 ID를 업데이트 한 다음 세금을 다시 계산할 수 있기를 바랐습니다. 다음을 사용하면 ($ taxClassId가 각 견적 항목에서 이미 사용한 것과 다릅니다);
$item->setTaxClassId( $taxClassId );
$item->getProduct()->setIsSuperMode(true);
$item->save;
그런 다음 결과를 기록하십시오.
Mage::log($item->debug(), null,'taxobserver.log', true);
실제로이 견적 항목을 업데이트하고 세금 ID를 변경했음을 나타냅니다. 그러나 그런 다음 수정하여 견적을 저장하려고합니다.
$quote->setTotalsCollectedFlag(false)->collectTotals();
$quote->save();
그런 다음 다시 디버그하십시오.
Mage::log($item->debug(), null,'taxobserver.log', true);
변경 사항이 저장되지 않고 견적 항목 변경이 재설정되었으며 장바구니 총계가 다시 계산되지 않습니다. 고층 빌딩을 찾는 것이이 솔루션의 해결책인지 궁금해지기 시작했습니다.