6

特定の郵便番号の税率 (通貨ではなくパーセンテージ) を取得しようとしているので、サードパーティの見積もり PDF プリントアウトに表示できます (Magento がショッピング カートの事前チェックアウトとして使用する「見積もり」とは関係ありません)。 . 私はまだ Magento に比較的慣れていませんが、getRateRequest() と getRate() は、すべての変数 (製品税クラス、顧客税クラスなど) に基づいて税率を取得する 2 つの主要な関数のようです。

これはサードパーティの拡張用であり、すべての製品が課税対象であるため、正しい Varien オブジェクト入力で getRate() を使用するだけで、税率が返されると考えました。試行錯誤の 1 週間後、なぜ私は常にゼロのレートを得ているのか理解できません。getRate() 関数を呼び出していることと、Country および Customer/Product クラス ID をチェックする最初の if() ステートメントからゼロを返さないことを確認しました。さらに、すべての変数が渡され、getRate() 関数自体でアクセスできることを確認しました。

getRate() で呼び出す以下の入力 (getRateRequest() の出力に基づく) を持つオブジェクトを作成しました。データ入力の何が問題なのか、または getRate() 関数がなぜ常にゼロの結果を返します。(私は実際に以下の $variables で設定しています。それらは以前に定義されており、テストケースの値の 1 つが以下にあります)

    // 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 ルックアップ式を実行することですが、おそらく少し面倒になります。私たちの Web 開発チームは適切なコーディング基準に正確に従っていなかったので、最初のローンチ修正 (4 ページすべて) が入ったら、サイトの最終的な書き直しが私の将来になります。

助けてくれてありがとう、そしてこれを読むのに時間を割いてくれてありがとう。

編集 - スタックオーバーフローは素晴らしいです:)

4

2 に答える 2

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));
于 2013-04-18T12:54:00.503 に答える
3

変更する場合:

$TaxRequest->setRegionId(California);

 $TaxRequest->setRegionId($stateId); 

ここで、$stateId は数値の地域 ID です。その後、コードが機能するはずです。

于 2012-11-08T22:32:43.240 に答える