こんにちは!@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
<?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
編集箇所抜粋
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
],
入金待ちから変更できるステータスの追加
※複数の場合は「配列で渡す」
PHP
'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でステータス変更処理
キャンセルの場合は、在庫やポイントを戻してくれる
PHP
$this->orderStateMachine->apply($Order, $changeStatus);
OrderStateMachineでステータスの処理を追加
在庫を戻したり、ポイントの減算処理も追加できる
PHP
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では、「決済処理中」ステータスがあり在庫を確保している状態です。
決済途中などで、エラーやサイトを閉じたりして発生しずっと受注が残るので、キャンセルして在庫の調整が必要になる。