EC-CUBE4では最初から用意されている受注ステータス(対応状況)は8つで、管理画面上で操作で増やすことはできません。
今回は対応状況の種類を増やす方法をご紹介します。
元々用意されている対応状況
デフォルトで登録されている対応状況は下記の8つです。うち決済処理中と購入処理中はシステム専用のため、手動で操作できる対応状況は実質6つです。
1 新規受付
3 注文取消し
4 対応中
5 発送済み
6 入金済み
7 決済処理中 (システム専用)
8 購入処理中(システム専用)
9 返品
EC-CUBE3系にはあった「入金待ち」がなくなっていますので、今回はID2を使って「入金待ち」という対応状況を増やしてみます。
データベースに「入金待ち」という項目を登録
対応状況の追加は、管理画面上ではマスタデータ管理からも受注対応状況設定からもできません。
対応状況を増やさせたくないという強い意志を感じます(笑)
まずはデータベースを操作して下記の3つのテーブルにデータを登録します。
-
mtb_order_status
# 並び順を新規受付の次にしたいので、先に他のステータスの並び順を1つあげておく
UPDATE mtb_order_status SET sort_no = sort_no + 1 WHERE sort_no >= 1;
# 入金待ちを登録
INSERT INTO mtb_order_status (id, display_order_count, name, sort_no, discriminator_type) VALUES (2, 1, '入金待ち', 1, 'orderstatus');
mtb_customer_order_status (マイページに表示するステータス)
# 並び順を新規受付の次にしたいので、先に他のステータスの並び順を1つあげておく
UPDATE mtb_customer_order_status SET sort_no = sort_no + 1 WHERE sort_no >= 1;
# 入金待ちを登録
INSERT INTO mtb_customer_order_status (id, name, sort_no, discriminator_type) VALUES (2, '入金待ち', 1, 'customerorderstatus');
mtb_order_status_color (受注管理でのラベルカラー)
# 並び順を新規受付の次にしたいので、先に他のステータスの並び順を1つあげておく
UPDATE mtb_order_status_color SET sort_no = sort_no + 1 WHERE sort_no >= 1;
# 入金待ちを黄色#ffff00で登録
INSERT INTO mtb_order_status_color (id, name, sort_no, discriminator_type) VALUES (2, '#ffff00', 1, 'orderstatuscolor');
この時点で一度キャッシュをクリアして、店舗設定>受注対応状況設定をのぞいてみましょう。(受注対応状況設定は確かバージョン4.1から実装なので4.0ではデータベースを直接確認する必要があります)
添付画像のようにID2に「入金待ち」が表示されていればひとまずうまくいっています。
ただし、この時点で受注画面を確認しても、まだ対応状況に「入金待ち」という項目が表示されていません。
受注画面で新規ステータス「入金待ち」を表示するには?
実は受注ステータスの変更にStateMachineというSymfonyの機構が利用されており、あるステータスからはどのステータスに変更できるのかということを指定してやる必要があります。
app/config/eccube/packages/order_state_machine.phpを修正
placesの追加
「(string) Status::NEW,」という行の下に「2,」を追加してください。
transitionsの追加
名称はなんでも良いのですが、payという項目の下にnyukin_machiを追加してください。
// 新規受付から入金待ちへの遷移
'nyukin_machi' => [
'from' => (string) Status::NEW,
'to' => (string)2,
],
再度確認すると・・
対応状況に新規ステータスの「入金待ち」が表示されました!
対応状況を「入金待ち」に変更してみると
ステータス変更はできましたが、入金待ちしか表示されなくなりました(笑)
これは、order_state_machine.phpで、「入金待ち」からどのステータスへ変更できるのかを記述していないためです。
入金待ちから変更できるのは「入金済み」か「注文取り消し」だろうということで、transistionsのうち、payとcancelのfromにID2を追加します。
結果
対応状況を入金待ちから入金済みや注文取り消しに変更することができるようになりました。これで一度完了とさせていただきます。
最後に
対応状況に新規ステータスの「入金待ち」を追加しましたが、今回、難しいことはあえて避けています。
ステータスを複数追加すると相当複雑になることはご理解いただけると思います。
また、「発送済み」が絡んで来るようなステータス遷移は「在庫数の変動」や「ポイント数の変動」を考慮する必要があり、一気に難易度が上がります。
また、実際にあった話として、ステータスが新規で追加されることを考慮していないプラグインがあり、プラグインの修正も必要になる場合があります。
ただ注文に関するステータス追加は多くのEC-CUBEサイトで必要となる課題だと思いますので、避けては通れないと思います。
複雑なステータス追加をご希望の方はぜひ一度ご相談ください。難しそうであればステータス追加以外の方法での対応をご提案することも可能です。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。