こんにちは!@vVv_kenshi_vVvです!
コンビニ支払いのステータス追加
mtb_order_statusのid2が空いているので使用する
DB(テーブル)にデータ追加
- mtb_order_status:入金待ち追加
- mtb_order_status_color:入金待ちカラー追加
- mtb_customer_order_status:入金待ち追加
OrderStatus(Entity)へ定数
本体ソースに追加しするか、継承クラスで定数を追加する
Traitには定数を追加できない。
定数「WAIT_PAYMENT」の追加
<?php namespace Customize\Entity; use Eccube\Entity\OrderStatus as BaseEntity; if (!class_exists('Customize\Entity\OrderStatus')) {/** 親クラスの定数宣言を拡張する目的に作成しています */
class OrderStatus extends BaseEntity {
/** 入金待ち */
const WAIT_PAYMENT = 2; }
}
注文ステータス遷移設定
app/config/packages/order_state_machine.php
編集箇所抜粋
'places' => [ (string) Status::NEW, (string) Status::WAITI_PAYMENT, (string) Status::CANCEL, (string) Status::IN_PROGRESS, (string) Status::DELIVERED, (string) Status::PAID, (string) Status::PENDING, (string) Status::PROCESSING, (string) Status::RETURNED, (string) Status::CANCEL_ENTRY, (string) Status::CANCEL_PROCESSING ],
入金待ちから変更できるステータスの追加
※複数の場合は「配列で渡す」
'transitions' => [ 'pay' => [ 'from' => (string) Status::NEW, 'from' => [(string) Status::NEW, (string) Status::WAIT_PAYMENT], 'to' => (string) Status::PAID, ], 'packing' => [ 'from' => [(string) Status::NEW, (string) Status::PAID, (string) Status::CANCEL_ENTRY], 'to' => (string) Status::IN_PROGRESS, ], 'cancel' => [ 'from' => [(string) Status::NEW, (string) Status::IN_PROGRESS, (string) Status::PAID, (string) Status::CANCEL_PROCESSING], 'to' => (string) Status::CANCEL, ], 'back_to_in_progress' => [ 'from' => (string) Status::CANCEL, 'to' => (string) Status::IN_PROGRESS, ], 'ship' => [ 'from' => [(string) Status::NEW, (string) Status::PAID, (string) Status::IN_PROGRESS, (string) Status::CANCEL_ENTRY], 'to' => [(string) Status::DELIVERED], ], 'return' => [ 'from' => (string) Status::DELIVERED, 'to' => (string) Status::RETURNED, ], 'cancel_return' => [ 'from' => (string) Status::RETURNED, 'to' => (string) Status::DELIVERED, ], 'cancel_entry' => [ 'from' => [(string) Status::NEW, (string) Status::IN_PROGRESS, (string) Status::PAID, (string) Status::DELIVERED, (string) Status::CANCEL_PROCESSING, (string) Status::WAIT_PAYMENT], 'to' => (string) Status::CANCEL_ENTRY, ], 'cancel_processing' => [ 'from' => (string) Status::CANCEL_ENTRY, 'to' => (string) Status::CANCEL_PROCESSING, ], ],
OrderStateMachineでステータス変更処理
キャンセルの場合は、在庫やポイントを戻してくれる
$this->orderStateMachine->apply($Order, $changeStatus);
OrderStateMachineでステータスの処理を追加
在庫を戻したり、ポイントの減算処理も追加できる
public static function getSubscribedEvents() { return [ 'workflow.order.completed' => ['onCompleted'], 'workflow.order.transition.pay' => ['updatePaymentDate'], 'workflow.order.transition.cancel' => [['rollbackStock'], ['rollbackUsePoint']], 'workflow.order.transition.back_to_in_progress' => [['commitStock'], ['commitUsePoint']], 'workflow.order.transition.ship' => [['commitAddPoint']], 'workflow.order.transition.return' => [['rollbackUsePoint'], ['rollbackAddPoint']], 'workflow.order.transition.cancel_return' => [['commitUsePoint'], ['commitAddPoint']], // 処理が必要であればここで定義 // 'workflow.order.transition.cancel_entry' => [], // 'workflow.order.transition.cancel_processing' => [], ]; }
決済処理中について
EC-CUBE4では、「決済処理中」ステータスがあり在庫を確保している状態です。
決済途中などで、エラーやサイトを閉じたりして発生しずっと受注が残るので、キャンセルして在庫の調整が必要になる。