商品情報を登録する際に税抜き価格のみを入力して、税込み価格は自動で計算して表示させたいということがあったので、実装の手順をメモ。
実装内容
今回実装したかったこととしては以下の通りです。
- 商品詳細ページに税抜き価格と税込み価格を表示する
- 商品情報の登録時には税抜き価格のみ入力して、税込み価格は自動で計算する
- 税率についても管理画面上で変更できるようにする
- 軽減税率にも対応する
- 税込み価格の小数点以下については切り捨て
サンプルコード
商品を登録するコンテンツタイプに以下のフィールドを追加します。
- 名前:税抜き価格
- フィールド:数値
- 名前:消費税設定
- フィールド:チェックボックス
- 値:軽減税率対象(reducedTaxRate)
次にカスタムフィールドから税率を設定するフィールドを追加します。
名前:税率
- システムオブジェクト:子サイト
- 種類:テキスト
- ベースネーム:taxrate
- テンプレートタグ:ProductTaxRate
名前:軽減税率
- システムオブジェクト:子サイト
- 種類:テキスト
- ベースネーム:reducedtaxrate
- テンプレートタグ:ProductReducedTaxRate
これで 設定 > 全般 のページ内に税率の設定フィールドが追加されました。
各入力フィールドの準備ができたので、実際に税込み価格を算出する実装を行います。
<mt:Ignore><!-- 税抜き価格と税込み価格(計算用)を格納 --></mt:Ignore> <mt:ContentField content_field="税抜き価格"> <mt:SetVars> priceExcludingTax=<$mt:ContentFieldValue$> priceIncludingTax=<$mt:ContentFieldValue$> </mt:SetVars> </mt:ContentField> <mt:Ignore><!-- 軽減税率対象かどうかで使用する税率を変更 --></mt:Ignore> <mt:SetVarBlock name="thisTaxRate"><mt:ProductTaxRate></mt:SetVarBlock> <mt:ContentField content_field="消費税設定"> <mt:SetVarBlock name="thisTaxRate"><mt:ProductReducedTaxRate></mt:SetVarBlock> </mt:ContentField> <mt:Ignore><!-- 税込み価格の計算 --></mt:Ignore> <$mt:SetVar name="thisTaxRate" value="100" op="+"$> <$mt:SetVar name="thisTaxRate" value="100" op="/"$> <$mt:SetVar name="priceIncludingTax" value="$thisTaxRate" op="*"$> <$mt:Var name="priceIncludingTax" regex_replace="/(\d*)\.(\d*)/","$1" setvar="priceIncludingTax"$> 税抜き<$mt:Var name="priceExcludingTax"$>円(税込み<$mt:Var name="priceIncludingTax"$>円)
途中コメントで記載している通りですが、(1)商品が軽減税率対象かどうかでベースの税率を設定 (2)ベースの税率を元に税込み価格を算出 という流れで、税込み価格算出後に小数点以下の切り捨て(計算後の「.」以降を正規表現で除去)という処理を行っています。
実際に商品をいくつか登録して試してみます。
税抜き価格を99にして、軽減税率対象にチェックを入れてみます。
税抜き99円(税込み106円)
次は税抜き価格を759にして、軽減税率対象にチェックを入れないでみます。
税抜き759円(税込み834円)
次は税抜き価格を217にして、軽減税率対象にチェックを入れてみます。
税抜き217円(税込み234円)
試した限り動作は特に問題なさそうでした。
今回実装するにあたり、税込み計算後の小数点はどう扱うのが正しいかを調べたところ、
1円未満の端数をどのように処理(切捨て、切上げ、四捨五入など)するかは各事業者の判断となっているようです。

コメントが承認されるまで時間がかかります。