見出し画像

EC-CUBE4:購入金額に応じで配送方法別に送料の値引きをする

2系、3系でもやっていた、購入金額によって送料の値引きをするカスタマイズを、4系でも行ってみました。

実現したいこと:

○○○円以上で配送ID=1が送料無料
○○○~○○○円で配送ID=1が送料無料、配送ID=2が200円引き
○○○~○○○円で配送ID=1と2が送料無料、配送ID=3が500円引き
○○○○円以上で配送ID=1~3が全て送料無料

3系のときに私が行っていた送料値引きカスタマイズ

2019/2/7 EC-CUBE東京UG勉強会-PurchaseFlowの使い方-
ソースコード

上記2つを参考にして、4系ではEC-CUBEのアップデートに影響を受けないNebikiProcessor.phpで設定を行いました。

設定はとても簡単
以下のサイトからダウンロードしたNebikiProcessor.phpを、自分のサイトの設定に合わせて変更して、Customizeフォルダにアップロードするだけ。

NebikiProcessor.phpの作成には、EC-CUBE3系から4系へのデータ変換スクリプトでお世話になったあけびさんにまたもがっつりお世話になりました。

まずは以下のファイルをダウンロードしてください。

https://akebi.jp/temp/NebikiProcessor.zip

ファイル中に丁寧に説明がついているので、ほぼ何も迷うことはないかと思いますが、もしも値引きを管理画面の受注登録でも行いたい場合は
16行目付近で
use Eccube\Repository\BaseInfoRepository;
use Eccube\Repository\DeliveryFeeRepository;
の2つを追加で呼び出している部分に

OrderFlowも追加します。
use Eccube\Repository\BaseInfoRepository;
use Eccube\Repository\DeliveryFeeRepository;
use Eccube\Annotation\OrderFlow;
/**
* @ShoppingFlow
* @OrderFlow
*/

後は63行目付近以降↓で細かい設定を

    public function addDiscountItem(ItemHolderInterface $itemHolder, PurchaseContext $context)
   {
       $Shipping = $itemHolder->getShippings()->first();
       $DeliveryFee = $this->deliveryFeeRepository->findOneBy([
           'Delivery' => $Shipping->getDelivery(),
           'Pref' => $Shipping->getPref(),
       ]);
       // 配送方法ID
       $deliv_id = $itemHolder->getShippings()->first()->getDelivery()->getId();
       // 小計
       $sub_total = $itemHolder->getSubTotal();
       // 税込合計
       $total = $itemHolder->getTotal();
       // 配送方法IDごとの値引き額設定
       $discount = 0; // 値引き額初期値
       // 配送方法IDが1の場合
       if($deliv_id == 1) {
           // 小計10000円以上の場合 送料無料(値引き額=送料)
           if($sub_total >= 10000) $discount = $DeliveryFee->getFee();
           // 小計5000円以上の場合 値引き額200円
           elseif($sub_total >= 5000) $discount = 200;
           // 小計1000円以上の場合 値引き額100円
           elseif($sub_total >= 1000) $discount = 100;
           // 小計1000円に満たない場合 値引き額50円
           else $discount = 50;
       }

説明に従って、配送方法のID別に購入金額に応じた値引き設定をしていくだけでOKです♪

保存したNebikiProcessor.phpをapp/Customize/Service/PurchaseFlow/Processor/NebikiProcessor.phpに置くだけで値引きが適用されるようになります。

私のお店のように、複数ある配送方法をお客様が選べるスタイルのお店だと、非常に重宝する値引きプログラムになるかと思います。

注意する点としては、管理画面で送料無料設定を行っていると二重で値引きがされる可能性があるので、管理画面では送料無料の設定をしない方がいいかと思います。

この記事が気に入ったらサポートをしてみませんか?