IT女子のお気に入りフォルダ

管理人の備忘録と実践を兼ねた(出来るだけ)役に立つ情報を配信するブログです。

[EC-CUBE2.13] 注文番号を日付+連番にする

EC-CUBEでの注文番号はデフォルトでは連番です。これを、日付+連番にカスタマイズしたいと思います。例えば、注文日が2015年4月8日で、通常の注文番号が54番なら「15040854」という注文番号になります。(日付は年月日をそれぞれ2桁での表示にしました。)

注文番号はdtb_orderに注文データが登録される際にAUTO_INCREMENTで番号が振られます。なのでこの部分はいじらずに表示上だけ「日付+連番」つまり「注文日(yymmdd)+通常の連番」となるようにカスタマイズしたいと思います。
(データベースには今まで通りの連番だけが登録されているけど、表示の際は連番の前に注文日を付ける。という具合です。)

表示上「注文番号:日付+連番」にする

1) 納品書

SC_Fpdf.php の setOrderData() を編集したいのでこれをごっそり以下の拡張クラスにコピーします。

data/class_extends/SC_Fpdf_Ex.php

private function setOrderData()
{
    $arrOrder = array();
    // DBから受注情報を読み込む
    $this->lfGetOrderData($this->arrData['order_id']);

    // 購入者情報
    $text = '〒 '.$this->arrDisp['order_zip01'].' - '.$this->arrDisp['order_zip02'];
    $this->lfText(23, 43, $text, 10); //購入者郵便番号
    $text = $this->arrPref[$this->arrDisp['order_pref']] . $this->arrDisp['order_addr01'];
    $this->lfText(27, 47, $text, 10); //購入者都道府県+住所1
    $this->lfText(27, 51, $this->arrDisp['order_addr02'], 10); //購入者住所2
    $text = $this->arrDisp['order_name01'].' '.$this->arrDisp['order_name02'].' 様';
    $this->lfText(27, 59, $text, 11); //購入者氏名

    // お届け先情報
    $this->SetFont('SJIS', '', 10);
    $this->lfText(25, 125, SC_Utils_Ex::sfDispDBDate($this->arrDisp['create_date']), 10); //ご注文日
    // 注文番号を「日付+連番」に変更
    $dateplus_order_id  = substr($this->arrDisp['create_date'],2,2);
    $dateplus_order_id .= substr($this->arrDisp['create_date'],5,2);
    $dateplus_order_id .= substr($this->arrDisp['create_date'],8,2);
    $dateplus_order_id .= $this->arrDisp['order_id'];
    $this->lfText(25, 135, $dateplus_order_id, 10);
    $this->SetFont('Gothic', 'B', 15);
    $this->Cell(0, 10, $this->tpl_title, 0, 2, 'C', 0, '');  //文書タイトル(納品書・請求書)

もしいくら変更しても反映されないという場合は、導入しているプラグインがSC_Fpdfクラスをオーバーライドしている可能性があります。私はそれで苦労しました。私の場合は「商品オプションプラグイン」がオーバーライドしており、以下のファイルが影響していました。
data/downloads/plugin/ProductOptions/class/213/plg_ProductOptions_SC_Fpdf_Ex.php

2) PC用のMYページ・購入履歴

data/Smarty/templates/default/mypage/index.tpl

<table summary="購入履歴">
	<tr>
		<th class="alignC">購入日時</th>
		<th class="alignC">注文番号</th>
		<th class="alignC">お支払い方法</th>
		<th class="alignC">合計金額</th>
		<!--{if $smarty.const.MYPAGE_ORDER_STATUS_DISP_FLAG }-->
		<th class="alignC">ご注文状況</th>
		<!--{/if}-->
		<th class="alignC">詳細</th>
	</tr>
	<!--{section name=cnt loop=$arrOrder}-->
		<tr>
			<td class="alignC"><!--{$arrOrder[cnt].create_date|sfDispDBDate}--></td>
			<td><!--{$arrOrder[cnt].create_date|date_format:"%y%m%d"}--><!--{$arrOrder[cnt].order_id}--></td>
			<!--{assign var=payment_id value="`$arrOrder[cnt].payment_id`"}-->
			<td class="alignC"><!--{$arrPayment[$payment_id]|h}--></td>
			<td class="alignR"><!--{$arrOrder[cnt].payment_total|number_format}-->円</td>

