【EC-CUBE4】合計金額3000円未満の場合は送料に300円加算するプラグインを作る方法

EC-CUBE4で合計金額3000円未満の場合は送料に300円加算するプラグインを作る方法です。

まずは以下のコマンドでプラグインの雛形を作ります。

プラグインコードはなんでも良いのですが、今回は「DeliveryFee」にしてください。

bin/console eccube:plugin:generate

 

送料計算するプロセッサーを用意

自動生成されたプラグイン一式内にService/PurchaseFlowディレクトリを作り、以下のDeliveryFeePreprocessor.phpファイルを設置して下さい。以上で完成です。

<?php

namespace Plugin\DeliveryFee\Service\PurchaseFlow;

use Eccube\Service\PurchaseFlow\ItemHolderPreprocessor;
use Eccube\Service\PurchaseFlow\PurchaseContext;
use Eccube\Entity\ItemHolderInterface;
use Eccube\Service\PurchaseFlow\Processor\DeliveryFeePreprocessor as BaseDeliveryFeePreprocessor;
use Eccube\Annotation\ShoppingFlow;
use Eccube\Annotation\OrderFlow;
use Eccube\Entity\Order;

/**
 * 合計金額3000円未満の場合、送料に300円加算
 * 
 * @author Akira Kurozumi <info@a-zumi.net>
 * 
 * ご注文手続きページで実行されるようアノテーションを設定
 * @ShoppingFlow
 */
class DeliveryFeePreprocessor implements ItemHolderPreprocessor {

    public function process(ItemHolderInterface $itemHolder, PurchaseContext $context)
    {
        if (!$itemHolder instanceof Order) {
            return;
        }
        
        // お届け先ごとに判定
        foreach ($itemHolder->getShippings() as $Shipping) {
            // 送料無料の受注明細かどうか確認
            foreach ($Shipping->getOrderItems() as $Item) {
                // 送料明細を探す
                if ($Item->getProcessorName() == BaseDeliveryFeePreprocessor::class) {
                    // 送料明細の数量が0の場合は送料無料
                    if ($Item->getQuantity() == 0) {
                        // 送料無料の場合は次の受注明細へ
                        continue 2;
                    }
                }
            }

            // 合計金額計算
            $total = 0;
            foreach ($Shipping->getProductOrderItems() as $Item) {
                $total += $Item->getPriceIncTax() * $Item->getQuantity();
            }

            // 合計金額が3000円未満の場合、送料に300円加算
            if ($total < 3000) {
                foreach ($Shipping->getOrderItems() as $Item) {
                    if ($Item->getProcessorName() == BaseDeliveryFeePreprocessor::class) {
                        $Item->setPrice($Item->getPrice() + 300);
                    }
                }
            }
        }
    }
}

アノテーションの設定を忘れずに

購入処理(PurchaseFlow)に独自の処理を追加するためには@ShoppingFlowアノテーションを追加する必要があります。

アノテーションの設定を忘れると動作しません。

送料無料条件の考慮

EC-CUBE4本体でも送料計算をしていますのでそちらの考慮も必要です。

EC-CUBE4本体では送料無料条件のチェック機能があり、送料無料条件にマッチした場合送料明細の数量が0に設定されます。

ですので、送料明細の数量が0の場合はプラグインの送料条件を適用しないようにしています。

プラグインのインストールと有効化

プラグインをインストールと有効化を行うと上記の送料条件が動作します。

このプラグインのファイル一式はこちら

1件のコメント

  1. 素晴らしい。これやりたかったんです。開発者ではないのでちょっとハードル高いですが、実装すべく集中します。

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください