バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 売上集計の円グラフが表示されない場合がある

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
Rights
投稿日時: 2020/5/14 21:56
対応状況: 解決済
常連
登録日: 2019/3/12
居住地:
投稿: 49
売上集計の円グラフが表示されない場合がある
[EC-CUBE]2.13.5

売上集計の期間別集計で時分まで指定するようにカスタマイズしましたが、商品別集計の円グラフが表示されません。

集計結果の一覧は、検索条件の通り表示されます。

円グラフ出力に渡すデータ配列は、カスタマイズ前と後で比較してみましたが、同じデータを渡しています。

lfSetStartEndDateの開始日($sdate)と最終日($edate)の部分に、時分秒を加えるとグラフが出力されない場合があります。

例)2019年1月7日11時と16時に受注あり
2020年3月10日10時に受注あり

①2019/1/7 11:00~2019/1/7 12:00の条件指定

2019/1/7 11時の受注商品が一覧に表示、グラフは、「グラフ」のテキスト表示でグラフ表示されず

②2019/1/7 11:00~2020/3/10 11:00の条件指定

3件の受注商品が一覧に表示、グラフは、2020年3月の受注商品のみグラフに表示され、2019年受注商品はグラフに反映されず

※グラフに渡すデータと凡例の配列はカスタマイズ前と同じ内容を渡しています。

/* フォームで入力された日付を適切な形にする */

/**
* @param SC_FormParam_Ex $objFormParam
*/
public function lfSetStartEndDate(&$objFormParam)
{
$arrRet = $objFormParam->getHashArray();

// 月度集計
if ($arrRet['search_form'] == 1) {
list($sdate, $edate) = SC_Utils_Ex::sfTermMonth($arrRet['search_startyear_m'],
$arrRet['search_startmonth_m'],
CLOSE_DAY);
// 期間集計
} elseif ($arrRet['search_form'] == 2) {
/* 2020-05-14 Edit Start */
/*$sdate = SC_Utils_Ex::sfGetTimestampistime($arrRet['search_startyear'],
$arrRet['search_startmonth'],
$arrRet['search_startday'],
$arrRet['search_starthour'],
$arrRet['search_startmin']);
$edate = SC_Utils_Ex::sfGetTimestampistime($arrRet['search_endyear'],
$arrRet['search_endmonth'],
$arrRet['search_endday'],
$arrRet['search_endhour'],
$arrRet['search_endmin'], true);*/
$sdate = $arrRet['search_startyear'] . '/' . $arrRet['search_startmonth'] . '/' . $arrRet['search_startday'] . ' ' . $arrRet['search_starthour'] . ':' . $arrRet['search_startmin'] . ':0'/* 2020-05-14 Add End*/;
$edate = $arrRet['search_endyear'] . '/' . $arrRet['search_endmonth'] . '/' . $arrRet['search_endday'] . ' ' . $arrRet['search_endhour'] . ':' . $arrRet['search_endmin'] . ':59'/* 2020-05-14 Add End*/;
//$sdate = $arrRet['search_startyear'] . '/' . $arrRet['search_startmonth'] . '/' . $arrRet['search_startday'];
//$edate = $arrRet['search_endyear'] . '/' . $arrRet['search_endmonth'] . '/' . $arrRet['search_endday'];
/* 2020-05-14 Edit End */
}

return array($sdate, $edate);
}

// 円グラフの作成

