Добавление пользовательской суммы заказа на скидку в Magento не меняет налог с продаж - PullRequest
16 голосов
/ 22 сентября 2011

Я создал итоговый заказ, который дает скидку в определенных ситуациях.Общая сумма всегда получается правильной, однако при расчете налога с продаж моя скидка не учитывается при расчете (поэтому, если я предоставлял скидку в размере 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;
}

}

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

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

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

Для простоты я удалил большую часть своихлогика расчета скидки, и теперь я пытаюсь просто взять 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;
}

1 Ответ

3 голосов
/ 01 февраля 2012

Перейти к System > Configuration. Выберите «Tax» в левой навигационной панели, затем откройте группу "Calculation Settings", если ее еще нет.

Попробуйте изменить параметр "Apply Customer Tax" на "After Discount"

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