バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > ヤマト決済プラグインを入れると受注CSVで商品オプションプラグインの情報が出力されない

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2018/11/28 11:26
対応状況: 解決済
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 637
ヤマト決済プラグインを入れると受注CSVで商品オプションプラグインの情報が出力されない
EC-CUBE3.0.16
クロネコヤマト カード・後払い一体型決済サービス(3系) 1.1.0

ヤマト決済プラグインを入れると受注CSVで商品オプションプラグインの情報が出力されなくなりました。

原因は、ヤマト決済プラグインで関数をオーバーライドしているためです。

ヤマト決済プラグインを活かしたまま商品オプションプラグインの情報を出力するために、ヤマト決済プラグインの関数内に商品オプションプラグインの処理をコピーしてきたのですが、Entity の判定がうまくいきません。
下にカスタマイズしたソースを記載していますが、$csvEntityName を echo で出力したところ、「Plugin¥ProductOption¥Entity¥OrderDetail」が入っていました。
if文では「Plugin\ProductOption\Entity\OrderDetail」で判定しており、¥(円マーク)と\(バックスラッシュ)が異なるためでしょうか。

app/Plugin/YamatoPayment/Controller/Admin/OrderControllerExtension.php
    public function exportOrder(Application $app, Request $request)
    {
        // タイムアウトを無効にする.
        set_time_limit(0);

        // sql loggerを無効にする.
        $em = $app['orm.em'];
        $em->getConfiguration()->setSQLLogger(null);

        $response = new StreamedResponse();
        $response->setCallback(function () use ($app, $request) {

            // CSV種別を元に初期化.
            $app['eccube.service.csv.export']->initCsvType(CsvType::CSV_TYPE_ORDER);

            // ヘッダ行の出力.
            $app['eccube.service.csv.export']->exportHeader();

            // 受注データ検索用のクエリビルダを取得.
            $qb = $app['eccube.service.csv.export']
                ->getOrderQueryBuilder($request);

            // データ行の出力.
            $app['eccube.service.csv.export']->setExportQueryBuilder($qb);
            $app['eccube.service.csv.export']->exportData(function ($entity, $csvService) use ($app){
                /** @var CsvExportService $csvService  */
                $Csvs = $csvService->getCsvs();

                /** @var Order $Order */
                $Order = $entity;
                $OrderDetails = $Order->getOrderDetails();

                //---------ヤマト決済プラグイン START---------
                $YamatoOrderScheduledShippingDate = $app['yamato_payment.repository.yamato_order_scheduled_shipping_date']->find($Order->getId());
                //---------ヤマト決済プラグイン E N D---------

                foreach ($OrderDetails as $OrderDetail) {
                    $row = array();

                    // CSV出力項目と合致するデータを取得.
                    foreach ($Csvs as $Csv) {
                        // 受注データを検索.
                        $data = $csvService->getData($Csv, $Order);
                        if (is_null($data)) {
                            // 受注データにない場合は, 受注明細を検索.
                            $data = $csvService->getData($Csv, $OrderDetail);
                            //---------ヤマト決済プラグイン START---------
                            if (is_null($data)) {
                                $data = $csvService->getData($Csv, $YamatoOrderScheduledShippingDate);
                            }
                            //---------ヤマト決済プラグイン E N D---------
                        }

                        // ★ add 商品オプションプラグイン ▼
                        if (is_null($data)) {
                            $csvEntityName = str_replace('\\\\', '\\', $Csv->getEntityName());
                            if($csvEntityName == 'Plugin\ProductOption\Entity\OrderDetail'){    // ★ ここの判定がうまくいっていない
                                $data = '';
                                if(!is_null($Csv->getReferenceFieldName())){
                                    $optionId = $Csv->getReferenceFieldName();
                                    $plgOrderDetail = $app['eccube.productoption.repository.order_detail']->findOneBy(array('order_detail_id' => $OrderDetail->getId()));
                                    if($plgOrderDetail){
                                        $OrderOptionItems = $plgOrderDetail->getOrderOption()->getOrderOptionItems();
                                        foreach($OrderOptionItems as $OrderOptionItem){
                                            if($optionId == $OrderOptionItem->getOptionId()){
                                                $data = $OrderOptionItem->getOptionCategoryName();
                                                break;
                                            }
                                        }
                                    }
                                }else{
                                    $plgOrderDetail = $app['eccube.productoption.repository.order_detail']->findOneBy(array('order_detail_id' => $OrderDetail->getId()));
                                    if($plgOrderDetail){
                                        $data = implode($app['config']['csv_export_multidata_separator'],$plgOrderDetail->getOrderOption()->getLabel());
                                    }
                                }
                            }
                        }
                        // ★ add 商品オプションプラグイン ▲

                        $row[] = $data;

                    }

                    // 出力.
                    $csvService->fputcsv($row);
                }
            });
        });

        $now = new \DateTime();
        $filename = 'order_' . $now->format('YmdHis') . '.csv';
        $response->headers->set('Content-Type', 'application/octet-stream');
        $response->headers->set('Content-Disposition', 'attachment; filename=' . $filename);
        $response->send();

        return $response;
    }


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

