Magento, getSubtotal и getGrandTotal всегда возвращают ноль
У меня странная проблема. Я разработал модуль, который добавляет строку к итоговым данным в соответствии с некоторым значением в базе данных. Но в моей модели модуля (которая унаследована от Mage_Sales_Model_Quote_Address_Total_Abstract), когда я вызываю
$address->getSubtotal()
Или
$address->getGrandTotal()
Или любой другой метод подведения итогов, я получаю ноль (0). Но в phpmyadmin я вижу, что эти значения не равны нулю. Любой другой столбец, кроме этих столбцов итогов, возвращает их правильное значение (т. Е. getAddressId() возвращает идентификатор, getAddressType возвращает "доставка" и т.д.)
В чем может быть проблема, есть идеи? Спасибо ---------- РЕДАКТИРОВАТЬ ----------- Хорошо, после комментария @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;
}
------ ПРАВКА2 ------
Ладно, ребята, я все понял! Проблема был с моим config.xml Я должен был добавить
<after>grand_total</after>
Поскольку он отсутствует, он сначала собирал общую сумму моего модуля, в то время как промежуточный итог и общий итог еще не были рассчитаны. Из-за этого они приходили как нули.
Тем не менее, спасибо вам!
2 answers
Добавление ответа OPs "Служба самопомощи". Если вам это нравится, обязательно проголосуйте за первоначальный вопрос.
Ладно, ребята, я все понял! Проблема была в моем config.xml Я должен был добавить
<after>grand_total</after>
Поскольку он отсутствует, он сначала собирал общую сумму моего модуля, в то время как промежуточный итог и общий итог еще не были рассчитаны. Из-за этого они приходили как нули.
Попробуйте это, это работает...
public function collect(Mage_Sales_Model_Quote_Address $address)
{
$items = $quote->getAllItems();
$subtotal = 0;
foreach ($items as $item){
$subtotal += $item->getRowTotalInclTax();
Mage::log($subtotal);
}
}