こんにちは!@vVv_kenshi_vVvです!
コンビニ支払いのステータス追加
mtb_order_statusのid2が空いているので使用する
DB(テーブル)にデータ追加
- mtb_order_status:入金待ち追加
- mtb_order_status_color:入金待ちカラー追加
- mtb_customer_order_status:入金待ち追加
OrderStatus(Entity)へ定数
今回は本体ソースに追加しているが、CustomizeでOrderStatusTraitを作成しても良い
定数「WAIT_PAYMENT」の追加
/** * OrderStatus * * @ORM\Table(name="mtb_order_status") * @ORM\InheritanceType("SINGLE_TABLE") * @ORM\DiscriminatorColumn(name="discriminator_type", type="string", length=255) * @ORM\HasLifecycleCallbacks() * @ORM\Entity(repositoryClass="Eccube\Repository\Master\OrderStatusRepository") * @ORM\Cache(usage="NONSTRICT_READ_WRITE") */ class OrderStatus extends \Eccube\Entity\Master\AbstractMasterEntity { /** 新規受付. */ const NEW = 1; /** 入金待ち. */ const WAIT_PAYMENT = 2; /** 注文取消し. */ const CANCEL = 3; /** 対応中. */
注文ステータス遷移設定
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' => [], ]; }