h_tanaka
投稿日時: 2018/11/29 16:43
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 637
Re: ヤマト決済プラグインを入れると受注CSVで商品オプションプラグインの情報が出力されない
自己解決しました。

上記の方法でうまくいかなかったため、独自に実装しました。

app/Plugin/YamatoPayment/Controller/Admin/OrderControllerExtension.php
    public function exportOrder(Application $app, Request $request)
    {
        // タイムアウトを無効にする.
        set_time_limit(0);

        // sql loggerを無効にする.
        $em = $app['orm.em'];
        $em->getConfiguration()->setSQLLogger(null);

        $response = new StreamedResponse();
        $response->setCallback(function () use ($app, $request) {

            // CSV種別を元に初期化.
            $app['eccube.service.csv.export']->initCsvType(CsvType::CSV_TYPE_ORDER);

            // ヘッダ行の出力.
            $app['eccube.service.csv.export']->exportHeader();

            // 受注データ検索用のクエリビルダを取得.
            $qb = $app['eccube.service.csv.export']
                ->getOrderQueryBuilder($request);

            // データ行の出力.
            $app['eccube.service.csv.export']->setExportQueryBuilder($qb);
            $app['eccube.service.csv.export']->exportData(function ($entity, $csvService) use ($app){
                /** @var CsvExportService $csvService  */
                $Csvs = $csvService->getCsvs();

                /** @var Order $Order */
                $Order = $entity;
                $OrderDetails = $Order->getOrderDetails();

                //---------ヤマト決済プラグイン START---------
                $YamatoOrderScheduledShippingDate = $app['yamato_payment.repository.yamato_order_scheduled_shipping_date']->find($Order->getId());
                //---------ヤマト決済プラグイン E N D---------

                foreach ($OrderDetails as $OrderDetail) {
                    $row = array();

                    // CSV出力項目と合致するデータを取得.
                    foreach ($Csvs as $Csv) {
                        // 受注データを検索.
                        $data = $csvService->getData($Csv, $Order);
                        if (is_null($data)) {
                            // 受注データにない場合は, 受注明細を検索.
                            $data = $csvService->getData($Csv, $OrderDetail);
                            //---------ヤマト決済プラグイン START---------
                            if (is_null($data)) {
                                $data = $csvService->getData($Csv, $YamatoOrderScheduledShippingDate);
                            }
                            //---------ヤマト決済プラグイン E N D---------
                        }

                        // ★ add 商品オプションプラグイン ▼
                        if (is_null($data)) {
                            $optionId = $Csv->getReferenceFieldName();
                            $plgOrderDetail = $app['eccube.productoption.repository.order_detail']->findOneBy(array('order_detail_id' => $OrderDetail->getId()));
                            if($plgOrderDetail){
                                $OrderOptionItems = $plgOrderDetail->getOrderOption()->getOrderOptionItems();
                                foreach($OrderOptionItems as $OrderOptionItem){
                                    if($optionId == $OrderOptionItem->getOptionId()){
                                        $data = $OrderOptionItem->getOptionCategoryName();
                                        break;
                                    }
                                }
                            }
                        }
                        // ★ add 商品オプションプラグイン ▲

                        $row[] = $data;

                    }

                    // 出力.
                    $csvService->fputcsv($row);
                }
            });
        });

        $now = new \DateTime();
        $filename = 'order_' . $now->format('YmdHis') . '.csv';
        $response->headers->set('Content-Type', 'application/octet-stream');
        $response->headers->set('Content-Disposition', 'attachment; filename=' . $filename);
        $response->send();

        return $response;
    }


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

統計情報

総メンバー数は36,321名です
総投稿数は88,544件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
nanasess
1856
4
yuh
1524
5
468
1315
6
red
1199
7
umebius
1007
8
fukap
907
9
shutta
827
10
tsuji
815
11 ramrun 789
12
tao_s
667
13 karin 656
14 sumida 641
15
h_tanaka
637
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
483
20 tonton 436


ネットショップの壺

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

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