バージョン選択

フォーラム

メニュー

オンライン状況

101 人のユーザが現在オンラインです。 (70 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 101
もっと...

サイト内検索

質問 > その他 > PurchaseFlow\ProcessorのDeliveryFeeを高いの1個だけを選択

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
NODOKA
投稿日時: 2019/3/2 21:41
対応状況: 解決済
半人前
登録日: 2018/4/25
居住地:
投稿: 18
PurchaseFlow\ProcessorのDeliveryFeeを高いの1個だけを選択
▼テンプレート
[EC-CUBE] 4.1
[レンタルサーバ] XAMPP
[OS] Win10
[PHP] 7.1
[導入プラグインの有無] 無し
[カスタマイズの有無] 無し
[現象]
PurchaseFlow\Processorの中でDeliveryFeeが都道府県別送だと思うのですが、商品が2個以上カートに入った時にそれぞれの送料が合計されてしまうので、一番高い都道府県別送料1個だけを適用したいのですが、方法がわかりません。教えて頂けると助かります。商品別送料は設定しておりません。お手数ですがよろしくお願いいたします。
tao_s
投稿日時: 2019/3/4 12:43
対応状況: −−−
仙人
登録日: 2008/8/20
居住地: 東京
投稿: 758
Re: PurchaseFlow\ProcessorのDeliveryFeeを高いの1個だけを選択
商品別送料を設定していなければ、そういった挙動にはならなかった気がするのですが...
とりあえず一番高いのだけという事であれば、 https://github.com/EC-CUBE/ec-cube/blob/24d3dde6b4289509d05e1697323757d014927fb4/src/Eccube/Service/PurchaseFlow/PurchaseFlow.php#L306 で商品毎に送料を足してるループで、それぞれ送料を比較してあげれば良いと思います。
PurchaseFlowのいじり方については、ちょうどこの前の東京ユーザグループの勉強会でやったので、見てみてください。
https://www.slideshare.net/chihiroadachi3/201927-eccubeugpurchaseflow-130874190?fbclid=IwAR0i9dn-CahYEpTGvWf2cBWEPSmOw5WAnP5EVM2QDzZI_sNBLBXNN4wLQ8Q

サンプルコード: https://github.com/chihiro-adachi/ec-cube/compare/ad03d2d0078f8347c0a8fae9acc1ced74bf6e967...demo-tokyo?fbclid=IwAR2oNfFG9ZhsYD6wyqChVy5pY8FOdCmFYqfVhFFOJZHBm7TeOM-3RQUeMOs


----------------
EC-CUBEカスタマイズ相談してください。
緊急のEC-CUBEの障害対応
EC-CUBEカスタマイズブログ

umebius
投稿日時: 2019/3/4 13:28
対応状況: −−−
登録日: 2016/7/22
居住地: 東京日本橋
投稿: 1296
Re: PurchaseFlow\ProcessorのDeliveryFeeを高いの1個だけを選択
NODOKA様

おっしゃっているのはお届け先が複数の場合に、それぞれの送料が合計されるということでしょうか?
それを最大の送料だけ有効にしたいと。

それでしたら色々と方法はありますが

src/Eccube/Service/PurchaseFlow/Processor/DeliveryFeePreprocessor.php のあたりで、どの配送(Shipping)が送料最大になるか判定して取捨選択すれば良いのではないかと思います。

どのShippingが都道府県別送料最大かは下記のようなコードでわかると思います。


        $max = null;
        $maxShipping = null;
        foreach ($Order->getShippings() as $Shipping) {
            /** @var DeliveryFee $DeliveryFee */
            $DeliveryFee = $this->deliveryFeeRepository->findOneBy([
                'Delivery' => $Shipping->getDelivery(),
                'Pref' => $Shipping->getPref(),
            ]);
            if (is_null($max) || $max < $DeliveryFee->getFee()) {
                $maxShipping =  $Shipping;
                $max =  $DeliveryFee->getFee();
            }
        }


----------------
EC-CUBE3系4系 カスタマイズ ECのプロがシステム特急案件承ります。
公式インテグレートパートナー (株)U-Mebius

NODOKA
投稿日時: 2019/3/6 16:14
対応状況: −−−
半人前
登録日: 2018/4/25
居住地:
投稿: 18
Re: PurchaseFlow\ProcessorのDeliveryFeeを高いの1個だけを選択
tao_s 様
早速のご返信ありがとうございます。

商品送料は設定していないのですが、商品種別を設定して異なる商品種別の商品でも同じカートに入るようにしました。その時に異なる種別の送料が合計されてしまうという状況です。
色々な情報をありがとうございます。参考にして、頑張ってみます。
NODOKA
投稿日時: 2019/3/6 16:22
対応状況: −−−
半人前
登録日: 2018/4/25
居住地:
投稿: 18
Re: PurchaseFlow\ProcessorのDeliveryFeeを高いの1個だけを選択
umebius 様

早速のご返信ありがとうございます。

教えて頂いたコードをはめてみたところ、カートのお届け先2の送料×個数という送料になってしまいました。お届け先2の方が安い送料でもそちらが選択されてしまうという状況です。

でもとても参考になりました。ありがとうございます。もう少し研究してみます。
NODOKA
投稿日時: 2019/3/12 16:04
対応状況: −−−
半人前
登録日: 2018/4/25
居住地:
投稿: 18
Re: PurchaseFlow\ProcessorのDeliveryFeeを高いの1個だけを選択
度々で申し訳ございません。
商品種別をA・Bを設定して、Aの送料、Bの送料を設定しています。商品種別の違う商品が一緒にカートに入るようにしてあります。
その時にお届け先1とお届け先2の送料が合計されてしまいます。
これを高いほうの送料だけ1個を選択したいのですが、わかりません。
せっかくのご返信を頂いたのですが、自分の力不足です。

分かる方いらっしゃいましたら、教えて頂けると助かります。

お届け先ごとの送料を合計している場所がよく分かりません。

よろしくお願いいたします。
umebius
投稿日時: 2019/3/12 18:32
対応状況: −−−
登録日: 2016/7/22
居住地: 東京日本橋
投稿: 1296
Re: PurchaseFlow\ProcessorのDeliveryFeeを高いの1個だけを選択
SaleTypeCartAllocatorを使って商品種別が違っても同時に購入できるようにしているということですかね?

上のコメントの件なのですが、
こんなコードで実現できませんか?


        /** @var Order $Order */
        $Order = $itemHolder;

  // どの配送が送料最大か判定するコード追加 ここから
        $max = null;
        $maxShipping = null;
        foreach ($Order->getShippings() as $Shipping) {
            /** @var DeliveryFee $DeliveryFee */
            $DeliveryFee = $this->deliveryFeeRepository->findOneBy([
                'Delivery' => $Shipping->getDelivery(),
                'Pref' => $Shipping->getPref(),
            ]);
            if (is_null($max) || $max < $DeliveryFee->getFee()) {
                $maxShipping =  $Shipping;
                $max =  $DeliveryFee->getFee();
            }
        }
  // どの配送が送料最大か判定するコード追加 ここまで

        /* @var Shipping $Shipping */
        foreach ($Order->getShippings() as $Shipping) {

            // 送料最大の配送以外はcontinueで戻すコード追加 ここから
            if ($maxShipping !== $Shipping) {
                continue;
            }
            // 送料最大の配送以外はcontinueで戻すコード追加 ここまで
            ....(中略)

         }


私の方では複数商品種別でも最大の送料だけが採用されているようです。


----------------
EC-CUBE3系4系 カスタマイズ ECのプロがシステム特急案件承ります。
公式インテグレートパートナー (株)U-Mebius

NODOKA
投稿日時: 2019/3/18 11:57
対応状況: −−−
半人前
登録日: 2018/4/25
居住地:
投稿: 18
Re: PurchaseFlow\ProcessorのDeliveryFeeを高いの1個だけを選択
umebius 様

ありがとうございます。

無事に出来ました!!本当に助かりました。ありがとうございます。

やりたい事ピンポイントでとても分かりやすかったです。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


ec-cube.co

統計情報

総メンバー数は46,475名です
総投稿数は92,302件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
nanasess
1904
4
468
1791
5
yuh
1594
6
red
1313
7
umebius
1296
8
fukap
907
9
tsuji
840
10
shutta
835
11 ramrun 789
12
tao_s
758
13
h_tanaka
748
14 karin 656
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
483
20 tonton 436


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© LOCKON CO.,LTD. All Rights Reserved.