バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

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

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
shiftbank
投稿日時: 2020/9/25 11:51
対応状況: −−−
新米
登録日: 2018/6/29
居住地:
投稿: 7
会員種別ごとに利用できる決済を切り替える
[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
居住地: 東京日本橋
投稿: 1742
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-CUBE4系 カスタマイズ ECのプロがシステム特急案件承ります。
EC-CUBE開発 リモートで働くエンジニア募集中

shiftbank
投稿日時: 2020/10/1 17:05
対応状況: 解決済
新米
登録日: 2018/6/29
居住地:
投稿: 7
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ペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は66,433名です
総投稿数は98,294件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
468
2643
4
nanasess
2103
5
umebius
1742
6
yuh
1612
7
red
1424
8
h_tanaka
1041
9
fukap
907
10
tsuji
863
11
shutta
835
12
tao_s
792
13 ramrun 789
14 karin 657
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

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

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