【EC-CUBE4】初期注文ステータス変更

スポンサーリンク
スポンサーリンク

銀行支払いの場合は購入処理後に「新規受付」→「入金待ち」になるように変更する。

このカスタマイズは一例になります。

プラグインによっては、うまく胃開かない可能性があるのでご「注意ください。

もっと良いカスタマイズ方法があれば、コメントください。

こんにちは!@vVv_kenshi_vVvです!

スポンサーリンク

購入フローの確認

購入フローは、使用する複数クラスで構成されています。

購入フローの設定は基本的に下記ファイルで行ってます。

ファイルパス:eccube/app/config/eccube/packages/purchaseflow.yaml

詳細は公式のドキュメントを確認ください。

EC-CUBE4開発者向けドキュメントサイト

OrderUpdateProcessorの確認

通常の購入フローで「新規受付」に変更しているのは、こちらのファイルです。

ファイルパス:eccube/src/Eccube/Service/PurchaseFlow/Processor/OrderUpdateProcessor.php

PHP
<?php

/*
 * This file is part of EC-CUBE
 *
 * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
 *
 * http://www.ec-cube.co.jp/
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Eccube\Service\PurchaseFlow\Processor;

use Eccube\Entity\ItemHolderInterface;
use Eccube\Entity\Master\OrderStatus;
use Eccube\Entity\Order;
use Eccube\Repository\Master\OrderStatusRepository;
use Eccube\Service\PurchaseFlow\PurchaseContext;

/**
 * 受注情報更新処理.
 */
class OrderUpdateProcessor extends AbstractPurchaseProcessor
{
    /**
     * @var OrderStatusRepository
     */
    private $orderStatusRepository;

    /**
     * OrderUpdateProcessor constructor.
     *
     * @param OrderStatusRepository $orderStatusRepository
     */
    public function __construct(OrderStatusRepository $orderStatusRepository)
    {
        $this->orderStatusRepository = $orderStatusRepository;
    }

    public function commit(ItemHolderInterface $target, PurchaseContext $context)
    {
        if (!$target instanceof Order) {
            return;
        }
        $OrderStatus = $this->orderStatusRepository->find(OrderStatus::NEW);
        $target->setOrderStatus($OrderStatus);
        $target->setOrderDate(new \DateTime());
    }
}

OrderUpdateProcessorの作成

本体の「OrderUpdateProcessor」をコピーしCustomizeでカスタマイズ

Payment::BANK_PAYMENTは、別途拡張して定数を追加したます。

PAID_WAIT_STATUSを配列にする事で、銀行振込以外でも入金待ちにしたい支払い方法追加可能としました。

PHP
<?php

namespace Customize\Service\PurchaseFlow\Processor;

use Eccube\Service\PurchaseFlow\Processor\AbstractPurchaseProcessor;
use Eccube\Entity\ItemHolderInterface;
use Customize\Entity\Master\OrderStatus;
use Customize\Entity\Payment;
use Eccube\Entity\Order;
use Eccube\Repository\Master\OrderStatusRepository;
use Eccube\Service\PurchaseFlow\PurchaseContext;


/**
 * 受注情報更新処理.
 */
class OrderUpdateProcessor extends AbstractPurchaseProcessor
{
    // 入金待ちにする注文ステータス
    const PAID_WAIT_STATUS = [
        Payment::BANK_PAYMENT,
    ];

    /**
     * @var OrderStatusRepository
     */
    private $orderStatusRepository;

    /**
     * OrderUpdateProcessor constructor.
     *
     * @param OrderStatusRepository $orderStatusRepository
     */
    public function __construct(OrderStatusRepository $orderStatusRepository)
    {
        $this->orderStatusRepository = $orderStatusRepository;
    }

    public function commit(ItemHolderInterface $target, PurchaseContext $context)
    {
        if (!$target instanceof Order) {
            return;
        }

        $Payment = $target->getPayment();

        // 支払い方法により、ステータスを変更する
        if (in_array($Payment->getId(), self::PAID_WAIT_STATUS, true)) {
            $OrderStatus = $this->orderStatusRepository->find(OrderStatus::PAID_WAIT);
        } else {
            $OrderStatus = $this->orderStatusRepository->find(OrderStatus::NEW);
        }
        $target->setOrderStatus($OrderStatus);
        $target->setOrderDate(new \DateTime());
    }
}

PurchaseFlowの設定変更

カスタマイズした「OrderUpdateProcessor」を読み込むように変更

Bash
services:

    # Purchase Flow for Cart

    eccube.purchase.flow.shopping.purchase:
        class: Doctrine\Common\Collections\ArrayCollection
        arguments:
            - #
                - '@Eccube\Service\PurchaseFlow\Processor\PreOrderIdValidator'
                - '@Eccube\Service\PurchaseFlow\Processor\PointProcessor'
                - '@Eccube\Service\PurchaseFlow\Processor\StockReduceProcessor'
                - '@Eccube\Service\PurchaseFlow\Processor\CustomerPurchaseInfoProcessor'
                # - '@Eccube\Service\PurchaseFlow\Processor\OrderUpdateProcessor'
                # 支払い方法で初回ステータスを変更できるようカスタマイズ
                - '@Customize\Service\PurchaseFlow\Processor\OrderUpdateProcessor'
タイトルとURLをコピーしました