バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

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

その他

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
NODOKA
投稿日時: 2019/3/18 11:57
対応状況: −−−
常連
登録日: 2018/4/25
居住地:
投稿: 31
Re: PurchaseFlow\ProcessorのDeliveryFeeを高いの1個だけを選択
umebius 様

ありがとうございます。

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

やりたい事ピンポイントでとても分かりやすかったです。
umebius
投稿日時: 2019/3/12 18:32
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
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-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

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

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

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

よろしくお願いいたします。
NODOKA
投稿日時: 2019/3/6 16:22
対応状況: −−−
常連
登録日: 2018/4/25
居住地:
投稿: 31
Re: PurchaseFlow\ProcessorのDeliveryFeeを高いの1個だけを選択
umebius 様

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

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

でもとても参考になりました。ありがとうございます。もう少し研究してみます。
NODOKA
投稿日時: 2019/3/6 16:14
対応状況: −−−
常連
登録日: 2018/4/25
居住地:
投稿: 31
Re: PurchaseFlow\ProcessorのDeliveryFeeを高いの1個だけを選択
tao_s 様
早速のご返信ありがとうございます。

商品送料は設定していないのですが、商品種別を設定して異なる商品種別の商品でも同じカートに入るようにしました。その時に異なる種別の送料が合計されてしまうという状況です。
色々な情報をありがとうございます。参考にして、頑張ってみます。
umebius
投稿日時: 2019/3/4 13:28
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
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-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

tao_s
投稿日時: 2019/3/4 12:43
対応状況: −−−
仙人
登録日: 2008/8/20
居住地: 東京
投稿: 796
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カスタマイズブログ

NODOKA
投稿日時: 2019/3/2 21:41
対応状況: 解決済
常連
登録日: 2018/4/25
居住地:
投稿: 31
PurchaseFlow\ProcessorのDeliveryFeeを高いの1個だけを選択
▼テンプレート
[EC-CUBE] 4.1
[レンタルサーバ] XAMPP
[OS] Win10
[PHP] 7.1
[導入プラグインの有無] 無し
[カスタマイズの有無] 無し
[現象]
PurchaseFlow\Processorの中でDeliveryFeeが都道府県別送だと思うのですが、商品が2個以上カートに入った時にそれぞれの送料が合計されてしまうので、一番高い都道府県別送料1個だけを適用したいのですが、方法がわかりません。教えて頂けると助かります。商品別送料は設定しておりません。お手数ですがよろしくお願いいたします。
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,286名です
総投稿数は109,688件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

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

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.