Magento, getSubtotal и getGrandTotal всегда возвращают ноль - PullRequest
5 голосов
/ 26 декабря 2011

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

$address->getSubtotal()

или

$address->getGrandTotal()

или любой другой метод итогов, я получаю ноль (0).Но в phpmyadmin я вижу, что эти значения не равны нулю.Любой другой столбец, кроме этих итоговых столбцов, возвращает свое правильное значение (т. Е. GetAddressId () возвращает идентификатор, getAddressType возвращает «доставку» и т. Д.)

В чем может быть проблема, есть идеи?Спасибо ---------- РЕДАКТИРОВАТЬ ----------- OK, после комментария @Alan Storm, я вижу, что я должен быть более ясным.Я пытаюсь разработать модуль рассрочки.Я установлю комиссию в рассрочку (меняется в зависимости от количества месяцев) у администратора и добавлю эту комиссию к общей сумме корзины при оформлении заказа.

Это мой метод сбора,

public function collect(Mage_Sales_Model_Quote_Address $address)
{

$address->setInstalmentCount(2); //instalment count is hardcoded as 2 for debugging

$paymentMethod = Mage::app()->getFrontController()->getRequest()->getParam('payment');
$paymentMethod = Mage::app()->getStore()->isAdmin() && isset($paymentMethod['method']) ? $paymentMethod['method'] : null;
if ($paymentMethod != 'oos' && (!count($address->getQuote()->getPaymentsCollection()) || !$address->getQuote()->getPayment()->hasMethodInstance())){            
    return $this;
}

$paymentMethod = $address->getQuote()->getPayment()->getMethodInstance();

if ($paymentMethod->getCode() != 'oos') {            
    return $this;
}

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

$baseTotal = $address->getBaseGrandTotal();   // THIS ALWAYS RETURNS ZERO

// adress is the reference for grand total
$quote = $address->getQuote();
$store = $quote->getStore();

$fee_perc = $oosconfig['inst' . round($address->getInstalmentCount())]; // get the setting from admin
$ins_fee = $store->convertPrice($baseTotal*$fee_perc/100.0, false); // calculate the fee    

$baseTotal += $ins_fee; // add to totals

$address->setInstalmentFee($ins_fee);

// update totals
$address->setBaseGrandTotal($baseTotal);
$address->setGrandTotal($store->convertPrice($baseTotal, false));    

return $this;   

}

------ EDIT2 ------

Хорошо, ребята, я понял это!Проблема была в моем config.xml, я должен был добавить

<after>grand_total</after>

Поскольку он отсутствует, он сначала собирал общее количество моего модуля, в то время как промежуточные итоги и grand_total еще не были вычислены.Из-за этого они шли как нули.

Спасибо, хотя!

Ответы [ 2 ]

7 голосов
/ 27 декабря 2011

Добавление ОП "Самообслуживание" ответ. Если вам это нравится, не забудьте проголосовать до первоначального вопроса.

ОК, ребята, я понял это! Проблема была с моим config.xml, я должен был добавить

<after>grand_total</after>

Так как он отсутствует, он сначала собирал сумму моего модуля, в то время как промежуточные итоги и grand_total еще не были рассчитаны. Из-за этого они шли как нули.

2 голосов
/ 21 сентября 2015

Попробуйте это работает ...

 public function collect(Mage_Sales_Model_Quote_Address $address)
    {

    $items = $quote->getAllItems();
    $subtotal = 0;
    foreach ($items as $item){
        $subtotal += $item->getRowTotalInclTax();
    Mage::log($subtotal);
    }

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