一定条件下で商品別税率設定が適用されない不具合の原因と対策。
Edit me

商品別税率設定が適用されない不具合について

増税に伴い、基本税率設定に10%の設定追加や、軽減税率対応のため商品別税率設定を適用する際、特定の時系列で設定を行なった場合に、商品購入時の税率に商品別税率設定が適用されない不具合が発生しています。

以下の「対象となるケース」から、不具合の発生する設定を行なっていないかご確認いただき、対象となる場合は「不具合の回避方法」にある手順を適用してください。

不具合の内容と対策

不具合の内容

EC-CUBEの本体バージョンが4系または3系で、基本税率設定を設定する際の「適用日時」より前に、商品別税率設定作業をすると、商品の購入時に基本税率設定の税率が適用されます。

対象となるケース

今回の商品別税率設定が適用されない不具合に関しては、以下の全てに該当している場合に問題が発生します。

  • EC-CUBEの本体バージョンが4系または3系である
  • 基本税率設定で基本税率の設定を追加している
  • 基本税率設定で追加した「基本税率の適用日時」より前に、商品別税率設定の作業をしている

例として、今回の不具合の対象となるケースは、以下の図のように基本税率設定で10%の税率の「適用日時」を 2019年10月1日 00:00:00 に設定されている状態で、商品別税率設定の作業を、2019年10月1日 00:00:00 より前の日時に実施した場合に発生します。

不具合の原因

商品の購入時、「dtb_tax_rule」テーブルの、「apply_date(適用日時)」を元にその商品に適用される税率を取得します。

税率設定は、「apply_date(適用日時)」が最新かつ現在までの日時である方を優先します。 商品別税率設定は、設定作業を行った日時で「apply_date(適用日時)」が登録されます。 商品別税率設定の「apply_date(適用日時)」が、基本税率設定で設定されている「apply_date(適用日時)」より、新しい日時に設定すれば不具合を回避できます。

不具合の詳細に関しては、こちらからご確認ください。

不具合の回避方法

回避するためには以下2つの対応が必要となります。

  1. 商品別税率が反映されない不具合の修正(ソースコードの変更)
  2. 「商品別税率の適用日時」を「基本税率の適用日時」以降の日付にする (SQLによるデータベースの更新)

Step 1: 商品別税率が反映されない不具合の修正

EC-CUBE3系には、商品別税率が反映されない不具合 #2251 が存在します。 商品別税率を正しく商品価格に反映させるためには、この不具合の修正が必要です。

修正方法:ソースコードの変更
ファイル:src/Eccube/Repository/TaxRuleRepository.php
修正内容:PullRequest #4310 の修正差分 をソースコードに反映してください。

Step 2: 「商品別税率の適用日時」を「基本税率の適用日時」以降の日時にする

商品価格に商品別税率を反映するためには、「商品別税率の適用日時」が「基本税率の適用日時」以降の日時になっている必要があります。

「商品別税率の適用日時」は管理画面から更新することができないため、データベースを直接アップデートして下さい。

修正方法:SQLによるデータベースの更新
更新内容: dtb_tax_ruleテーブルapply_date を「基本税率の適用日時」以降の日時に変更する。

以下のサンプルは、「基本税率の適用日時」が 2019年10月1日 00:00:00 で設定されていることを想定としています。SQLで更新をする場合は、更新する値や条件をご自身のサイトに合わせて適宜更新してください。

SQL実行前の事前準備

MySQLをご使用の場合は、環境に合わせて time_zone を設定が必要です。JST(日本標準時)で日時を登録する場合は、以下のコマンドで time_zone を設定してください。

SET time_zone = '+09:00';

SQLサンプル1:任意の商品のみの「基本税率の適用日時」を更新する場合

UPDATE dtb_tax_rule SET apply_date = '2019-10-01 00:00:01' WHERE product_class_id = [変更したい商品のproduct_class_id];

SQLサンプル2:商品別税率設定があるすべての「基本税率の適用日時」を更新する場合

UPDATE dtb_tax_rule SET apply_date = '2019-10-01 00:00:01' WHERE product_class_id IS NOT NULL;

SQL実行後の確認事項

上記 Step1〜2を対応後、商品別税率が商品価格に反映されていることをご確認下さい。

Tags: spec