EC-CUBE2.12:受注一覧画面でステータスを変更する

(1)■data/class/pages/admin/order/LC_Page_Admin_Order.php

「▼受注一覧画面でステータスを変更する」の箇所を修正・追加します。

require_once CLASS_EX_REALDIR . 'page_extends/admin/LC_Page_Admin_Ex.php';

/**
* 受注管理 のページクラス
*
* @package Page
* @author LOCKON CO.,LTD.
* @version $Id: LC_Page_Admin_Order.php 21867 2012-05-30 07:37:01Z nakanishi $
*/
class LC_Page_Admin_Order extends LC_Page_Admin_Ex {

// }}}
// {{{ functions

/**
* Page を初期化する.
*
* @return void
*/
function init() {
parent::init();
$this->tpl_mainpage = 'order/index.tpl';
$this->tpl_mainno = 'order';
$this->tpl_subno = 'index';
$this->tpl_pager = 'pager.tpl';
$this->tpl_maintitle = '受注管理';
$this->tpl_subtitle = '受注管理';

$masterData = new SC_DB_MasterData_Ex();
$this->arrORDERSTATUS = $masterData->getMasterData('mtb_order_status');
$this->arrORDERSTATUS_COLOR = $masterData->getMasterData('mtb_order_status_color');
$this->arrSex = $masterData->getMasterData('mtb_sex');
$this->arrPageMax = $masterData->getMasterData('mtb_page_max');

$objDate = new SC_Date_Ex();
// 登録・更新日検索用
$objDate->setStartYear(RELEASE_YEAR);
$objDate->setEndYear(DATE('Y'));
$this->arrRegistYear = $objDate->getYear();
// 生年月日検索用
$objDate->setStartYear(BIRTH_YEAR);
$objDate->setEndYear(DATE('Y'));
$this->arrBirthYear = $objDate->getYear();
// 月日の設定
$this->arrMonth = $objDate->getMonth();
$this->arrDay = $objDate->getDay();

// 支払い方法の取得
$this->arrPayments = SC_Helper_DB_Ex::sfGetIDValueList('dtb_payment', 'payment_id', 'payment_method');
// ▼受注一覧画面でステータスを変更する
$this->arrORDERSTATUS = $masterData->getMasterData("mtb_order_status");
// ▲受注一覧画面でステータスを変更する
$this->httpCacheControl('nocache');
}

/**
* Page のプロセス.
*
* @return void
*/
function process() {
$this->action();
$this->sendResponse();
}

/**
* Page のアクション.
*
* @return void
*/
function action() {

$objFormParam = new SC_FormParam_Ex();
$this->lfInitParam($objFormParam);
$objFormParam->setParam($_POST);
$this->arrHidden = $objFormParam->getSearchArray();
$this->arrForm = $objFormParam->getFormParamList();

switch ($this->getMode()) {
// 削除
case 'delete':
$this->doDelete('order_id = ?',
array($objFormParam->getValue('order_id')));
// 削除後に検索結果を表示するため breakしない

// 検索パラメーター生成後に処理実行するため breakしない
case 'csv':
case 'delete_all':

// 検索パラメーターの生成
case 'search':
$objFormParam->convParam();
$objFormParam->trimParam();
$this->arrErr = $this->lfCheckError($objFormParam);
$arrParam = $objFormParam->getHashArray();

if (count($this->arrErr) == 0) {
$where = 'del_flg = 0';
$arrWhereVal = array();
foreach ($arrParam as $key => $val) {
if ($val == '') {
continue;
}
$this->buildQuery($key, $where, $arrWhereVal, $objFormParam);
}

$order = 'update_date DESC';

/* -----------------------------------------------
* 処理を実行
* ----------------------------------------------- */
switch ($this->getMode()) {
// CSVを送信する。
case 'csv':
$this->doOutputCSV($where, $arrWhereVal, $order);

SC_Response_Ex::actionExit();
break;

// 全件削除(ADMIN_MODE)
case 'delete_all':
$this->doDelete($where, $arrWhereVal);
break;

// 検索実行
default:
// 行数の取得
$this->tpl_linemax = $this->getNumberOfLines($where, $arrWhereVal);
// ページ送りの処理
$page_max = SC_Utils_Ex::sfGetSearchPageMax($objFormParam->getValue('search_page_max'));
// ページ送りの取得
$objNavi = new SC_PageNavi_Ex($this->arrHidden['search_pageno'],
$this->tpl_linemax, $page_max,
'fnNaviSearchPage', NAVI_PMAX);
$this->arrPagenavi = $objNavi->arrPagenavi;

// 検索結果の取得
$this->arrResults = $this->findOrders($where, $arrWhereVal,
$page_max, $objNavi->start_row, $order);
break;
}
}
break;

// ▼受注一覧画面でステータスを変更する
case 'status';
if($_POST['change_status']!='' || $_POST['change_status'] != NULL){
//変更するスタータスが選択されている
if(isset($_POST['status_order_id'])){
//変更する受注チェックボックスが選択されている
$this->lfStatusMove($_POST['change_status'],$_POST['status_order_id']);
}else{
//変更する受注チェックボックスが選択されていない
$this->change_status_err = "ステータスを変更する受注を選択してください。";
}
}else{
//変更するスタータスが選択されていない
$this->change_status_err = "変更するステータスを選択してください。";
}
//検索条件キーワードの変換
$objFormParam->convParam();
//パラメータの空白文字の削除
$objFormParam->trimParam();
//検索キーワードのエラーチェック
$this->arrErr = $this->lfCheckError($objFormParam);
//パラメータの取得
$arrParam = $objFormParam->getHashArray();

//エラーがないならば
if (count($this->arrErr) == 0) {
$where = "del_flg = 0";
foreach ($arrParam as $key => $val) {
if($val == "") {
continue;
}
//検索条件が設定されていれば検索対象にするwhere文を作成する
$this->buildQuery($key, $where, $arrval, $objFormParam);
}

$order = "update_date DESC";

/* -----------------------------------------------
* 処理を実行
* ----------------------------------------------- */
// 行数の取得
$this->tpl_linemax = $this->getNumberOfLines($where, $arrval);
// ページ送りの処理
$page_max = SC_Utils_Ex::sfGetSearchPageMax($objFormParam->getValue('search_page_max'));
// ページ送りの取得
$objNavi = new SC_PageNavi_Ex($this->arrHidden['search_pageno'],$this->tpl_linemax, $page_max,'fnNaviSearchPage', NAVI_PMAX);
$this->arrPagenavi = $objNavi->arrPagenavi;

// 検索結果の取得
$this->arrResults = $this->findOrders($where, $arrval,$page_max, $objNavi->start_row, $order);
}
break;
// ▲受注一覧画面でステータスを変更する

default:
break;
}

}

// ▼受注一覧画面でステータスを変更する
function lfStatusMove($statusId, $arrOrderId) {
$objPurchase = new SC_Helper_Purchase_Ex();
$objQuery = new SC_Query_Ex();

if (!isset($arrOrderId) || !is_array($arrOrderId)) {
return false;
}
$masterData = new SC_DB_MasterData_Ex();
$arrORDERSTATUS = $masterData->getMasterData("mtb_order_status");

$objQuery->begin();

foreach ($arrOrderId as $orderId) {
$objPurchase->sfUpdateOrderStatus($orderId, $statusId);
}

$objQuery->commit();

$this->tpl_onload = "window.alert('選択項目を" . $arrORDERSTATUS[$statusId] . "へ移動しました。');";
return true;
}
// ▲受注一覧画面でステータスを変更する

/**
* デストラクタ.
*
* @return void
*/
function destroy() {
parent::destroy();
}

・
・
・
・

(2)■data/Smarty/templates/admin/order/index.tpl

「▼受注一覧画面でステータスを変更する」の箇所を修正・追加します。

・
・
・
・
<div class="btn">
<p class="page_rows">検索結果表示件数
<!--{assign var=key value="search_page_max"}-->
<span class="attention"><!--{$arrErr[$key]}--></span>
<select name="<!--{$arrForm[$key].keyname}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->">
<!--{html_options options=$arrPageMax selected=$arrForm[$key].value}-->
</select> 件</p>
<div class="btn-area">
<ul>
<li class="btn-action"><a href="javascript:;" onclick="fnFormModeSubmit('search_form', 'search', '', ''); return false;"><span class="btn-next">この条件で検索する</span></a></li>
</ul>
</div>
</div>
<!--検索条件設定テーブルここまで-->
</form>

<!--▼受注一覧画面でステータスを変更する-->
<!--もとのコードは、if count($arrErr) == 0 and ($smarty.post.mode == 'search' or $smarty.post.mode == 'delete') -->
<!--{if count($arrErr) == 0 and ($smarty.post.mode == 'status' or $smarty.post.mode == 'search' or $smarty.post.mode == 'delete')}-->
<!--▲受注一覧画面でステータスを変更する-->

<!--★★検索結果一覧★★-->
<form name="form1" id="form1" method="post" action="?">
<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" />
<input type="hidden" name="mode" value="search" />
<input type="hidden" name="order_id" value="" />
<!--{foreach key=key item=item from=$arrHidden}-->
<!--{if is_array($item)}-->
<!--{foreach item=c_item from=$item}-->
<input type="hidden" name="<!--{$key|h}-->[]" value="<!--{$c_item|h}-->" />
<!--{/foreach}-->
<!--{else}-->
<input type="hidden" name="<!--{$key|h}-->" value="<!--{$item|h}-->" />
<!--{/if}-->
<!--{/foreach}-->
<h2>検索結果一覧</h2>
<div class="btn">
<span class="attention"><!--検索結果数--><!--{$tpl_linemax}-->件</span>&nbsp;が該当しました。
<!--{if $smarty.const.ADMIN_MODE == '1'}-->
<a class="btn-normal" href="javascript:;" onclick="fnModeSubmit('delete_all','',''); return false;"><span>検索結果をすべて削除</span></a>
<!--{/if}-->
<a class="btn-normal" href="javascript:;" onclick="fnModeSubmit('csv','',''); return false;">CSV ダウンロード</a>
<a class="btn-normal" href="../contents/csv.php?tpl_subno_csv=order">CSV 出力項目設定</a>
<a class="btn-normal" href="javascript:;" onclick="fnSelectCheckSubmit('pdf.php'); return false;"><span>PDF一括出力</span></a>
<a class="btn-normal" href="javascript:;" onclick="fnSelectMailCheckSubmit('mail.php'); return false;"><span>メール一括通知</span></a>

<!--▼受注一覧画面でステータスを変更する-->
<div style=" width:60%; border:#CCC 1px solid; padding:3px; background-color:#f7f7f7; text-align:center; margin:0 auto; margin-top:20px;">
<span class="bold">ステータスの変更</span>&nbsp;&nbsp;①該当ボックスをチェック&nbsp;&nbsp;②
<!-- ステータスを選択するセレクトボックス  -->
<select name="change_status">
<option value="" selected>選択してください</option>
<!--{html_options options=$arrORDERSTATUS}-->
<option value="delete">削除</option>
</select>
&nbsp;&nbsp;③<a class="btn-normal" href="javascript:;" onclick="fnModeSubmit('status','',''); return false;"><span>変更する</span></a>
<!--{assign var=key1 value=$change_status_err}-->
<!-- エラーがあれば表示  -->
<!--{if $key1 != "" || $key1 != NULL}-->
<div class="attention" style="text-align:right;"><!--{$key1}--></div>
<!--{/if}-->
</div>
<!--▲受注一覧画面でステータスを変更する-->

</div>
<!--{if count($arrResults) > 0}-->

<!--{include file=$tpl_pager}-->

<!--{* 検索結果表示テーブル *}-->
<table class="list">
<col width="5%" /><!--▼←受注一覧画面でステータスを変更する-->
<col width="10%" />
<col width="8%" />
<col width="15%" /><!--▼←受注一覧画面でステータスを変更する 15%から10%に変更-->
<col width="8%" />
<col width="10%" />
<col width="10%" />
<col width="10%" />
<col width="10%" />
<col width="5%" />
<col width="9%" />
<col width="5%" />
<!--{* ペイジェントモジュール連携用 *}-->
<!--{assign var=path value=`$smarty.const.MODULE_REALDIR`mdl_paygent/paygent_order_index.tpl}-->
<!--{if file_exists($path)}-->
<!--{include file=$path}-->
<!--{else}-->
<tr>
<th>ステータス変更</th><!--▼←受注一覧画面でステータスを変更する-->
<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="fnAllCheck(this, 'input[name=pdf_order_id[]]')" /></th>
<th>編集</th>
<th>メール <input type="checkbox" name="mail_check" id="mail_check" onclick="fnAllCheck(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">
<input type="checkbox" name="status_order_id[]" value="<!--{$arrResults[cnt].order_id}-->" id="status_order_id_<!--{$arrResults[cnt].order_id}-->"/><br>
</td>
<!--▲受注一覧画面でステータスを変更する-->
<td class="center"><!--{$arrResults[cnt].create_date|sfDispDBDate}--></td>
<td class="center"><!--{$arrResults[cnt].order_id}--></td>
<td><!--{$arrResults[cnt].order_name01|h}--> <!--{$arrResults[cnt].order_name02|h}--></td>
<!--{assign var=payment_id value="`$arrResults[cnt].payment_id`"}-->
<td class="center"><!--{$arrPayments[$payment_id]}--></td>
<td class="right"><!--{$arrResults[cnt].total|number_format}--></td>
<td class="center"><!--{$arrResults[cnt].commit_date|sfDispDBDate|default:"未発送"}--></td>
<td class="center"><!--{$arrORDERSTATUS[$status]}--></td>
<td class="center">
<input type="checkbox" name="pdf_order_id[]" value="<!--{$arrResults[cnt].order_id}-->" id="pdf_order_id_<!--{$arrResults[cnt].order_id}-->"/><label for="pdf_order_id_<!--{$arrResults[cnt].order_id}-->">一括出力</label><br>
<a href="./" onClick="win02('pdf.php?order_id=<!--{$arrResults[cnt].order_id}-->','pdf_input','620','650'); return false;"><span class="icon_class">個別出力</span></a>
</td>
<td class="center"><a href="?" onclick="fnChangeAction('<!--{$smarty.const.ADMIN_ORDER_EDIT_URLPATH}-->'); fnModeSubmit('pre_edit', 'order_id', '<!--{$arrResults[cnt].order_id}-->'); return false;"><span class="icon_edit">編集</span></a></td>
<td class="center">
<!--{if $arrResults[cnt].order_email|strlen >= 1}-->
<input type="checkbox" name="mail_order_id[]" value="<!--{$arrResults[cnt].order_id}-->" id="mail_order_id_<!--{$arrResults[cnt].order_id}-->"/><label for="mail_order_id_<!--{$arrResults[cnt].order_id}-->">一括通知</label><br>
<a href="?" onclick="fnChangeAction('<!--{$smarty.const.ADMIN_ORDER_MAIL_URLPATH}-->'); fnModeSubmit('pre_edit', 'order_id', '<!--{$arrResults[cnt].order_id}-->'); return false;"><span class="icon_mail">個別通知</span></a>
<!--{/if}-->
</td>
<td class="center"><a href="?" onclick="fnModeSubmit('delete_order', 'order_id', <!--{$arrResults[cnt].order_id}-->); return false;"><span class="icon_delete">削除</span></a></td>
</tr>
<!--{/section}-->
<!--{/if}-->
</table>
<!--{* 検索結果表示テーブル *}-->

<!--{/if}-->

</form>
<!--{/if}-->
</div>