バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

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

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2018/11/28 11:26
対応状況: 解決済
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1646
ヤマト決済プラグインを入れると受注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
居住地: 愛媛県
投稿: 1646
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公式 Amazon Payプラグイン

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1291
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.