data/Smarty/templates/default/mypage/history.tpl

<div id="mypagecolumn">
    <h2 class="title"><!--{$tpl_title|h}--></h2>
    <!--{include file=$tpl_navi}-->
    <div id="mycontents_area">
        <h3><!--{$tpl_subtitle|h}--></h3>
        <div class="mycondition_area clearfix">
            <p>
                <span class="st">購入日時:&nbsp;</span><!--{$tpl_arrOrderData.create_date|sfDispDBDate}--><br />
                <span class="st">注文番号:&nbsp;</span><!--{$tpl_arrOrderData.create_date|date_format:"%y%m%d"}--><!--{$tpl_arrOrderData.order_id}--><br />
                <span class="st">お支払い方法:&nbsp;</span><!--{$arrPayment[$tpl_arrOrderData.payment_id]|h}--><br />
                <!--{if $smarty.const.MYPAGE_ORDER_STATUS_DISP_FLAG}-->
                    <span class="st">ご注文状況:&nbsp;</span>
                    <!--{if $tpl_arrOrderData.status != $smarty.const.ORDER_PENDING}-->
                        <!--{$arrCustomerOrderStatus[$tpl_arrOrderData.status]|h}-->
                    <!--{else}-->
                        <span class="attention"><!--{$arrCustomerOrderStatus[$tpl_arrOrderData.status]|h}--></span>
                    <!--{/if}-->
                <!--{/if}-->
                <!--{if $is_price_change == true}-->
                    <div class="attention" Align="right">※金額が変更されている商品があるため、再注文時はご注意ください。</div>
                <!--{/if}-->
            </p>

3) スマホ用のMYページ・購入履歴

data/Smarty/templates/sphone/mypage/index.tpl

<!--▼フォームボックスここから -->
<div class="formBox">
    <!--{section name=cnt loop=$arrOrder max=$dispNumber}-->
        <!--▼商品 -->
        <div class="arrowBox">
            <p>
                <em>注文番号:</em><span class="order_id"><!--{$arrOrder[cnt].create_date|date_format:"%y%m%d"}--><!--{$arrOrder[cnt].order_id}--><!--{assign var=payment_id value="`$arrOrder[cnt].payment_id`"}--></span><br />
                <em>購入日時:</em><span class="create_date"><!--{$arrOrder[cnt].create_date|sfDispDBDate}--></span><br />
                <em>お支払い方法:</em><span class="payment_id"><!--{$arrPayment[$payment_id]|h}--></span><br />
                <em>合計金額:</em><span class="payment_total"><!--{$arrOrder[cnt].payment_total|number_format}--></span>円<br />
                <!--{if $smarty.const.MYPAGE_ORDER_STATUS_DISP_FLAG }-->

data/Smarty/templates/sphone/mypage/history.tpl

<div class="form_area">
    <div id="historyBox">
        <p>
            <em>注文番号</em>:&nbsp;<!--{$tpl_arrOrderData.create_date|date_format:"%y%m%d"}--><!--{$tpl_arrOrderData.order_id}--><br />
            <em>購入日時</em>:&nbsp;<!--{$tpl_arrOrderData.create_date|sfDispDBDate}--><br />
            <em>お支払い方法</em>:&nbsp;<!--{$arrPayment[$tpl_arrOrderData.payment_id]|h}-->
        </p>

4) 携帯用のMYページ・購入履歴

data/Smarty/templates/mobile/mypage/index.tpl

