2011-12-26 14 views
5

Ho un problema strano. Ho sviluppato un modulo che aggiunge una linea ai totali secondo un certo valore nel database. Ma nel mio modello di modulo (che viene ereditato da Mage_Sales_Model_Quote_Address_Total_Abstract) quando chiamoMagento, getSubtotal e getGrandTotal restituiscono sempre zero

$address->getSubtotal() 

o

$address->getGrandTotal() 

o qualsiasi altro metodo totali, ottengo zero (0) restituito. Ma in phpmyadmin, vedo che quei valori non sono zero. Qualsiasi altra colonna eccetto queste colonne di totali restituisce il loro valore corretto (cioè, getAddressId() restituisce l'ID, getAddressType restituisce "spedizione" ecc.)

Quale può essere il problema, qualche idea? Grazie ---------- EDIT ----------- OK, dopo il commento di @Alan Storm, vedo che dovrei essere più chiaro. Sto provando a sviluppare un modulo di rata. Imposero le tasse di rata (cambiando secondo il conteggio dei mesi) nell'amministratore e aggiungerò questa tassa al totale del carrello alla cassa.

Questo è il mio metodo di raccolta,

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 ragazzi, ho capito! Il problema era con la mia config.xml avrei dovuto aggiungere

<after>grand_total</after> 

Dal momento che è assente, è stato raccogliendo totale di mio modulo mentre subtotale e grand_total non sono stati ancora calcolato. Per questo motivo venivano come zero.

Grazie!

+0

Non è chiaro che cosa si sta cercando di fare qui con l'oggetto Indirizzo citazione, il che rende difficile fornire una risposta. Questa classe non è per il recupero dei valori dal database. –

+0

Ho modificato la domanda in base al tuo commento. – UnfoX

+2

OK ragazzi, l'ho capito! Il problema era con la mia config.xml avrei dovuto aggiungere grand_total Dal momento che è assente, è stato prima raccogliendo totale di mio modulo mentre subtotale e grand_total non erano ancora calcolati. Per questo motivo venivano come zero. Grazie! – UnfoX

risposta

7

Aggiunta della risposta "Self Help Desk" degli OP. Se ti piace, assicurati di votare la domanda originale.

OK ragazzi, l'ho capito! Il problema era con la mia config.xml avrei dovuto aggiungere

<after>grand_total</after> 

Dal momento che è assente, è stato raccogliendo totale di mio modulo mentre subtotale e grand_total non sono stati ancora calcolato. Per questo motivo venivano come zero.

+0

Impressionante ... Salvato le mie ore .... – Dolly

1

Prova questo funziona ...

public function collect(Mage_Sales_Model_Quote_Address $address) 
    { 

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

} 
Problemi correlati