Пользовательский Mage_Sales_Model_Quote_Address_Total_Abstract рассчитывается дважды: адрес выставления счета и адрес доставки

Я намеревался сделать собственный кредитный модуль, который может использовать кредиты нашего магазина для скидки. Изучив несколько примеров, я успешно добавил этап оформления заказа к оформлению на одной странице. Затем я расширяю Mage_Sales_Model_Quote_Address_Total_Abstract, чтобы иметь собственный сборщик для расчета итоговой суммы. В настоящее время я жестко закодировал некоторое значение скидки, чтобы увидеть, как это работает:

public function collect(Mage_Sales_Model_Quote_Address $address) {
        parent::collect ( $address );
        //if($address->getData('address_type')=='billing') return $this;

        try {

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

        } catch ( Exception $e ) {
            Mage::throwException ( $e->getMessage () );

        //do nothing.    
        }
        return $this;
    }

    public function fetch(Mage_Sales_Model_Quote_Address $address) {
        parent::fetch ( $address );
        //if($address->getData('address_type')=='billing') return $this;
        $title = Mage::helper ( 'sales' )->__ ( 'Credittest' );
        $address->addTotal ( array ('code' => $this->getCode (), 'title' => $title, 'value' => -10 ) );
        return $this;
    }

Раздел в config.xml выглядит так:

<sales>
    <quote>
        <totals>
            <credittest>
                 <class>sales/quote_address_total_credit</class>
                 <after>tax_subtotal,subtotal,freeshipping</after>
                 <before>grand_total</before>
            </credittest>
        </totals>
    </quote>
</sales> 

Однако результат выходит с вычетом -20. после некоторой отладки мой пользовательский сборщик вызывается дважды, один раз тип адреса «выставление счетов», а другой — «доставка». Поэтому я добавил закомментированный код выше, чтобы вычислять только при появлении адреса доставки. Но я не уверен, что это правильный путь.

Почему другой класс в Mage_Sales_Model_Quote_Address не будет вычисляться дважды? Согласно моей трассировке, они на самом деле вызываются дважды. И как правильно решить мою проблему?

Заранее спасибо.


person HooYao    schedule 02.07.2011    source источник


Ответы (1)


Взгляните @ Magento Добавить комиссию или скидку к сумме заказа

person Renon Stewart    schedule 26.03.2014