■購入履歴一覧<br>
<!--{if $objNavi->all_row > 0}-->
    <!--{$objNavi->all_row}-->件の購入履歴があります。<br>
    <br>
    <!--{section name=cnt loop=$arrOrder}-->
        <hr>
        ▽購入日時<br>
        <!--{$arrOrder[cnt].create_date|sfDispDBDate}--><br>
        ▽注文番号<br>
        <!--{$arrOrder[cnt].create_date|date_format:"%y%m%d"}--><!--{$arrOrder[cnt].order_id}--><br>
        <!--{assign var=payment_id value="`$arrOrder[cnt].payment_id`"}-->
        ▽お支払い方法<br>
        <!--{$arrPayment[$payment_id]|h}--><br>

data/Smarty/templates/mobile/mypage/history.tpl

<!--{strip}-->
    購入日時:<!--{$tpl_arrOrderData.create_date|sfDispDBDate}--><br>
    注文番号:<!--{$tpl_arrOrderData.create_date|date_format:"%y%m%d"}--><!--{$tpl_arrOrderData.order_id}--><br>
    お支払い方法:<!--{$arrPayment[$tpl_arrOrderData.payment_id]|h}-->

5) [管理画面] 受注管理の検索結果

data/Smarty/templates/admin/order/index.tpl

<tr>
    <th>受注日</th>
    <th>注文番号</th>
    <th>お名前</th>
    <th>支払方法</th>
    <th>購入金額(円)</th>
    <th>全商品発送日</th>
    <th>対応状況</th>
    <th><label for="pdf_check">帳票</label> <input type="checkbox" name="pdf_check" id="pdf_check" onclick="eccube.checkAllBox(this, 'input[name=pdf_order_id[]]')" /></th>
    <th>編集</th>
    <th>メール <input type="checkbox" name="mail_check" id="mail_check" onclick="eccube.checkAllBox(this, 'input[name=mail_order_id[]]')" /></th>
    <th>削除</th>
</tr>

<!--{section name=cnt loop=$arrResults}-->
    <!--{assign var=status value="`$arrResults[cnt].status`"}-->
    <tr style="background:<!--{$arrORDERSTATUS_COLOR[$status]}-->;">
        <td class="center"><!--{$arrResults[cnt].create_date|sfDispDBDate}--></td>
        <td class="center"><!--{$arrResults[cnt].create_date|date_format:"%y%m%d"}--><!--{$arrResults[cnt].order_id}--></td>
        <td class="center"><!--{$arrResults[cnt].order_name01|h}--> <!--{$arrResults[cnt].order_name02|h}--></td>
画面上部の検索の注文番号はデータベースに登録されている連番部分のみなので以下のようにしておきます。

<h2>検索条件設定</h2>
<!--{* 検索条件設定テーブルここから *}-->
<table>
    <tr>
        <th>注文番号(※連番部分のみ)</th>
        <td>
            <!--{assign var=key1 value="search_order_id1"}-->
            <!--{assign var=key2 value="search_order_id2"}-->

6) [管理画面] 受注管理の編集画面

data/Smarty/templates/admin/order/edit.tpl

<tr>
    <th>注文番号</th>
    <td><!--{$arrForm.create_date.value|date_format:"%y%m%d"|h}--><!--{$arrForm.order_id.value|h}--></td>
</tr>

7) [管理画面] 受注管理→対応状況管理の注文番号クリックで表示される注文詳細画面

data/Smarty/templates/admin/order/disp.tpl

<tr>
    <th>注文番号</th>
    <td><!--{$arrForm.create_date.value|date_format:"%y%m%d"|h}--><!--{$arrForm.order_id.value|h}--></td>
    <input type="hidden" name="order_id" value="<!--{$arrForm.order_id.value|h}-->" />
</tr>

8) [管理画面] PDF出力画面→個別出力または一括出力で表示される別ウィンドウ

