2012-06-08 69 views
6

我試圖獲得給定郵政編碼的稅率(百分比,而不是貨幣),所以我可以在第三方報價中顯示它PDF打印輸出(與「報價」 Magento用作購物車預付款)。雖然我對Magento還比較陌生,但看起來getRateRequest()和getRate()是兩個主要的函數,它們根據所有變量(產品稅類,客戶稅類等)獲得稅率。getRate()和Magento稅率百分比

由於這是針對第三方擴展,所有我們的產品都需要納稅我想我只是使用getRate()與正確的Varien對象輸入,它會返回稅率。經過一週的試驗和錯誤,我無法弄清楚爲什麼我總是得到零率。我已經確認我調用了getRate()函數,並且它不會從第一個if()語句檢查Country和Customer/Product類ID時返回零。另外我已經確認了所有的變量都被傳遞並且可以在getRate()函數本身中訪問。

我用下面的輸入(基於getRateRequest()的輸出)創建了一個對象,我使用getRate()調用,並希望有人可以闡明我的數據輸入有什麼問題或爲什麼getRate ()函數總是返回零結果。 (我實際上低於$變量的設置,也只是定義了前面,我的測試案例的一個值都低於)

// UPDATED CODE (variable values come from 3rd party quote extension) 

    $country = 'US'; // use short country code 
    $region = '12'; // must be numeric! 
    $postcode = '95050'; 
    // our quote extension stores the customer id ('2') which we use to get the tax class 
    $customer = Mage::getModel('customer/customer')->load('2'); 
    $custTax = $customer->getTaxClassId(); 

    $TaxRequest = new Varien_Object(); 
    $TaxRequest->setCountryId($country); 
    $TaxRequest->setRegionId($region); 
    $TaxRequest->setPostcode($postcode); 
    $TaxRequest->setStore(Mage::app()->getStore()); 
    $TaxRequest->setCustomerClassId($custTax); 
    $TaxRequest->setProductClassId(2); // 2=taxable id (all our products are taxable) 

    $taxCalculationModel = Mage::getSingleton('tax/calculation'); 
    $rate = $taxCalculationModel->getRate($TaxRequest); 

我的備份計劃是隻是做一個直接的SQL查詢公式儘管這可能會弄得有點亂。由於我們的網站開發團隊並未完全遵循良好的編碼標準,因此一旦最初的發佈修補程序(全部4頁)發佈,最終的網站重寫將在我的將來進行。

感謝您的幫助,並花時間閱讀本文。

編輯 - Stack Overflow是真棒:)

回答

3

如果更改:

$TaxRequest->setRegionId(California); 

$TaxRequest->setRegionId($stateId); 

其中$ STATEID是數字區域ID。你的代碼應該可以工作。

+1

衛生署!這一年有什麼不同,重新工作在我們網站的這一部分,並且這次遇到了我自己的問題,並且有了更多的知識。 更新我的代碼以反映數字狀態ID,國家代碼,並在getStore()中傳遞,它工作得很好。謝謝! –

6

你也可以試試這個

$store = Mage::app()->getStore('default'); 
$request = Mage::getSingleton('tax/calculation')->getRateRequest(null, null, null, $store); 
$taxclassid = $product->getData('tax_class_id'); 
$percent = Mage::getSingleton('tax/calculation')->getRate($request->setProductClassId($taxclassid)); 
+0

感謝您的想法!然而在這種情況下,我不認爲它會一直給我們提供我想要的東西。我們有一些轉售的客戶賬戶,並且沒有收取所得稅,看起來這個代碼只適用於某個產品,並且不考慮客戶稅收等級。 –