2023.12.26
税抜きに限らず、テーブルにそのまま存在しないデータをCSVに吐きたいという記事です。
2024/11/06 明らかに酷い実装をしていたので修正しました。すみません。
まず、「dtb_csv」に「税抜き」の行を追加するためにマイグレーションを作成します。
1 | php bin/console doctrine:migrations:generate |
「app\DoctrineMigrations」に「Version現在日時.php」のようなファイルが生成されますので、
生成されたファイルの public function up(Schema $schema): void の部分にSQLを書きます。
1 2 3 4 5 6 7 8 9 10 | public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs $sql = <<<SQL INSERT INTO dtb_csv VALUES (null, 3, null, 'Eccube\\\\Entity\\\\OrderItem', 'price', null, '税抜き', 72, 1, NOW(), NOW(), 'csv'); SQL; $this->addSql($sql); } |
Entityの部分はそこから値を取らないので何でもいいですが、(作りを見ればそれはそうなのですが)NULL不可なので何か入れておきます。
マイグレーションを実行します。
1 | php bin/console doctrine:migrations:migrate |
税抜きの行が追加されました。コマンドを打ってyesかnoか聞かれたらyesでいいです。
管理画面の「店舗設定>CSV出力項目設定>受注CSV」を見ると「出力する項目」の一番下に「税抜き」があると思います。
「app\Customize\Controller\Admin\Order\OrderController.php」を作成します。(既に存在したらそれを編集します)
その中の protected function exportCsv(Request $request, $csvTypeId, $fileName) の中の
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | // CSV出力項目と合致するデータを取得. foreach ($Csvs as $Csv) { if($Csv->getDispName() == "税抜き"){ //その行が最初から税抜きだったらそのまま、税込みだったら税率で割る if($OrderItem->getTaxDisplayType()->getId() == TaxDisplayType::INCLUDED){ //10を110にしてから100で割ることで1.1にしている $ExportCsvRow->setData($OrderItem->getPrice() / ((100 + $OrderItem->getTaxRate()) / 100)); }else{ $ExportCsvRow->setData($OrderItem->getPrice()); } }else{ // 受注データを検索. $ExportCsvRow->setData($csvService->getData($Csv, $Order)); if ($ExportCsvRow->isDataNull()) { // 受注データにない場合は, 受注明細を検索. $ExportCsvRow->setData($csvService->getData($Csv, $OrderItem)); } if ($ExportCsvRow->isDataNull() && $Shipping = $OrderItem->getShipping()) { // 受注明細データにない場合は, 出荷を検索. $ExportCsvRow->setData($csvService->getData($Csv, $Shipping)); } } $event = new EventArgs( [ 'csvService' => $csvService, 'Csv' => $Csv, 'OrderItem' => $OrderItem, 'ExportCsvRow' => $ExportCsvRow, ], $request ); $this->eventDispatcher->dispatch($event, EccubeEvents::ADMIN_ORDER_CSV_EXPORT_ORDER); $ExportCsvRow->pushData(); } |
触ったのは if($Csv->getDispName() == "税抜き"){ のifで括ってある所だけです。
税抜きに限らず、どんな内容でもこの方法で好きな内容をCSVに吐き出すことが可能です。