data/Smarty/templates/admin/order/status.tpl

<table class="form">
    <col width="20%" />
    <col width="80%" />
    <tr>
        <th>注文番号(※連番部分のみ)</th>
        <td><!--{$arrForm.order_id|@join:', '}--></td>
    </tr>
    <tr>
        <th>発行日<span class="attention">※</span></th>

一括出力の場合は注文番号が「,」で連結され複数表示されるので、連番部分だけにしておいた方がわかりやすいと思うので、タイトルに注記を追加。

9) [管理画面] 対応状況管理の検索結果

data/Smarty/templates/admin/order/status.tpl

<tr>
    <th><label for="move_check">選択<br /></label> <input type="checkbox" name="move_check" id="move_check" onclick="eccube.checkAllBox(this, 'input[name=move[]]')" /></th>
    <th>対応状況</th>
    <th>注文番号</th>
    <th>受注日</th>
    <th>お名前</th>
    <th>支払方法</th>
    <th>購入金額(円)</th>
    <th>入金日</th>
    <th>発送日</th>
</tr>
<!--{section name=cnt loop=$arrStatus}-->
<!--{assign var=status value="`$arrStatus[cnt].status`"}-->
<tr style="background:<!--{$arrORDERSTATUS_COLOR[$status]}-->;">
    <td class="center"><input type="checkbox" name="move[]" value="<!--{$arrStatus[cnt].order_id}-->" ></td>
    <td class="center"><!--{$arrORDERSTATUS[$status]}--></td>
    <td class="center"><a href="#" onclick="eccube.openWindow('./disp.php?order_id=<!--{$arrStatus[cnt].order_id}-->','order_disp','800','900',{resizable:'no',focus:false}); return false;" ><!--{$arrStatus[cnt].create_date|date_format:"%y%m%d"}--><!--{$arrStatus[cnt].order_id}--></a></td>
    <td class="center"><!--{$arrStatus[cnt].create_date|sfDispDBDate}--></td>
    <td><!--{$arrStatus[cnt].order_name01|h}--> <!--{$arrStatus[cnt].order_name02|h}--></td>
    <!--{assign var=payment_id value=`$arrStatus[cnt].payment_id`}-->
    <td class="center"><!--{$arrPayment[$payment_id]|h}--></td>
    <td class="right"><!--{$arrStatus[cnt].total|number_format}--></td>
    <td class="center"><!--{if $arrStatus[cnt].payment_date != ""}--><!--{$arrStatus[cnt].payment_date|sfDispDBDate:false}--><!--{else}-->未入金<!--{/if}--></td>
    <td class="center"><!--{if $arrStatus[cnt].status eq 5}--><!--{$arrStatus[cnt].commit_date|sfDispDBDate:false}--><!--{else}-->未発送<!--{/if}--></td>
</tr>

10) 各種送信メール

data/Smarty/templates/default/mail_templates/order_mail.tpl

************************************************
 ご請求金額
************************************************

ご注文番号:<!--{$arrOrder.create_date|date_format:"%y%m%d"|h}--><!--{$arrOrder.order_id}-->
お支払い合計:¥ <!--{$arrOrder.payment_total|number_format|default:0}-->
お支払い方法:<!--{$arrOrder.payment_method}-->
メッセージ:<!--{$Message_tmp}-->

data/Smarty/templates/mobile/mail_templates/order_mail.tpl

■ご請求金額
ご注文番号:<!--{$arrOrder.create_date|date_format:"%y%m%d"|h}--><!--{$arrOrder.order_id}-->
お支払い合計:¥<!--{$arrOrder.payment_total|number_format|default:0}-->
お支払い方法:<!--{$arrOrder.payment_method}-->
メッセージ:<!--{$Message_tmp}-->

他にも自身で追加したり、プラグインによって追加されたorder関連のメールテンプレートがあれば同様の修正が必要です。