tips blog

EC-CUBE 2.13 軽減税率(個別税率)バグの簡単な対応

2019年10月9日

EC-CUBE2.13で軽減税率に伴うバグ発生
各商品毎の税率設定して、税率10%にしているはずなのに、商品詳細(一覧も?)で8%になる。
(またはその逆もある?)
対処法としては色々あったが、以下のやり方がBESTだと思う。
以下の方法がシンプルで簡単だと思う。
※もちろん簡単なだけに、完全ではありませんが、今回のバグの原因である規格毎の税率を使わなければ、通常通り動作すると思います。


******************************************************
■データベースのSQLでUPDATE dtb_tax_rule SET product_class_id = 0;
入力して「実行」
■/data/class/helper/SC_Helper_TaxRule.php内の2箇所変更 ※2020年4月15日追加参考
******************************************************


【参考サイト】
https://github.com/EC-CUBE/eccube-2_13/pull/301
真面目に直すには以下の方があっているようだが、
商品規格で税率が変わるなんてあり得ない(税率変えるなら別商品)ので上記がベストと判断
https://github.com/EC-CUBE/eccube-2_13/pull/298#issuecomment-522394809

上記、参考サイトの方法が完全なものだと思う。


【2020年4月14日 追記】
SQL実行だけだと、商品が追加されたり、現状商品を10%にするなど行うとエラーがでると判明しました。
参考サイトで、完全に解消するやり方が書いてますが、もう少しシンプルな方法で解決できないか検討中。


【2020年4月15日 追記】
■以下ファイル、2箇所変更でDBのdtb_tax_ruleデータが常にproduct_class_id  = 0;になる。
/data/class/helper/SC_Helper_TaxRule.php


【296行目追加】

$arrValues['product_class_id'] = 0; // 個別税率バグ用追加


【293行目】

$arrValues['product_class_id'] = $product_class_id;

 ↓

//$arrValues['product_class_id'] = $product_class_id; // 個別税率バグ用削除



【追加後】

$arrCheck = $objQuery->getRow('*', 'dtb_tax_rule', $where, $arrVal);
$tax_rule_id = $arrCheck['tax_rule_id'];
}

$arrValues['product_class_id'] = 0; // 個別税率バグ用追加

if ($tax_rule_id == NULL) {
// 税情報を新規
// INSERTの実行
$arrValues['tax_rule_id'] = $objQuery->nextVal('dtb_tax_rule_tax_rule_id');
$arrValues['country_id'] = $country_id;
$arrValues['pref_id'] = $pref_id;
$arrValues['product_id'] = $product_id;
//$arrValues['product_class_id'] = $product_class_id; // 個別税率バグ用削除
$arrValues['create_date'] = 'CURRENT_TIMESTAMP';

$objQuery->insert($table, $arrValues);
} else {
// 税情報を更新
$where = 'tax_rule_id = ?';
$objQuery->update($table, $arrValues, $where, array($tax_rule_id));
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です