会員グループ管理::会員ランク管理アドオンで3ヶ月購入がなかったら会員ランクをクリアする実装方法

会員グループ管理::会員ランク管理アドオンで3ヶ月購入がなかったらランクをクリアする実装する方法です。

最終購入日をチェックして会員ランクをクリアするか判定

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

<?php


namespace Customize\Service\Rank;


use Eccube\Entity\Customer;
use Plugin\CustomerGroupRank\Service\Rank\RankInterface;

class LastBuyRankClear implements RankInterface
{
    public function decide(Customer $customer): void
    {
        $datetime = $customer->getLastBuyDate()->modify('+ 3 months');

        if($datetime->diff(new \DateTime())->days < 1) {
            $customer->getGroups()->clear();
        }
    }
}

上記のサービスをプライオリティ付きで登録

会員グループ管理::会員ランク管理アドオンのランク決定処理のプライオリティが100に設定されているので、100未満のプライオリティを設定してランク決定処理を上書きできるようにします。

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

services:
  Customize\Service\Rank\LastBuyRankClear:
    tags:
      - { name: 'plugin.customer.group.rank', priority: 99 }

以上で完成です。

今回の実装だと会員ランクがクリアされても購入すれば会員ランク復帰できるので、そのあたりの考慮は各サービスのポリシーに合わせて実装してください。

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