EC-CUBE(2.13)の管理者ページの売上集計に購入者別集計を追加する方法

EC-CUBE(2.13)の管理者ページの売上集計に購入者別集計を追加する方法です。

まずはLC_Page_Admin_Total_Exクラスを編集します。

initメソッドを編集

/**
  * Page を初期化する.
  *
  * @return void
  */
function init()
{
    parent::init();

    $this->arrTitle['customer']   = '購入者別集計';
}

actionメソッドを追加

/**
  * Page のアクション.
  *
  * @return void
  */
public function action()
{
    parent::action();
}

購入者別集計を行うlfGetOrderCustomerメソッドを追加

/** 購入者別集計 **/
public function lfGetOrderCustomer($type, $sdate, $edate)
{
    $objQuery = SC_Query_Ex::getSingletonInstance();

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

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

    // 会員集計の取得(MySQLの場合)
    $col = <<< __EOS__
                CONCAT(order_name01, order_name02) AS order_name,
                COUNT(order_id) AS order_count,
                SUM(total) AS total,
                AVG(total) AS total_average
__EOS__;

    /* 会員集計の取得(PostgreSQLの場合)
    $col = <<< __EOS__
                (order_name01 || order_name02) AS order_name,
                COUNT(order_id) AS order_count,
                SUM(total) AS total,
                AVG(total) AS total_average
__EOS__;
    */

    $from   = 'dtb_order';

    $objQuery->setGroupBy('customer_id, order_name01, order_name02');

    $arrTotalResults = $objQuery->select($col, $from, $where, $arrWhereVal);

    $tpl_image = $this->lfGetGraphPie($arrTotalResults, 'order_name', 'customer', '(売上比率)', $sdate, $edate);

    return array($arrTotalResults, $tpl_image);
}

これで購入者別集計の処理が完了です。

あとはテンプレートの設定を行います。

売上集計タブ(subnavi.tpl)に購入者別集計リンクを追加

<ul class="level1">
    <li id="navi-total-term"
        class="<!--{if ($tpl_mainno == 'total' && ($arrForm.page.value == 'term' || $arrForm.page.value == ''))}-->on<!--{/if}-->"
    ><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->total/<!--{$smarty.const.DIR_INDEX_PATH}-->?page=term"><span>期間別集計</span></a></li>
    <li id="navi-total-products"
        class="<!--{if ($tpl_mainno == 'total' && $arrForm.page.value == 'products')}-->on<!--{/if}-->"
    ><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->total/<!--{$smarty.const.DIR_INDEX_PATH}-->?page=products"><span>商品別集計</span></a></li>
    <li id="navi-total-products"
        class="<!--{if ($tpl_mainno == 'total' && $arrForm.page.value == 'customer')}-->on<!--{/if}-->"
    ><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->total/<!--{$smarty.const.DIR_INDEX_PATH}-->?page=customer"><span>購入者別集計</span></a></li>
    <li id="navi-total-age"
        class="<!--{if ($tpl_mainno == 'total' && $arrForm.page.value == 'age')}-->on<!--{/if}-->"
    ><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->total/<!--{$smarty.const.DIR_INDEX_PATH}-->?page=age"><span>年代別集計</span></a></li>
    <li id="navi-total-job"
        class="<!--{if ($tpl_mainno == 'total' && $arrForm.page.value == 'job')}-->on<!--{/if}-->"
    ><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->total/<!--{$smarty.const.DIR_INDEX_PATH}-->?page=job"><span>職業別集計</span></a></li>
    <li id="navi-total-member"
        class="<!--{if ($tpl_mainno == 'total' && $arrForm.page.value == 'member')}-->on<!--{/if}-->"
    ><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->total/<!--{$smarty.const.DIR_INDEX_PATH}-->?page=member"><span>会員別集計</span></a></li>
</ul>

page_customer.tplを追加

ファイルの設置場所は以下のとおりです。

data/Smarty/templates/admin/total/page_customer.tpl

<table id="total-member" class="list">
    <tr>
        <th>購入者</th>
        <th>購入件数</th>
        <th>購入合計</th>
        <th>購入平均</th>
    </tr>

    <!--{section name=cnt loop=$arrResults}-->
        <!--{* 色分け判定 *}-->
        <!--{assign var=type value="`$smarty.section.cnt.index%2`"}-->
        <!--{if $type == 0}-->
            <!--{* 偶数行 *}-->
            <!--{assign var=color value="even"}-->
        <!--{else}-->
            <!--{* 奇数行 *}-->
            <!--{assign var=color value="odd"}-->
        <!--{/if}-->

        <tr class="<!--{$color}-->">
            <td class="center"><!--{*区分*}--><!--{$arrResults[cnt].order_name}--></td>
            <td class="right"><!--{*購入件数*}--><!--{$arrResults[cnt].order_count}-->件</td>
            <td class="right"><!--{*購入合計*}--><!--{$arrResults[cnt].total|number_format}-->円</td>
            <td class="right"><!--{*購入平均*}--><!--{$arrResults[cnt].total_average|number_format}-->円</td>
        </tr>
    <!--{/section}-->

    <tr>
        <th>購入者</th>
        <th>購入件数</th>
        <th>購入合計</th>
        <th>購入平均</th>
    </tr>
</table>

以上です。

3件のコメント

  1. 参考にさせていただいております。
    購入者別集計の表示の際に設置されている
    「CSVダウンロード」については
    上記コードでカバーできるのでしょうか?

    • とねさん、コメントありがとうございます。

      おそらくCSVダウンロードは機能しないと思います。動作検証をしていませんが、lfGetCSVColumメソッドに購入者別集計用の情報を追加してあげれば動くんじゃないかと思います。

      • ご連絡ありがとうございました。
        lfGetCSVColumメソッドに購入者別集計用の情報を追加することで
        「CSVダウンロード」の確認ができました。

お気軽にコメントをどうぞ

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください