2011-12-26 25 views
5

Tôi gặp vấn đề lạ. Tôi đã phát triển một mô-đun cho biết thêm một dòng để tổng số theo một số giá trị trong cơ sở dữ liệu. Nhưng trong mô hình mô-đun của tôi (được thừa hưởng từ Mage_Sales_Model_Quote_Address_Total_Abstract) khi tôi gọiMagento, getSubtotal và getGrandTotal luôn trả về số không

$address->getSubtotal() 

hoặc

$address->getGrandTotal() 

hoặc bất kỳ phương pháp tổng số khác, tôi nhận được không (0) trả lại. Nhưng trong phpmyadmin, tôi thấy rằng những giá trị đó không bằng không. Bất kỳ cột nào khác ngoại trừ các cột tổng này trả về giá trị chính xác của chúng (ví dụ: getAddressId() trả về ID, getAddressType trả về "giao hàng", v.v.)

Có thể có vấn đề gì? Cảm ơn ---------- CHỈNH SỬA ----------- OK, Sau bình luận của @Alan Storm, tôi thấy rằng tôi nên rõ ràng hơn. Tôi đang cố gắng phát triển mô-đun trả góp. Tôi sẽ thiết lập lệ phí trả góp (thay đổi theo số tháng) trong quản trị viên và tôi sẽ thêm khoản phí này vào tổng số giỏ hàng khi thanh toán.

Đây là phương pháp thu thập của tôi,

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

kẻ OK, tôi đã figured it out! Vấn đề là với config.xml tôi tôi nên đã thêm

<after>grand_total</after> 

Vì nó là vắng mặt, nó lần đầu tiên được thu thập tổng phân hệ của tôi trong khi tổng số phụ và grand_total đã không tính toán được nêu ra. Bởi vì điều này, họ đã đến như số không.

Cảm ơn bạn!

+0

Nó không rõ ràng những gì bạn đang cố gắng làm ở đây với các đối tượng Địa chỉ trích dẫn, mà làm cho cung cấp một câu trả lời khó khăn. Lớp này không phải để tìm nạp các giá trị từ cơ sở dữ liệu. –

+0

Tôi đã chỉnh sửa câu hỏi accordig cho nhận xét của bạn. – UnfoX

+2

OK các bạn, tôi đã tìm ra! Vấn đề là với config.xml tôi tôi nên đã thêm grand_total Vì nó là vắng mặt, nó lần đầu tiên được thu thập tổng phân hệ của tôi trong khi tổng số phụ và grand_total đã không tính toán được nêu ra. Bởi vì điều này, họ đã đến như số không. Cảm ơn bạn! – UnfoX

Trả lời

7

Thêm câu trả lời "Tự trợ giúp" OP. Nếu bạn thích nó, hãy chắc chắn bỏ phiếu cho câu hỏi gốc.

OK, tôi đã tìm ra! Vấn đề là với config.xml của tôi, tôi nên đã thêm

<after>grand_total</after> 

Vì nó là vắng mặt, nó lần đầu tiên được thu thập tổng phân hệ của tôi trong khi tổng số phụ và grand_total đã không tính toán được nêu ra. Bởi vì điều này, họ đã đến như số không.

+0

Tuyệt vời ... Đã lưu giờ của tôi .... – Dolly

1

Hãy thử điều này nó hoạt động ...

public function collect(Mage_Sales_Model_Quote_Address $address) 
    { 

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

} 
Các vấn đề liên quan