バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > EC-CUBE3 帳票出力プラグインのカスタマイズ

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
foolish
投稿日時: 2018/11/8 17:10
対応状況: −−−
新米
登録日: 2018/3/30
居住地:
投稿: 10
EC-CUBE3 帳票出力プラグインのカスタマイズ
▼テンプレート
[EC-CUBE] EC-CUBE3.0.10
[PHP] 5.6.34
[データベース] MySQL 5.6.36
[WEBサーバ] Apache
[導入プラグインの有無] 帳票出力プラグイン
[現象]
お世話になっております。
現在帳票出力プラグインのカスタマイズをしております。
実現したい事としては、商品マスタに登録されている商品を帳票に全て表示しておいて、注文があった商品はその商品名の横に注文数と小計を表示させたいです。
ソースとしては「app/Plugin/OrderPdf/Service/OrderPdfService.php」を主に書き換えています。
帳票の項目としては商品名、単価、個数、金額の4つがあり商品名と単価の項目にはそれぞれ登録されている商品名と単価を表示させることは出来たのですが、個数と金額のセルが空白になっています。
自分のイメージとしては、Order->getOrderDetails()から各エンティティを引っ張ってきてgetProductName()で注文商品名を取得した後に、商品マスタの全ての名前と比較して、帳票のその商品名が書かれた行に注文数と金額を出力する様なものですが、比較した後にその行を特定する方法が分かりません。
何かヒントでもいいのでお力を貸して頂けないでしょうか。
以上、よろしくお願いします。
minori
投稿日時: 2018/11/9 16:47
対応状況: −−−
常連
登録日: 2017/10/12
居住地:
投稿: 38
Re: EC-CUBE3 帳票出力プラグインのカスタマイズ
方法としてはいくつかあると思いますが、
まず受注明細をループして各商品の数量を計算しておいて、
その後商品の情報をループするときに、
一致する商品があるかどうか判別してみてはどうでしょうか。

動作検証まではしていませんが、
実装としては以下のようなイメージです。

$OrderDetails = $Order->getOrderDetails();
$orderProducts = [];

foreach ($OrderDetails as $OrderDetail) {
    /* @var $OrderDetail \Eccube\Entity\OrderDetail */
    $id = $OrderDetail->getProductClass()->getId();
    // 商品規格IDごとの数量を計算
    $orderProducts[$id] += $OrderDetail->getQuantity();
}

// 全商品取得(商品規格ごと)
$ProductClasses = $app['eccube.repository.product_class']->findAll();
/* @var $ProductClass \Eccube\Entity\ProductClass */
foreach ($ProductClasses as $ProductClass) {
    // 配列の中に該当のIDが存在するかチェック
    if (array_key_exists($ProductClass->getId(), $orderProducts)) {
        // 個数
        $quantity = $orderProducts[$ProductClass->getId()];
         // 数量 * 単価
        $price = $quantity * $tanka;
    }
    
    // ★帳票へ出力(商品名、単価、個数、金額)
}

foolish
投稿日時: 2018/11/10 14:50
対応状況: −−−
新米
登録日: 2018/3/30
居住地:
投稿: 10
Re: EC-CUBE3 帳票出力プラグインのカスタマイズ
minori様
ご回答頂きありがとうございます。
上記のアドバイスを頂き試してみたのですが、この方法だと商品名と単価の順番が変わってしまいませんか?
自分の説明不足で大変申し訳無いのですが、先に帳票に表示されている商品名と単価の順番は固定にしたいです。
イメージとしてはこんな感じで、注文があった商品のセルだけに個数と金額が表示されるという感じです。
https://d.kuku.lu/5586281b80
(画像のリンクが切れていたらすみません。)
minori
投稿日時: 2018/11/12 10:58
対応状況: −−−
常連
登録日: 2017/10/12
居住地:
投稿: 38
Re: EC-CUBE3 帳票出力プラグインのカスタマイズ
説明がわかりにくくて申し訳ありません。

商品名と単価の項目にはそれぞれ登録されている値が表示できた
ということでしたので、それを表示するために商品情報をループしている
箇所があると思います。
※おそらくrenderOrderDetailDataメソッドをカスタマイズされていると思います

そのループ処理の中に、個数・金額の計算処理を入れて
setFancyTableメソッドで一気に帳票に出力する想定でおりました。

簡略化していますが以下のようなイメージです。
foreach ($OrderDetails as $OrderDetail) {
  // ★商品の数量計算
}

// ◇商品情報取得
$ProductClasses = hoge();
foreach ($ProductClasses as $ProductClass) {
    $arrOrder[$i][0] = 商品名 // ◇商品情報の商品名
    $arrOrder[$i][1] = 数量 // ★受注明細から計算しておいた数量
    $arrOrder[$i][2] = 単価 // ◇商品情報の単価
    $arrOrder[$i][3] = 金額 // ★単価×数量
}

// 小計情報設定

// PDFに設定する
$this->setFancyTable($this->labelCell, $arrOrder, $this->widthCell);


もし上記修正では難しいようであれば、
・商品取得時に同じソート順を設定して必ず同じ順番で取得出来る状態にしておく
・最初に商品情報を取得した際にキーになる値を配列に入れておき、その後単価・金額を出力する際に配列をループし受注情報と比較する
などの対策が考えられると思います。
foolish
投稿日時: 2018/11/14 9:45
対応状況: 解決済
新米
登録日: 2018/3/30
居住地:
投稿: 10
Re: EC-CUBE3 帳票出力プラグインのカスタマイズ
minori様
ご返信頂きありがとうございます。
頂いたアドバイスを元に、
商品マスタの並びを操作して配列に格納した後に、setFanceTableメソッドにてキーをインデックスから商品名に変更してみたところ、希望通りの実装が出来ました。
この度は相談に乗っていただき、ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

統計情報

総メンバー数は35,016名です
総投稿数は88,157件です

投稿数ランキング

1
seasoft
7331
2
AMUAMU
2712
3
nanasess
1833
4
yuh
1521
5
468
1287
6
red
1186
7
umebius
1007
8
fukap
907
9
shutta
827
10
tsuji
815
11 ramrun 789
12
tao_s
667
13 karin 656
14 sumida 641
15
homan
633
16
h_tanaka
587
17 DELIGHT 571
18
patapata
502
19
flealog
483
20 tonton 436


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© LOCKON CO.,LTD. All Rights Reserved.