ググらずには前へ進めないフロントエンドエンジニアが書く、次はググらなくてもできますように…とメモを残すブログです!

EC-CUBE 3系 受注CSVに利用ポイントと加算ポイントを掲載する

2018/05/15
⚠️投稿日または最終更新日から4年以上経過している内容です。

EC-CUBE 3.0.16 でカスタマイズしています。

受注CSVに利用ポイントと加算ポイントを追加しました。

カスタマイズ方法としては、

  1. dtb_csv に利用ポイントと加算ポイントを挿入
  2. プログラムに処理を追加 です。

3系になってからは、標準項目の追加なら、DBに値を追加するだけで出力してくれるので非常に便利でした。

ただプラグインの場合はそのプラグインがCSVの処理を入れてない場合 1. だけでは出力できないので、 プログラム側にカスタマイズが必要でした。

そこで今回は苦戦しました。またあまり正しくない方法で取り急ぎの対応…になります。

ググってみると、

まずは、1. dtb_csv に利用ポイントと加算ポイントを挿入を実行。

SQLでサクッと行います。

sqlコマンド
INSERT INTO `dtb_csv` (`csv_id`, `csv_type`, `creator_id`, `entity_name`, `field_name`, `reference_field_name`, `disp_name`, `rank`, `enable_flg`, `create_date`, `update_date`) VALUES (NULL, '3', '1', 'Plugin\\Point\\Entity\\Point', 'point', 'use', '利用ポイント', '', '1', '', '');
INSERT INTO `dtb_csv` (`csv_id`, `csv_type`, `creator_id`, `entity_name`, `field_name`, `reference_field_name`, `disp_name`, `rank`, `enable_flg`, `create_date`, `update_date`) VALUES (NULL, '3', '1', 'Plugin\\Point\\Entity\\Point', 'point', 'add', '加算ポイント', '', '1', '', '');

entity_name は恐らく 'Plugin\Point\Entity\Point' であっていると思いますが、field_namereference_field_name とはダミーになります。

↑は、'Plugin\Point\Entity\Point' で定義されているファイルの中の変数を入れると思いますが、 適切なものが見当たりませんでしたので… この辺アドバイスされたい…(>_<)

次に、2. プログラムに処理を追加

本来は新たに処理用のプラグインを作るようですが、今回は取り急ぎのため本体コードを編集します。

/src/Eccube/Controller/Admin/Order/OrderController.php が、 管理画面の受注画面をコントロールしているファイルになります。

exportOrder関数の中の、だいたい260行目に $event = new EventArgs( とあるので、その上に下記を追記します。

php/src/Eccube/Controller/Admin/Order/OrderController.php
$Customer = $Order->getCustomer();

// 会員のみ処理
if ($Customer) {
    if ($Csv->getDispName() === '利用ポイント') {
        // 利用ポイント取得
        $usePoint = $app['eccube.plugin.point.repository.point']->getLatestUsePoint($Order);
        $usePoint = abs($usePoint);
        $ExportCsvRow->setData($usePoint);
    }
    if ($Csv->getDispName() === '加算ポイント') {
        // 加算ポイント取得
        $addPoint = $app['eccube.plugin.point.repository.point']->getLatestAddPointByOrder($Order);
        $ExportCsvRow->setData($addPoint);
    }
} else {
    if ($Csv->getDispName() === '利用ポイント') {
        // $ExportCsvRow->setData(0);
    }
    if ($Csv->getDispName() === '加算ポイント') {
        // $ExportCsvRow->setData(0);
    }
}

まず会員であるかをチェックして、非会員の場合は空欄(場合によっては0を出力してもよいかも)にしています。 非会員でも加算ポイントを取得しようとするとエラーが出るので会員チェックは重要です。

次に 'eccube.plugin.point.repository.point' でポイントのリポジトリにアクセスできるので、 用意されている関数に $Order を渡すと利用ポイント取得、加算ポイント取得が取得できます。

取得できたポイントを $Csv->getDispName() が '利用ポイント' と '加算ポイント' との時に、 CSVにセットする、という感じになっています。

配送CSVも同じ作業でできました。

以上ですが、冒頭にも言いましたがこれは良い方法でないので、 参考程度が良いかと思います。

それにしてもSymfonyとSilexを勉強しないとついていけませんね...。