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

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

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

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

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

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

     <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;
}

}

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

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

EDIT:

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

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;
}
16
задан Josh Pennington 23 September 2011 в 18:34
поделиться