/**
* @param string $keyname
* @param string $type
*/
public function lfGetGraphPie($arrResults, $keyname, $type, $title = '', $sdate = '', $edate = '')
{
$ret_path = '';
// 結果が0行以上ある場合のみグラフを生成する。
if (count($arrResults) > 0 && $this->install_GD) {
// グラフの生成
$arrList = SC_Utils_Ex::sfArrKeyValue($arrResults, $keyname,
'total', GRAPH_PIE_MAX,
GRAPH_LABEL_MAX);

// 一時ファイル名の取得
$pngname = $this->lfGetGraphPng($type);
$path = GRAPH_REALDIR . $pngname;

$objGraphPie = new SC_Graph_Pie();

// データをセットする
$objGraphPie->setData($arrList);
// 凡例をセットする
$objGraphPie->setLegend(array_keys($arrList));

// メインタイトル作成
// 2020-05-14 Edit Start
$sy = date('Y', strtotime($sdate));
$sm = date('m', strtotime($sdate));
$sd = date('d', strtotime($sdate));
$st = date('H:i:s', strtotime($sdate));
$ey = date('Y', strtotime($edate));
$em = date('m', strtotime($edate));
$ed = date('d', strtotime($edate));
$et = date('H:i:s', strtotime($edate));
$start_date = $sy . '年' . $sm . '月' . $sd . '日 ' . $st;
$end_date = $ey . '年' . $em . '月' . $ed . '日 ' . $et;
/*list($sy, $sm, $sd) = preg_split('|[/ ]|', $sdate);
list($ey, $em, $ed) = preg_split('|[/ ]|', $edate);
$start_date = $sy . '年' . $sm . '月' . $sd . '日';
$end_date = $ey . '年' . $em . '月' . $ed . '日';*/
// 2020-05-14 Edit End
$objGraphPie->drawTitle('集計期間:' . $start_date . ' - ' . $end_date);

// 円グラフ描画
$objGraphPie->drawGraph();

// グラフの出力
if (DRAW_IMAGE) {
$objGraphPie->outputGraph();
SC_Response_Ex::actionExit();
}

// ファイルパスを返す
$ret_path = GRAPH_URLPATH . $pngname;
}

return $ret_path;
}
468
投稿日時: 2020/5/15 12:54
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 2574
Re: 売上集計の円グラフが表示されない場合がある
投稿いただいたソースを私の環境に張り付けて(分秒のところだけ画面から受け取らずハードコーディングしましたが)
動作を確認してみましたが、特に問題無く、グラフ自体は表示されました。

投稿された現象から
・2019年1月7日11時と16時に受注あり
の2件がグラフで表示できないように見受けられますが
改修前の状況では、上記注文はグラフに出力されていましたでしょうか?


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

Rights
投稿日時: 2020/5/15 13:35
対応状況: −−−
常連
登録日: 2019/3/12
居住地:
投稿: 49
Re: 売上集計の円グラフが表示されない場合がある
ご返信ありがとうございます。

改修前では、一覧で出力される結果に沿ったグラフ表示がされていました。

前回の投稿では記載しておりませんでしたが、2019年1月7日11時と16時に受注が正しく抽出されるかテストした際、

[検索条件]
受注日に、2019/1/7 11:00 ~ 2019/1/7 16:30と指定

[結果]
グラフ → グラフ表示箇所に「グラフ」のテキスト表示でグラフが表示されず

検索結果 → 2件の受注の対象商品を表示

となります。

グラフ生成の際に渡すデータは、改修前後に差異はなく、日付部分もグラフ出力の際には、タイトル文字列として渡しているのみで処理自体に影響はないと認識しているのですが、現時点で現象の再現条件がはっきりつかめていません。
Rights
投稿日時: 2020/5/15 20:10
対応状況: −−−
常連
登録日: 2019/3/12
居住地:
投稿: 49
Re: 売上集計の円グラフが表示されない場合がある
その後の状況です。

今回手を加えたファイルは、
/data/class/pages/admin/total/LC_Page_Admin_Total.php
/data/Smarty/templates/admin/total/index.tpl

LC_Page_Admin_Total.php については、投稿した箇所以外にも変更を加えた部分があり、順を追ってみましたが、
lfGetWhereMember の前後でそれぞれ、$sdate と $edateの値を再指定してみると、前後で挙動が変わりました。
/** 商品別集計 **/
public function lfGetOrderProducts($type, $sdate, $edate)
{
$objQuery = SC_Query_Ex::getSingletonInstance();

/* ▼lfGetWhereMember 前に再度日付を指定するとグラフが表示▼ */
$sdate = '2019/1/7 0:0:0';
$sdate = '2019/1/7 11:59:59';
/* ▲lfGetWhereMember 前に再度日付を指定するとグラフが表示▲ */

list($where, $arrWhereVal) = $this->lfGetWhereMember('create_date', $sdate, $edate, $type);

/* ▼lfGetWhereMember 後に再度日付を指定するとグラフが表示されない▼ */
$sdate = '2019/1/7 0:0:0';
$sdate = '2019/1/7 11:59:59';
/* ▲lfGetWhereMember 後に再度日付を指定するとグラフが表示されない▲ */

$where .= ' AND dtb_order.del_flg = 0 AND dtb_order.status <> ?';
$arrWhereVal[] = ORDER_CANCEL;

$col = <<< __EOS__
product_id,
product_code,
product_name,
SUM(quantity) AS products_count,
COUNT(dtb_order_detail.order_id) AS order_count,
price,
(price * SUM(quantity)) AS total
__EOS__;

$from = 'dtb_order_detail JOIN dtb_order ON dtb_order_detail.order_id = dtb_order.order_id';

// FIXME グループを副問い合わせにして無駄な処理を減らす
$objQuery->setGroupBy('product_id, product_name, product_code, price');
$objQuery->setOrder('total DESC');
$arrTotalResults = $objQuery->select($col, $from, $where, $arrWhereVal);

$tpl_image = $this->lfGetGraphPie($arrTotalResults, 'product_name', 'products_' . $type, '(売上比率)', $sdate, $edate);

return array($arrTotalResults, $tpl_image);
}

