Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

https://github.com/EC-CUBE/ec-cube/pull/3325

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

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

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

従来どおり、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,
                ],

以上で定義は完了です。

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

chihiro-adachi
EC-CUBEの開発をしています ※Qiitaへ投稿した記事はすべて私個人としての発言です。
https://github.com/EC-CUBE/ec-cube
ec-cube
日本No.1ECオープンソースのEC-CUBEのコミッターやユーザーのコミュニティです。
https://www.ec-cube.net
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away