Magento: Пользовательские итоги подсчитываются дважды?

Хорошо, я создал собственный класс Total для добавления специальной скидки, и, похоже, все работает нормально, за исключением того, что по какой-то причине я не могу найти, моя сумма рассчитывается дважды! Это приводит к двойной сумме скидки и неверной общей сумме. Теперь это происходит на странице корзины и на страницах оформления заказа ... НО ... когда я завершаю заказ, общая сумма в порядке, рассчитывается только один раз, и общая сумма в порядке.

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

Чтобы пропустить ненужный код, я вставлю только важные

     <sales>
        <quote>
            <totals>
                <mydiscount>
                    <class>ucon_mydiscount/total_mydiscount</class>
                    <before>subtotal</before>
                </mydiscount>
            </totals>
        </quote>
    </sales>

и методы сборщика

    public function collect(Mage_Sales_Model_Quote_Address $address)
{
    parent::collect($address);

    $quote = $address->getQuote();
    $quoteId = $quote->getEntityId();

    $items = $quote->getAllItems();
    if (!count($items)) {
        return $this;
    }       


    $discount = 0;
    $productId = 2556;  

    foreach($items as $item)
    {       
        if($item->getProduct()->getId() == $productId)
        {
            $qty = $item->getQty();
            $totalPrice = round(($item->getRowTotal()+$item->getTaxAmount()),2);

            //discount 10%              
            $discount = round($totalPrice * 0.1,2);     

            $discount = 0 - $discount;
        }
    }

    if($discount == 0)
        return $this;

    $this->_setAmount($discount);
    $this->_setBaseAmount($discount);


    return $this;
}

и сборщик

    public function fetch(Mage_Sales_Model_Quote_Address $address)
{
    $amount = $address->getMydiscountAmount();
    if ($amount != 0) {
        $title = Mage::helper('ucon_mydiscount')->__('My discount');
        $address->addTotal(array(
            'code' => $this->getCode(),
            'title' => $title,
            'value' => $amount
        ));
    }
    return $this;
}

edit: Еще одна странная вещь - я использую setValue в своем методе сбора , а не addValue, поэтому даже если метод вызывается дважды, он не должен иметь двойное значение, он должен просто дважды установить его на правильное значение.

5
задан Relja 25 November 2011 в 11:05
поделиться