バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 配送CSVをダウンロード後に受注ステータス変更したい

管理機能

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
h_tanaka
投稿日時: 2018/1/10 16:07
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1646
配送CSVをダウンロード後に受注ステータス変更したい
受注マスターにて配送CSVをダウンロード後に受注ステータスを変更するような処理を実装することは可能でしょうか?

OrderController の exportShipping() 内に実装することで、受注ステータスを変更すること自体はできました。
しかし、配送CSVをダウンロード後というタイミングで処理を実行する方法がわかりません。。

src/Eccube/Controller/Admin/Order/OrderController.php
    public function exportShipping(Application $app, Request $request)
    {
        // タイムアウトを無効にする.
        set_time_limit(0);

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

        // ★ 1.ここに処理を追加するとダウンロード前に実行される

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

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

            // ヘッダ行の出力.
            $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, $request) {

                $Csvs = $csvService->getCsvs();

                /** @var $Order \Eccube\Entity\Order */
                $Order = $entity;
                /** @var $Shippings \Eccube\Entity\Shipping[] */
                $Shippings = $Order->getShippings();

                foreach ($Shippings as $Shipping) {
                    /** @var $ShipmentItems \Eccube\Entity\ShipmentItem */
                    $ShipmentItems = $Shipping->getShipmentItems();
                    foreach ($ShipmentItems as $ShipmentItem) {
                        $ExportCsvRow = new \Eccube\Entity\ExportCsvRow();

                        // CSV出力項目と合致するデータを取得.
                        foreach ($Csvs as $Csv) {
                            // 受注データを検索.
                            $data = $csvService->getData($Csv, $Order);
                            $ExportCsvRow->setData('"' . $data . '"');
                            if (is_null($data)) {
                                // 配送情報を検索.
                                $data = $csvService->getData($Csv, $Shipping);
                                $ExportCsvRow->setData('"' . $data . '"');
                            }
                            if (is_null($data)) {
                                // 配送商品を検索.
                                $data = $csvService->getData($Csv, $ShipmentItem);
                                $ExportCsvRow->setData('"' . $data . '"');
                            }

                            $event = new EventArgs(
                                array(
                                    'csvService' => $csvService,
                                    'Csv' => $Csv,
                                    'ShipmentItem' => $ShipmentItem,
                                    'ExportCsvRow' => $ExportCsvRow,
                                    'data' => $data,
                                ),
                                $request
                            );
                            $app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_ORDER_CSV_EXPORT_SHIPPING, $event);

                            $ExportCsvRow->pushData();
                        }
                        //$row[] = number_format(memory_get_usage(true));
                        // 出力.
                        $csvService->fputcsv($ExportCsvRow->getRow());
                    }
                }

                // ★ 2.ここに処理を追加するとCSVの行ごとに実行される

            });

            // ★ 3.ここに処理を追加するとダウンロードと同時に実行される

        });

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

        log_info('配送CSV出力ファイル名', array($filename));

        return $response;
    }


src/Eccube/Service/CsvExportService.php
    public function exportData(\Closure $closure)
    {
        if (is_null($this->qb) || is_null($this->em)) {
            throw new \LogicException('query builder not set.');
        }

        $this->fopen();

        $query = $this->qb->getQuery();
        foreach ($query->getResult() as $iteratableResult) {
            $closure($iteratableResult, $this);
            $this->em->detach($iteratableResult);
            $query->free();
            flush();
        }

        $this->fclose();

        // ★ 4.ここに処理を追加すると次のエラー
        // ORMInvalidArgumentException
        // A new entity was found through the relationship 'Eccube¥Entity¥Shipping#Order'
        // that was not configured to cascade persist operations for entity: 
        // Eccube¥Entity¥Order@0000000008fb260f0000000002daf930.
        // To solve this issue: Either explicitly call EntityManager#persist()
        // on this unknown entity or configure cascade persist  this association in the mapping for example @ManyToOne(..
        // cascade={"persist"}). If you cannot find out which entity causes the problem implement 'Eccube¥Entity¥Order#__toString()' to get a clue.
        // at EntityManager->flush() in /usr/home/fa2002002/html/src/Eccube/Repository/OrderRepository.php line 64

    }


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

フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
 » 配送CSVをダウンロード後に受注ステータス変更したい h_tanaka 2018/1/10 16:07
     Re: 配送CSVをダウンロード後に受注ステータス変更したい tsuji 2018/1/11 11:14
       Re: 配送CSVをダウンロード後に受注ステータス変更したい h_tanaka 2018/1/11 11:22
         Re: 配送CSVをダウンロード後に受注ステータス変更したい tsuji 2018/1/11 11:44
           Re: 配送CSVをダウンロード後に受注ステータス変更したい h_tanaka 2018/1/18 10:47
             Re: 配送CSVをダウンロード後に受注ステータス変更したい tsuji 2018/1/25 13:41
               Re: 配送CSVをダウンロード後に受注ステータス変更したい h_tanaka 2018/1/25 17:30

 



ログイン


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

統計情報

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

投稿数ランキング

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.