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の機能やデザインのカスタマイズ承ります。