質問 > 管理機能 > 配送CSVで出力したときに、1受注1レコードで出力したい |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
toku |
投稿日時: 2020/4/14 17:29
対応状況: −−−
|
新米 登録日: 2020/4/14 居住地: 投稿: 5 |
配送CSVで出力したときに、1受注1レコードで出力したい ▼
[EC-CUBE] EC-CUBE 4.0.3 新規インストール [レンタルサーバ] さくらレンタルサーバ [Perl] 5.14.4 [PHP] 7.2.28 (CGI) [データベース] MySQL 5.7 [WEBサーバ] Apache/2.4.41 [問い合わせ内容] 初めてEC-CUBEを使って構築しています。 配送CSVで受注を出力した場合、明細単位でCSVのレコードが作成されますが、 送り状を印刷するためのデータとして利用するには不要な行を削除しないといけません。 1受注に対して1明細行で出力するようにするには、どうすればいいでしょうか? ただし、他のCSV出力は明細を使用するので、 影響がでないようにしたいです。 おわかりなる方、教えてください。 |
468 |
投稿日時: 2020/4/16 11:22
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 配送CSVで出力したときに、1受注1レコードで出力したい 受注CSVと配送CSVの出力処理は
/src/Eccube/Controller/Admin/Order/OrderController.phpの function exportCsv()に記述されております。 CSV出力の流れを確認していくとURLから繋がる2つのアクション function exportOrder()と function exportShipping()がそれぞれ定義されているのですが 最終的に$this->exportCsv()という形でfunction exportCsv()を呼び出しているようです。 (ECCUBE4ではCSV出力処理が共通化されています) その為、配送CSVのみ形態を変えたい場合、 function exportCsv()内部で判定を追加して処理を分岐させる、 function exportCsv()をコピーして配送CSV用のfunctionを新しく追記するといった形が考えられます。 function exportCsv()の動きを簡単に解説すると
の間が受注データの件数分ループされます。 ループ内に以下のような記述がありますが
ここで受注毎の受注明細を取得し、さらに受注明細分ループしています。 2回目(受注明細)のループ内でCSV1行分のデータを作っています。 $ExportCsvRow = new ExportCsvRow(); => 新しい行を追加 $csvService->fputcsv($ExportCsvRow->getRow()); => 1行分のデータの書き出し よって明細単位でCSVが出力されています。 この2回目のループを排除する事で受注単位でのCSV出力に変更する事が出来ます。 ただ2回目のループを排除した場合、以下の記述で取得している 出荷データ(配送先)を取得できなくなりますので $Shipping = $OrderItem->getShipping() $Orderから出荷データを取得するように変更する必要があります。 この辺りはEntityのリレーションを理解していないと難しいかもしれません。 あと、出荷先を複数に分けているような(分納)注文については 単純に受注単位でのCSV出力を行った場合、 正しい配送先と梱包すべき商品が分からなくなると思います。(CSVに商品情報が出力されなくなる為) その為、配送CSVも受注明細単位で出力されていると思います。
|
toku |
投稿日時: 2020/4/16 16:20
対応状況: −−−
|
新米 登録日: 2020/4/14 居住地: 投稿: 5 |
Re: 配送CSVで出力したときに、1受注1レコードで出力したい 468様
回答ありがとうございました。 初心者には難しいですね。 余り予算もないので、できれば自分で何とかしたかったのですが、 時間もかかりそうですし、何より動かなくなると困るので 自分でするのは諦めます。 有料プラグインもあるようなので、 そちらを検討してみます。 ありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |