バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 会員種別ごとに利用できる決済を切り替える

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
shiftbank
投稿日時: 2020/9/25 11:51
対応状況: −−−
新米
登録日: 2018/6/29
居住地:
投稿: 10
会員種別ごとに利用できる決済を切り替える
[EC-CUBE] 4.0.4 新規インストール
[OS] linux
[PHP] 7.3
[データベース] MySQL
[WEBサーバ] Apache
[導入プラグインの有無] なし
[カスタマイズの有無] 会員情報に会員種別カラムを追加(整数型)

[前置き]
EC-CUBE3までの開発経験もなく、ECの構築自体が初です。
そもそもの設計が間違っていたらご指摘いただけるとありがたいです。

[実装したいこと]
レジ画面(/shopping)にて表示されるプルダウン "配送方法" の選択肢を独自のルールで操作したい。

独自のルールとは会員の種別によって切り分けることなので、まずは Customize\Entity\CustomerTraitを作成し、アノテーションを利用してuser_typeを作成しました。

種別としては "一般", "売掛" としています。


    /**
    * @ORM\Column(type="integer", nullable=true, name="user_type", length=3)
    * @Assert\NotBlank(message="会員種別を選択してください。")
    * @Eccube\FormAppend(
    *   auto_render=true,
    *  type="Symfony\Component\Form\Extension\Core\Type\ChoiceType",
    *   options={
    *       "required": false,
    *       "label": "ユーザー種別",
    *       "choices":{
    *           "一般": 1,
    *           "売掛": 2,
    *       },
    *   },
    * )
    */
    public $user_type;


このカラムを利用して、"一般"ユーザーと"売掛"ユーザーで別々の決済方法を選ばせたいと思っております。

決済方法は配送方法に紐づいているようなので、
 配送方法①に"クレジットカード", "銀行振込"
 配送方法②に"請求書払い"...等と設定しておき、

一般ユーザーは請求書払いさせたくないので、配送方法を①のみに限定、
売掛ユーザーは請求書払いで統一したいので、配送方法を②のみに限定すれば、結果的にユーザーごとに利用できる支払い方法を限定できるのではと考えております。

要するに、レジ画面で吐き出される配送方法のプルダウンに、ユーザーデータに応じてフィルターをかけたいということになります。

[わからないこと]
上記のカスタム処理をどこに書けばいいのかがわかりません。

src/Eccube/Form/Type/Shopping/OrderType.php にて次の記述を見つけました。


    private function filterPayments(ArrayCollection $Payments, $total)
    {
        $PaymentArrays = $Payments->filter(function (Payment $Payment) use ($total) {
            $min = $Payment->getRuleMin();
            $max = $Payment->getRuleMax();

            if (null !== $min && $total < $min) {
                return false;
            }

            if (null !== $max && $total > $max) {
                return false;
            }

            return true;
        })->toArray();
        usort($PaymentArrays, function (Payment $a, Payment $b) {
            return $a->getSortNo() < $b->getSortNo() ? 1 : -1;
        });

        return $PaymentArrays;
    }

これを参考に、ArrayCollection::filterPaymentsと、ログイン中のユーザー情報を利用すれば、配送方法の切り分けができるのではと思いました。

先述のsrc/Eccube/Form/Type/Shopping/OrderType.phpや
src/Eccube/Controller/ShoppingController.php で行われている処理を一部変更できればと思ったのですが、どちらもsrc内にあるため、このソースを変更せずに新たなArrayCollection::filterPaymentを処理中に追加することができません。

src外からこの辺りの処理に介入する方法はありますでしょうか?
umebius
投稿日時: 2020/9/25 23:15
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: 会員種別ごとに利用できる決済を切り替える
src/Eccube/Controller/ShoppingController.php
ルーティングを上書きするか、フックポイント等イベントを使って介入するかでしょうか。
https://doc4.ec-cube.net/customize_controller


src/Eccube/Form/Type/Shopping/OrderType.php
支払方法や配送方法の制御は結構大変ですが、FormExtensionかクラス全体差し替えで対応できないことはないですね。
https://doc4.ec-cube.net/customize_formtype


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

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

shiftbank
投稿日時: 2020/10/1 17:05
対応状況: 解決済
新米
登録日: 2018/6/29
居住地:
投稿: 10
Re: 会員種別ごとに利用できる決済を切り替える
お礼が遅くなり申し訳ないです。
ご回答ありがとうございます。

FormExtensionという物があるのに気付きませんでした。
教えていただいたリンクを参考に構築して、とりあえず配送方法と会員種別を連携させることができました。

app/Customize/Form/Extension/CustomizeShippingType.phpにてbuildFormメソッドの一部を次のようにオーバーライドすることで実現できましたので、ここに報告いたします。


...

// 販売種別に紐づく配送業者を取得.
$Deliveries = $this->deliveryRepository->getDeliveries($SaleTypes);

foreach ($Deliveries as $key => $Delivery) {
    if (!self::canAddDelivery($Delivery)) {
        unset($Deliveries[$key]);
    }
}

// 配送業者のプルダウンにセット.
$form = $event->getForm();

...

private function canAddDelivery($Delivery) {
    //渡された$Deliveryがログイン中のユーザが利用できる配送方法であれば真を返す
}



ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
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.