Ticket #1730 (closed バグ指摘: 修正済)

Opened 6 years ago

Last modified 4 years ago

税率変更に対応できない

Reported by: Seasoft Owned by: AMUAMU
Priority: Milestone: EC-CUBE2.13.0
Component: フロント Version: 2.12.0 α
Keywords: Cc: habu
修正済み: yes

Description (last modified by habu) (diff)

dtb_order_detail.price

商品は外税対応を維持するとしても、受注は税込で扱う方が妥当に感じている。

報告者のコメント

受注情報に税率を持たせるような冗長な拡張はやめてね・・・

関連スレッド

 http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=2428&forum=1&post_id=54709

2012/12/28追記

消費税率変更時の対応ですが、 そろそろ標準で対策しておいた方が良い時期にきていますね。

報告者のSeasoft様が方針を書いてくださっていますが、受注データを税込で扱う様にするのは大きな変更になるので、2.12系としては、受注に税率を持たせる方向で、とりあえず対策を行なっておいた方が良いかと思っています。

ある程度できている修正コードがありますので、アップデート用のスクリプトを作成した後、もう少し確認して、コミットしようと思います。

詳細を以下に記載します。

■現状の不具合

SHOPマスターで消費税率を変更した後に・・・

  • マイページ>購入履歴や、管理画面から過去の受注を閲覧したり、帳票出力や、メール送信をすると、商品の税込み価格や、商品毎の小計欄に、現在の税率で再計算された金額が表示されてしまう。
  • 受注管理画面で過去の受注を更新すると、現在の税率で再計算されたデータが登録されてしまう。

■修正方針

2.12系の動作を大きく変更する事無く、上記の不具合を修正する。

■修正方法

・dtb_order、dtb_order_temp、dtb_order_detailに、tax_rateと、tax_ruleを追加する。(必須項目にはしない)
※dtb_orderにカラム追加するのは、受注管理画面で過去の受注に商品を追加した場合に、受注時の税率で追加できるようにするため。
※dtb_order_detailにカラム追加するのは、軽減税率などが盛り込まれた場合に対応しやすくするため。

・dtb_order_detailに、tax_rateと、tax_ruleの値が入っている場合、SC_Helper_DB_Ex::sfCalcIncTaxや、SC_Utils_Ex::sfTaxの第2、第3引数に、それらの値を渡す様にする。 (つまり、商品の税込み価格計算部分で、受注時の税率&課税規則を利用する様にする)

■対応状況

r22197 にて、対応しました。

■2.12.2からのアップデート方法

ファイルの差分だけでなく、DBのカラム追加を含むため、データベース変更用のアップデーターを作成しました。
(このチケットに添付しています)
添付ファイルを解凍してできた「update_2122to2123」を、htmlディレクトリ配下にディレクトリごと配置し、/update_2122to2123/にアクセスすると、データベースのアップデートを行なう事ができます。
(インストール用のスクリプトと同様の使い勝手です)

データベースのアップデートの内容は、以下の通りです。

  • dtb_order、dtb_order_temp、dtb_order_detail に、消費税率と、課税規則のカラムを追加します。
  • 上記3テーブルの既存データで、消費税率も課税規則もセットされていないものについて、SHOPマスタで設定されている消費税率と課税規則をセットします。(アップデート後、一括updateした件数を表示します)


※アップデーターを利用した後は、必ずディレクトリごと削除してください。
仮に2度以上アップデート操作を行なっても、影響は無い作りにしてはいますが、 install.phpと同様、tempディレクトリ内にログファイルを出力するようにしているためです。

Attachments

update_2122to2123.zip Download (19.0 KB) - added by habu 5 years ago.
2.12.2から、2.12.3へのデータベースのアップデーター

Change History

comment:1 Changed 5 years ago by habu

  • Priority changed from to
  • Description modified (diff)

comment:2 Changed 5 years ago by habu

  • Owner changed from somebody to habu
  • Description modified (diff)

comment:3 Changed 5 years ago by habu

  • 修正済み set
  • Description modified (diff)

comment:4 Changed 5 years ago by habu

  • Milestone set to EC-CUBE2.12.3

Changed 5 years ago by habu

2.12.2から、2.12.3へのデータベースのアップデーター

comment:5 Changed 5 years ago by habu

  • Description modified (diff)

comment:6 Changed 5 years ago by kim

  • Milestone changed from EC-CUBE2.12.3 to EC-CUBE2.12.4

habu様、アップデーターのご提供ありがとうございます。 本体ソースへの搭載自体は、申し訳ありませんが、現時点では見送らせていただきますので、 ひとまずマイルストーンを変更させていただきます。

comment:7 Changed 5 years ago by h_yoshimoto

r22215 にて戻させて頂きました。

comment:8 Changed 5 years ago by kim

  • Cc habu added

habu様

2.12.3ブランチの作成のため、差し戻しておりましたが、

r22218 にて再度逆マージいたしました。

2.12.4への実装に向けて、決済モジュール等での検証が必要ですね。

comment:9 Changed 5 years ago by AMUAMU

  • Owner changed from habu to AMUAMU
  • Status changed from new to assigned

comment:10 Changed 4 years ago by h_yoshimoto

  • Status changed from assigned to closed
  • Resolution set to 修正済

#2323 に引き継ぎ。 本チケットはクローズします。

comment:11 Changed 4 years ago by habu

管理画面から新規受注登録をする際に、税率と課税規則がセットされない不具合がありましたので、報告いたします。

以下の方法で修正可能です。

対象ファイル: data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php 対象箇所: LC_Page_Admin_Order_Edit::doRegister関数内にて、 $objPurchase->registerOrderが呼び出される直前に以下のコードを追加します。

// 新規受注登録の場合は、現在の税率・課税規則を使用
if (SC_Utils_Ex::isBlank($order_id)) {
    $arrValues['order_tax_rate'] = $this->arrInfo['tax'];
    $arrValues['order_tax_rule'] = $this->arrInfo['tax_rule'];
}

(Unified diff)

Index: LC_Page_Admin_Order_Edit.php
===================================================================
--- LC_Page_Admin_Order_Edit.php	(対応前)
+++ LC_Page_Admin_Order_Edit.php	(対応後)
@@ -686,6 +686,12 @@
             $arrValuesBefore['payment_id'] = NULL;
         }
 
+        // 新規受注登録の場合は、現在の税率・課税規則を使用
+        if (SC_Utils_Ex::isBlank($order_id)) {
+            $arrValues['order_tax_rate'] = $this->arrInfo['tax'];
+            $arrValues['order_tax_rule'] = $this->arrInfo['tax_rule'];
+        }
+
         // 受注テーブルの更新
         $order_id = $objPurchase->registerOrder($order_id, $arrValues);
Note: See TracTickets for help on using tickets.