Добавление пользовательского скидочного заказа Всего в Magento не меняет налог с продаж

Я создал индивидуальный заказ, который дает скидку в определенных ситуациях. Общая сумма всегда получается правильной, однако расчет налога с продаж не учитывает мою скидку при расчете (поэтому, если бы я предоставлял скидку в размере 10 долларов США, сумма налога с продаж была рассчитана на всю сумму до моей скидки).

Возьмем, к примеру, следующее:

Subtotal: $856.49 Multi Unit Discounts: -$22.50 Shipping: $10.96 Tax: $52.05 Grand Total: $897.00 

Моя скидка – скидки на Multi Unit. Ставка налога составляет 6%. Поскольку вы можете видеть, что общая сумма правильная, основанная на всех позициях, но сама сумма налога неверна (она основана на всех позициях, кроме моей скидки).

В моем файле config.xml у меня есть следующее, чтобы получить общий объем моего заказа в системе:

  <sales> <quote> <totals> <mud> <class>Wpe_Multiunitdiscount_Model_Multiunitdiscount</class> <before>tax</before> </mud> </totals> </quote> </sales> тем  <sales> <quote> <totals> <mud> <class>Wpe_Multiunitdiscount_Model_Multiunitdiscount</class> <before>tax</before> </mud> </totals> </quote> </sales> тем  <sales> <quote> <totals> <mud> <class>Wpe_Multiunitdiscount_Model_Multiunitdiscount</class> <before>tax</before> </mud> </totals> </quote> </sales> 

Ниже приведено содержание моего класса:

 class Wpe_Multiunitdiscount_Model_Multiunitdiscount extends Mage_Sales_Model_Quote_Address_Total_Abstract { public function collect(Mage_Sales_Model_Quote_Address $address) { if ($address->getData('address_type')=='billing') return $this; $items = $address->getAllItems(); $total_discount = 0; foreach($items as $item) { $product_discounts = Mage::helper("multiunitdiscount")->findDiscounts($item); if($product_discounts > 0) { $total_discount += $product_discounts; } } $address->setMudAmount($total_discount); $address->setGrandTotal($address->getGrandTotal() - $address->getMudAmount() ); $address->setBaseGrandTotal($address->getBaseGrandTotal() - $address->getMudAmount()); return $this; } public function fetch(Mage_Sales_Model_Quote_Address $address) { if ($address->getData('address_type')=='billing') return $this; if($address->getMudAmount() > 0) { $address->addTotal(array( 'code' => $this->getCode(), 'title' => Mage::helper('sales')->__('Multi Unit Discounts'), 'value' => -$address->getMudAmount(), )); } return $this; } 

}

Ради того, чтобы не размещать здесь огромный кусок кода, который я не уверен, я могу сказать, что помощник в приведенном выше коде просто возвращает сумму, которую скидка для этого конкретного пункта в цитате.

Может ли кто-нибудь помочь указать мне в правильном направлении для правильного расчета налога с продаж?

РЕДАКТИРОВАТЬ:

Чтобы сохранить это просто, я удалил большую часть своей логики для расчета скидки, и теперь я пытаюсь просто взять $ 10 с общей суммы заказа как скидку. Как было предложено, я не изменял значение Grand Total адреса и теперь устанавливаю только размер скидки и базовую скидку. Теперь налог с продаж не складывается и общая сумма не работает. Может быть, если есть хороший учебник, который мог бы мне указать на кого-то? Кажется, я не понимаю, как весь совокупный порядок взаимодействует друг с другом.

 public function collect(Mage_Sales_Model_Quote_Address $address) { if ($address->getData('address_type')=='billing') return $this; $address->setMudDiscount(10); $address->setDiscountAmount($address->getDiscountAmount() + $address->getMudDiscount()); $address->setBaseDiscountAmount($address->getBaseDiscountAmount() + $address->getMudDiscount()); return $this; } public function fetch(Mage_Sales_Model_Quote_Address $address) { if ($address->getData('address_type')=='billing') return $this; $address->addTotal(array( 'code' => $this->getCode(), 'title' => Mage::helper('sales')->__('Multi Unit Discounts'), 'value' => -$address->getMudDiscount(), )); return $this; } 

Solutions Collecting From Web of "Добавление пользовательского скидочного заказа Всего в Magento не меняет налог с продаж"