lfGetWhereMember で取得日付指定のWhere句生成部分を変更しています。

/**
* @param string $col_date
*/
public function lfGetWhereMember($col_date, $sdate, $edate, $type, $col_member = 'customer_id')
{

$where = '';
// 取得日付の指定
if ($sdate != '') {
if ($where != '') {
$where.= ' AND ';
}
// 2020-05-14 Add Start
//$sdate = date('Y/m/d H:i:s', strtotime($sdate));
// 2020-05-14 Add End
$where.= " $col_date >= '". $sdate ."'";
}

if ($edate != '') {
if ($where != '') {
$where.= ' AND ';
}
// 2020-05-14 Edit Start
//$edate = date('Y/m/d H:i:s', strtotime($edate));
//$where.= " $col_date <= '" . $edate ."'";
$edate = date('Y/m/d', strtotime('1 day', strtotime($edate)));
$where.= " $col_date < date('" . $edate ."')";
// 2020-05-14 Edit End
}

// 会員、非会員の判定
switch ($type) {
// 全体
case 'all':
break;
case 'member':
if ($where != '') {
$where.= ' AND ';
}
$where.= " $col_member <> 0";
break;
case 'nonmember':
if ($where != '') {
$where.= ' AND ';
}
$where.= " $col_member = 0";
break;
default:
break;
}

return array($where, array());
}

渡した値($sdate, $edate)と、再指定した値($sdate, $edate)を比較しても同じ内容でした。
468
投稿日時: 2020/5/15 22:43
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 2574
Re: 売上集計の円グラフが表示されない場合がある
関数の呼び出しの前後で変数の何か変わるような事があるのか、
私も経験した事がないので、何とも言えませんが
サーバのエラーログにphpエラーが記録されていませんか?

グラフが表示される場所に「グラフ」とテキストが表示されるのは
画像データの生成に失敗しているのだと思うのですが…


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

Rights
投稿日時: 2020/5/18 17:46
対応状況: 解決済
常連
登録日: 2019/3/12
居住地:
投稿: 49
Re: 売上集計の円グラフが表示されない場合がある
その後、変数や配列の中身を追いかけてみましたところ解決いたしました。

下記テンプレートファイルに追加したパラメータの指定がされていなかった事が原因でした。
そのため、時分の値チェックでデータがないため、現在日付の時分がセットされ、本来の意図した結果がグラフ処理にわたっていませんでした。

/data/Smarty/templates/admin/total/index.php


<!--{* グラフ表示 *}-->
<!--{if $install_GD}-->
<div id="graph-image">
<!--{* <img src="<!--{$tpl_image}-->?<!--{$cashtime}-->" alt="グラフ"> *}-->
<img src="?draw_image=true&type=<!--{$smarty.post.type|h}-->&mode=search&search_form=<!--{$smarty.post.search_form|h}-->&page=<!--{$smarty.post.page|h}-->&search_startyear_m=<!--{$smarty.post.search_startyear_m|h}-->&search_startmonth_m=<!--{$smarty.post.search_startmonth_m|h}-->&search_startyear=<!--{$smarty.post.search_startyear|h}-->&search_startmonth=<!--{$smarty.post.search_startmonth|h}-->&search_startday=<!--{$smarty.post.search_startday|h}-->&search_starthour=<!--{$smarty.post.search_starthour|h}-->&search_startmin=<!--{$smarty.post.search_startmin|h}-->&search_endyear=<!--{$smarty.post.search_endyear|h}-->&search_endmonth=<!--{$smarty.post.search_endmonth|h}-->&search_endday=<!--{$smarty.post.search_endday|h}-->&search_endhour=<!--{$smarty.post.search_endhour|h}-->&search_endmin=<!--{$smarty.post.search_endmin|h}-->&<!--{$smarty.const.TRANSACTION_ID_NAME}-->=<!--{$transactionid}-->" alt="グラフ" />
</div>
<!--{/if}-->
<!--{* グラフ表示 *}-->

ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は65,656名です
総投稿数は97,930件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
468
2574
4
nanasess
2101
5
umebius
1706
6
yuh
1612
7
red
1420
8
h_tanaka
1038
9
fukap
907
10
tsuji
863
11
shutta
835
12
tao_s
792
13 ramrun 789
14 karin 657
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

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

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.