会員グループ管理::会員ランク管理アドオンで対応状況を発送済みにしたとき会員ランクを決定するようカスタマイズする方法

会員グループ管理::会員ランク管理アドオン はログイン時に会員ランクを決定していますが管理画面で対応状況を発送済みにしたときに会員ランクを決定するようカスタマイズすることも可能です。

対応状況を発送済みにしたときに会員ランクを決定する処理

app/Customize/EventSubscriber/TransitionSubscriber.php を作成して以下のコードを追記してください。

<?php

namespace Customize\EventSubscriber;

use Eccube\Entity\Customer;
use Eccube\Entity\Order;
use Plugin\CustomerGroupRank\Service\Rank\Context;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Workflow\Event\Event;

class TransitionSubscriber implements EventSubscriberInterface
{
    /**
     * @var Context
     */
    private $context;

    public function __construct(Context $context)
    {
        $this->context = $context;
    }

    public static function getSubscribedEvents()
    {
        return [
            'workflow.order.transition.ship' => 'onShip'
        ];
    }

    public function onShip(Event $event)
    {
        /** @var Order $order */
        $order = $event->getSubject()->getOrder();
        $customer = $order->getCustomer();
        if ($customer instanceof Customer) {
            $this->context->decide($customer);
        }
    }
}

ログイン時にランク決定するイベントを無効化

会員グループ管理::会員ランク管理アドオンに設定されているログイン時にランク決定するイベントを無効化します。

app/Customize/Resource/config/services.yaml を作成して以下を追記してください。

services:
  Plugin\CustomerGroupRank\Security\EventListener\LoginListener: # ログイン時にランクを決定するイベントを無効化

以上で完成です。

お気軽にコメントをどうぞ