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,
],
以上で定義は完了です。
管理画面の受注登録から、受注を作成し、「新規受付」→「取寄中」→「注文取消し」へ遷移できるようになっていれば成功です。