特定の郵便番号の税率 (通貨ではなくパーセンテージ) を取得しようとしているので、サードパーティの見積もり 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 ページすべて) が入ったら、サイトの最終的な書き直しが私の将来になります。
助けてくれてありがとう、そしてこれを読むのに時間を割いてくれてありがとう。
編集 - スタックオーバーフローは素晴らしいです:)