LoginSignup
8
14

More than 5 years have passed since last update.

EC-CUBE4で受注ステータスを追加する

Posted at

EC-CUBE4では、受注のステータス遷移がより厳密になりました。

これにより、誤ったステータスへの変更防止や、在庫やポイントの引当・戻しが適切に取り扱えるようになりました。
ただ、従来のようにステータスを追加したい場合は、ステータスの追加に加え、ステータスの遷移も定義する必要があります。

今回は、「取寄中」というステータスを追加し、「新規登録」→「取寄中」→「注文取消し」という遷移ができるようにする例を紹介したいと思います。

受注ステータスを追加する

従来どおり、mtb_order_statusテーブルにデータを追加します。

INSERT INTO mtb_order_status (id, display_order_count, name, sort_no, discriminator_type) VALUES (10, 'f', '取寄中', 8, 'orderstatus')

受注ステータスの遷移を定義する

app/config/packages/order_state_machine.phpに、ステータスの遷移が定義されています。

placesに、取寄中のIDを追加します。

            'places' => [
                (string) Status::NEW,
                (string) Status::CANCEL,
                (string) Status::IN_PROGRESS,
                (string) Status::DELIVERED,
                (string) Status::PAID,
                (string) Status::PENDING,
                (string) Status::PROCESSING,
                (string) Status::RETURNED,
                '10'    // <- 追加
            ],

次に、transitionsにステータス遷移の定義を行います。

            'transitions' => [
                // 「新規受付」から「取寄中」への遷移できるようにする
                'toriyose' => [
                    'from' => (string) Status::NEW,
                    'to' => '10'     
                ],
                'pay' => [
                    'from' => (string) Status::NEW,
                    'to' => (string) Status::PAID,
                ],
                'packing' => [
                    'from' => [(string) Status::NEW, (string) Status::PAID],
                    'to' => (string) Status::IN_PROGRESS,
                ],
                'cancel' => [
                    // 「取寄中」から「注文取消し」へ遷移できるようにする
                    'from' => [(string) Status::NEW, (string) Status::IN_PROGRESS, (string) Status::PAID, '10'],    // <- 10を追加する
                    'to' => (string) Status::CANCEL,
                ],

変更後の差分は以下のようになります。

            'places' => [
                (string) Status::NEW,
                (string) Status::CANCEL,
                (string) Status::IN_PROGRESS,
                (string) Status::DELIVERED,
                (string) Status::PAID,
                (string) Status::PENDING,
                (string) Status::PROCESSING,
                (string) Status::RETURNED,
+                '10'
            ],
            'transitions' => [
+                'toriyose' => [
+                    'from' => (string) Status::NEW,
+                    'to' => '10'
+                ],
                'pay' => [
                    'from' => (string) Status::NEW,
                    'to' => (string) Status::PAID,
                ],
                'packing' => [
                    'from' => [(string) Status::NEW, (string) Status::PAID],
                    'to' => (string) Status::IN_PROGRESS,
                ],
                'cancel' => [
-                    'from' => [(string) Status::NEW, (string) Status::IN_PROGRESS, (string) Status::PAID],
+                    'from' => [(string) Status::NEW, (string) Status::IN_PROGRESS, (string) Status::PAID, '10'],
                    'to' => (string) Status::CANCEL,
                ],
                'back_to_in_progress' => [
                    'from' => (string) Status::CANCEL,
                    'to' => (string) Status::IN_PROGRESS,
                ],

以上で定義は完了です。

管理画面の受注登録から、受注を作成し、「新規受付」→「取寄中」→「注文取消し」へ遷移できるようになっていれば成功です。

8
14
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
14