2011-12-26 15 views
5

Mam dziwny problem. Opracowałem moduł, który dodaje linię do sumy zgodnie z pewną wartością w bazie danych. Ale w moim modelu modułu (który jest dziedziczony z Mage_Sales_Model_Quote_Address_Total_Abstract) gdy zgłoszęMagento, getSubtotal i getGrandTotal zawsze zwracają zero

$address->getSubtotal() 

lub

$address->getGrandTotal() 

lub jakąkolwiek inną metodę sum, mam zero (0) powrócił. Ale w phpmyadmin widzę, że te wartości nie są zerowe. Każda inna kolumna z wyjątkiem tych kolumn sumujących zwraca ich poprawną wartość (tj. GetAddressId() zwraca identyfikator, getAddressType zwraca "wysyłka" itp.)

Co może być problemem, jakikolwiek pomysł? Dzięki ---------- EDYCJA ----------- OK, po komentarzu @Alan Storm, widzę, że powinienem być bardziej przejrzysty. Próbuję opracować moduł raty. Będę ustalał opłaty rat (zmieniające się według liczby miesięcy) w administracji, a ja dodam tę opłatę do koszyka ogółem przy kasie.

To jest moja metoda zbierać,

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 ------

OK chłopaki, mam zorientowaliśmy się! Problem był z moim config.xml powinny Dodałem

<after>grand_total</after> 

Ponieważ jest nieobecny, to był pierwszy zbierając łącznie mojego modułu podczas subtotal i grand_total nie zostały jeszcze obliczone. Z tego powodu nadchodziły jako zera.

Dziękujemy!

+0

To nie jest jasne, co starasz się zrobić tutaj z obiektem Adres cytując, co sprawia udzielenia odpowiedzi trudne. Ta klasa nie służy do pobierania wartości z bazy danych. –

+0

Zmieniłem pytanie zgodnie z twoim komentarzem. – UnfoX

+2

OK, chłopaki, rozgryzłem to! Problem był z moim config.xml powinny Dodałem grand_total Ponieważ jest nieobecny, to był pierwszy zbierając łącznie mojego modułu podczas subtotal i grand_total nie zostały jeszcze obliczone. Z tego powodu nadchodziły jako zera. Dziękujemy! – UnfoX

Odpowiedz

7

Dodanie odpowiedzi OP "Self Help Desk". Jeśli ci się podoba, zagłosuj na oryginalne pytanie.

OK, chłopaki, wymyśliłem to! Problem był z moim config.xml powinien Dodałem

<after>grand_total</after> 

Ponieważ jest nieobecny, to był pierwszy zbierając łącznie mojego modułu podczas subtotal i grand_total nie zostały jeszcze obliczone. Z tego powodu nadchodziły jako zera.

+0

Niesamowite ... Uratowałem moje godziny .... – Dolly

1

Spróbuj to działa ...

public function collect(Mage_Sales_Model_Quote_Address $address) 
    { 

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

} 
Powiązane problemy