2011-09-22 6 views
16

特定の状況で割引を適用するカスタム注文合計を作成しました。総額は常に正しく計算されますが、売上税計算では計算時に割引を考慮していません(したがって、10ドルの割引を行った場合は、割引前の全額で売上税が計算されます)。Magentoのカスタム割引注文合計を追加しても売上税が変更されない

例えば次のように乗り:

Subtotal:    $856.49 
Multi Unit Discounts: -$22.50 
Shipping:    $10.96 
Tax:     $52.05 
Grand Total:   $897.00 

マイカスタムの割引は、マルチユニット割引です。税率は6%です。ご覧のとおり、総額はすべての広告申込情報に基づいて正確ですが、税額自体が正しくありません(これは、割引を除くすべての広告申込情報に基づいています)。私のconfig.xmlファイルで

私はシステムに私の注文の合計作業を取得するには、以下のいます

 <sales> 
     <quote> 
      <totals> 
       <mud> 
        <class>Wpe_Multiunitdiscount_Model_Multiunitdiscount</class> 
        <before>tax</before> 
       </mud> 
      </totals> 
     </quote> 
    </sales>  

次は私のために、全クラスの内容は次のとおりです。

class Wpe_Multiunitdiscount_Model_Multiunitdiscount extends Mage_Sales_Model_Quote_Address_Total_Abstract { 

public function collect(Mage_Sales_Model_Quote_Address $address) { 

    if ($address->getData('address_type')=='billing') return $this; 

    $items = $address->getAllItems(); 

    $total_discount = 0; 

    foreach($items as $item) { 
     $product_discounts = Mage::helper("multiunitdiscount")->findDiscounts($item); 
     if($product_discounts > 0) { 
      $total_discount += $product_discounts; 
     } 
    } 

    $address->setMudAmount($total_discount); 

    $address->setGrandTotal($address->getGrandTotal() - $address->getMudAmount()); 
$address->setBaseGrandTotal($address->getBaseGrandTotal() - $address->getMudAmount()); 
    return $this; 
} 

public function fetch(Mage_Sales_Model_Quote_Address $address) { 

    if ($address->getData('address_type')=='billing') return $this; 

    if($address->getMudAmount() > 0) { 

     $address->addTotal(array(
      'code' => $this->getCode(), 
      'title' => Mage::helper('sales')->__('Multi Unit Discounts'), 
      'value' => -$address->getMudAmount(), 
     )); 
    } 
    return $this; 
} 

}

ここにコードが大量に掲載されないようにするため、私は上記のコードのヘルパーが単にディスコの金額を返すことを伝えることができますuntはその見積もり内の特定の項目です。

売上税計算が正しく行われたことを正しい方向に向けるのに役立つ人はいますか?

EDIT:

このシンプルに保つために、私は割引を計算し、現在は簡単な割引として注文合計$ 10割引を取るしようとしています後ろに私のロジックの多くを削除しました。提案したように私は住所の総計を変更せず、今は割引額とベース割引額のみを設定しています。今、売上税は加算されず、総計はオフです。たぶん誰かが私に助けになると指摘できる良いチュートリアルがありますか?私は注文総合計が互いにどのように相互作用しているのか把握していないようです。

public function collect(Mage_Sales_Model_Quote_Address $address) { 

    if ($address->getData('address_type')=='billing') return $this; 

    $address->setMudDiscount(10); 
    $address->setDiscountAmount($address->getDiscountAmount() + $address->getMudDiscount()); 
    $address->setBaseDiscountAmount($address->getBaseDiscountAmount() + $address->getMudDiscount()); 

    return $this; 
} 

public function fetch(Mage_Sales_Model_Quote_Address $address) { 

    if ($address->getData('address_type')=='billing') return $this; 

    $address->addTotal(array(
     'code' => $this->getCode(), 
     'title' => Mage::helper('sales')->__('Multi Unit Discounts'), 
     'value' => -$address->getMudDiscount(), 
    )); 
    return $this; 
} 
+0

Apply Customer Tax」パラメータを変更してみてくださいうーん、なぜあなたはあなたの割引クラスで直接$アドレスgrandtotalを修正?あなたは '$ address-> setDiscountAmount($ address-> getDiscountAmount()+ $ total_discount)'を使うべきです(あるいは '$ item-> setDiscountAmount()'を使ってアイテムごとの割引を設定してください)、あなたの割引は 'Mage_Sales_Model_Quote_Address_Total_Tax: :税計算のためのcollect() '。 – Zyava

+0

あなたが知っている限り、自分で総額を変更することはできません。自分で割引価格を設定する必要があります(既に行っているように)、Magentoはこれを考慮して合計を計算します。 config.xmlを変更して、小計も実行してみてください。 Magentoが合計の計算を処理する方法を本当に理解する前に、私はまた時間をかけました。 – Kenny

+0

私は皆さんのお話をお試しいただきましたが、私は同じ問題を抱えています(私は総額を自分で変更する予定ではないので、今や総額を追加しています)。他のモジュール全体から総計を変更する考えがありました。割引モジュールではsubtotalWithDiscountとsubtotalWithoutDiscountを設定できるので、これも試してみます。 –

答えて

3

System > Configurationにアクセスしてください。左のナビゲーションから "Tax"を選択し、"Calculation Settings"グループがまだ開いていない場合は開きます。

は「After Discount

+1

私はこの質問が少し古いと知っていますが、同様の作業を実行しようとしている間に走っています。私は、Magentoの目には、これがまさに「ディスカウント」ではないカスタムトータルコレクターであるという事実のせいで、これが主に機能するとは思わない。 –

関連する問題