[Svn-src-all:1291] [version-2_5-dev 20180] #975([管理画面]受注管理(受注一覧、登録編集))

nanasess admin @ mail.ec-cube.net
2011年 2月 17日 (木) 19:40:07 JST


Subversion committed to /home/svn/open 20180
http://svn.ec-cube.net/open_trac/changeset/20180
┌────────────────────────────┐
│更新者 :  nanasess                                     │
│更新日時:  2011-02-17 19:40:06 +0900 (木, 17  2月 2011)│
└────────────────────────────┘

Log:
--------------------------------------------------------
#975([管理画面]受注管理(受注一覧、登録編集))
 * 受注登録/編集ページ
 * 配送方法を選択できるよう追加カスタマイズ
#642(共通ロジックの機能向上)
 * SC_FormParam の処理を多次元配列へ対応
 * SC_Helper_DB::sfUpdateOrderNameCol(), SC_Helper_DB::sfUpdateOrderStatus() を SC_Helper_Purchase へ移動


Changed:                      [U:修正,A:追加,D:削除]
--------------------------------------------------------
U   branches/version-2_5-dev/data/Smarty/templates/admin/order/edit.tpl
U   branches/version-2_5-dev/data/Smarty/templates/admin/order/multiple.tpl
U   branches/version-2_5-dev/data/class/SC_FormParam.php
U   branches/version-2_5-dev/data/class/helper/SC_Helper_DB.php
U   branches/version-2_5-dev/data/class/helper/SC_Helper_Purchase.php
U   branches/version-2_5-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php
U   branches/version-2_5-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Status.php

変更: branches/version-2_5-dev/data/Smarty/templates/admin/order/edit.tpl
===================================================================
--- branches/version-2_5-dev/data/Smarty/templates/admin/order/edit.tpl	2011-02-17 05:16:23 UTC (rev 20179)
+++ branches/version-2_5-dev/data/Smarty/templates/admin/order/edit.tpl	2011-02-17 10:40:06 UTC (rev 20180)
@@ -26,26 +26,25 @@
     function fnEdit(customer_id) {
         document.form1.action = '<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->customer/edit.php';
         document.form1.mode.value = "edit"
-        document.form1['edit_customer_id'].value = customer_id;
+        document.form1['customer_id'].value = customer_id;
         document.form1.submit();
         return false;
     }
 
     function fnCopyFromOrderData() {
         df = document.form1;
-
-        df.shipping_name01_0.value = df.order_name01.value;
-        df.shipping_name02_0.value = df.order_name02.value;
-        df.shipping_kana01_0.value = df.order_kana01.value;
-        df.shipping_kana02_0.value = df.order_kana02.value;
-        df.shipping_zip01_0.value = df.order_zip01.value;
-        df.shipping_zip02_0.value = df.order_zip02.value;
-        df.shipping_tel01_0.value = df.order_tel01.value;
-        df.shipping_tel02_0.value = df.order_tel02.value;
-        df.shipping_tel03_0.value = df.order_tel03.value;
-        df.shipping_pref_0.value = df.order_pref.value;
-        df.shipping_addr01_0.value = df.order_addr01.value;
-        df.shipping_addr02_0.value = df.order_addr02.value;
+        df['shipping_name01[0]'].value = df.order_name01.value;
+        df['shipping_name02[0]'].value = df.order_name02.value;
+        df['shipping_kana01[0]'].value = df.order_kana01.value;
+        df['shipping_kana02[0]'].value = df.order_kana02.value;
+        df['shipping_zip01[0]'].value = df.order_zip01.value;
+        df['shipping_zip02[0]'].value = df.order_zip02.value;
+        df['shipping_tel01[0]'].value = df.order_tel01.value;
+        df['shipping_tel02[0]'].value = df.order_tel02.value;
+        df['shipping_tel03[0]'].value = df.order_tel03.value;
+        df['shipping_pref[0]'].value = df.order_pref.value;
+        df['shipping_addr01[0]'].value = df.order_addr01.value;
+        df['shipping_addr02[0]'].value = df.order_addr02.value;
     }
 
     function fnFormConfirm() {
@@ -72,8 +71,8 @@
 //-->
 </script>
 <form name="form1" id="form1" method="post" action="?">
-<input type="hidden" name="mode" value="<!--{$tpl_mode|default:"edit"}-->" />
-<input type="hidden" name="order_id" value="<!--{$tpl_order_id}-->" />
+<input type="hidden" name="mode" value="<!--{$tpl_mode|default:"edit"|h}-->" />
+<input type="hidden" name="order_id" value="<!--{$arrForm.order_id.value|h}-->" />
 <input type="hidden" name="edit_customer_id" value="" />
 <input type="hidden" name="anchor_key" value="" />
 <input type="hidden" id="add_product_id" name="add_product_id" value="" />
@@ -90,7 +89,7 @@
         <!--{if $tpl_mode != 'add'}-->
         <tr>
             <th>帳票出力</th>
-            <td><a class="btn-normal" href="javascript:;" onclick="win02('pdf.php?order_id=<!--{$arrForm.order_id.value}-->','pdf','615','650'); return false;">帳票出力</a></td>
+            <td><a class="btn-normal" href="javascript:;" onclick="win02('pdf.php?order_id=<!--{$arrForm.order_id.value|h}-->','pdf','615','650'); return false;">帳票出力</a></td>
         </tr>
         <!--{/if}-->
         <tr>
@@ -99,7 +98,7 @@
         </tr>
         <tr>
             <th>受注日</th>
-            <td><!--{$arrForm.create_date.value|sfDispDBDate}--><input type="hidden" name="create_date" value="<!--{$arrForm.create_date.value}-->" /></td>
+            <td><!--{$arrForm.create_date.value|sfDispDBDate|h}--><input type="hidden" name="create_date" value="<!--{$arrForm.create_date.value|h}-->" /></td>
         </tr>
         <tr>
             <th>対応状況</th>
@@ -117,11 +116,11 @@
         </tr>
         <tr>
             <th>入金日</th>
-            <td><!--{$arrForm.payment_date.value|sfDispDBDate|default:"未入金"}--></td>
+            <td><!--{$arrForm.payment_date.value|sfDispDBDate|default:"未入金"|h}--></td>
         </tr>
         <tr>
             <th>発送日</th>
-            <td><!--{$arrForm.commit_date.value|sfDispDBDate|default:"未発送"}--></td>
+            <td><!--{$arrForm.commit_date.value|sfDispDBDate|default:"未発送"|h}--></td>
         </tr>
     </table>
 
@@ -139,7 +138,7 @@
             <td>
                 <!--{if $arrForm.customer_id.value > 0}-->
                     <!--{$arrForm.customer_id.value}-->
-                    <input type="hidden" name="customer_id" value="<!--{$arrForm.customer_id.value}-->" />
+                    <input type="hidden" name="customer_id" value="<!--{$arrForm.customer_id.value|h}-->" />
                 <!--{else}-->
                    (非会員)
                 <!--{/if}-->
@@ -239,14 +238,14 @@
     <a name="order_products"></a>
     <h2 id="order_products">
         受注商品情報
-        <a class="btn-normal" href="javascript:;" name="cheek" onclick="fnModeSubmit('cheek','anchor_key','order_products');">計算結果の確認</a>
-        <a class="btn-normal" href="javascript:;" name="add_product" onclick="win03('<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->order/product_select.php<!--{if $tpl_order_id}-->?order_id=<!--{$tpl_order_id}--><!--{/if}-->', 'search', '615', '500'); return false;">商品の追加</a>
+        <a class="btn-normal" href="javascript:;" name="recalculate" onclick="fnModeSubmit('recalculate','anchor_key','order_products');">計算結果の確認</a>
+        <a class="btn-normal" href="javascript:;" name="add_product" onclick="win03('<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->order/product_select.php?order_id=<!--{$arrForm.order_id.value|h}-->', 'search', '615', '500'); return false;">商品の追加</a>
     </h2>
-    <!--{if $arrErr.product_id || $arrErr.quantity || $arrErr.price}-->
-        <span class="attention"><!--{$arrErr.product_id}--></span>
-        <span class="attention"><!--{$arrErr.quantity}--></span>
-        <span class="attention"><!--{$arrErr.price}--></span>
+
+    <!--{if $arrErr.product_id}-->
+        <span class="attention">※ 商品が選択されていません。</span>
     <!--{/if}-->
+
     <table class="list" id="order-edit-products">
         <tr>
             <th class="id">商品コード</th>
@@ -257,31 +256,39 @@
             <th class="price">小計</th>
         </tr>
         <!--{section name=cnt loop=$arrForm.quantity.value}-->
-        <!--{assign var=key value="`$smarty.section.cnt.index`"}-->
+        <!--{assign var=product_index value="`$smarty.section.cnt.index`"}-->
         <tr>
             <td>
-                <!--{$arrForm.product_code.value[$key]|h}-->
-                <input type="hidden" name="product_code[<!--{$key}-->]" value="<!--{$arrForm.product_code.value[$key]}-->" id="product_code_<!--{$key}-->" />
+                <!--{$arrForm.product_code.value[$product_index]|h}-->
+                <input type="hidden" name="product_code[<!--{$product_index}-->]" value="<!--{$arrForm.product_code.value[$product_index]|h}-->" id="product_code_<!--{$product_index}-->" />
             </td>
             <td>
-                <!--{$arrForm.product_name.value[$key]|h}-->/<!--{$arrForm.classcategory_name1.value[$key]|default:"(なし)"|h}-->/<!--{$arrForm.classcategory_name2.value[$key]|default:"(なし)"|h}-->
-                <input type="hidden" name="product_name[<!--{$key}-->]" value="<!--{$arrForm.product_name.value[$key]}-->" id="product_name_<!--{$key}-->" />
-                <input type="hidden" name="classcategory_name1[<!--{$key}-->]" value="<!--{$arrForm.classcategory_name1.value[$key]}-->" id="classcategory_name1_<!--{$key}-->" />
-                <input type="hidden" name="classcategory_name2[<!--{$key}-->]" value="<!--{$arrForm.classcategory_name2.value[$key]}-->" id="classcategory_name2_<!--{$key}-->" />
+                <!--{$arrForm.product_name.value[$product_index]|h}-->/<!--{$arrForm.classcategory_name1.value[$product_index]|default:"(なし)"|h}-->/<!--{$arrForm.classcategory_name2.value[$product_index]|default:"(なし)"|h}-->
+                <input type="hidden" name="product_name[<!--{$product_index}-->]" value="<!--{$arrForm.product_name.value[$product_index]|h}-->" id="product_name_<!--{$product_index}-->" />
+                <input type="hidden" name="classcategory_name1[<!--{$product_index}-->]" value="<!--{$arrForm.classcategory_name1.value[$product_index]|h}-->" id="classcategory_name1_<!--{$product_index}-->" />
+                <input type="hidden" name="classcategory_name2[<!--{$product_index}-->]" value="<!--{$arrForm.classcategory_name2.value[$product_index]|h}-->" id="classcategory_name2_<!--{$product_index}-->" />
                 <br />
-                <a class="btn-normal" href="javascript:;" name="change" onclick="win03('<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->order/product_select.php?no=<!--{$key}--><!--{if $tpl_order_id}-->&order_id=<!--{$tpl_order_id}--><!--{/if}-->', 'search', '615', '500'); return false;">変更</a>
-                <!--{if $product_count > 1}-->
-                    <a class="btn-normal" href="javascript:;" name="delete" onclick="fnSetFormVal('form1', 'delete_no', <!--{$key}-->); fnModeSubmit('delete_product','anchor_key','order_products'); return false;">削除</a>
+                <a class="btn-normal" href="javascript:;" name="change" onclick="win03('<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->order/product_select.php?no=<!--{$product_index}-->&amp;order_id=<!--{$arrForm.order_id.value|h}-->', 'search', '615', '500'); return false;">変更</a>
+                <!--{if count($arrForm.quantity.value) > 1}-->
+                    <a class="btn-normal" href="javascript:;" name="delete" onclick="fnSetFormVal('form1', 'delete_no', <!--{$product_index}-->); fnModeSubmit('delete_product','anchor_key','order_products'); return false;">削除</a>
                 <!--{/if}-->
-            <input type="hidden" name="product_type_id[<!--{$key}-->]" value="<!--{$arrForm.product_type_id.value[$key]}-->" id="product_type_id_<!--{$key}-->" />
-            <input type="hidden" name="product_id[<!--{$key}-->]" value="<!--{$arrForm.product_id.value[$key]}-->" id="product_id_<!--{$key}-->" />
-            <input type="hidden" name="product_class_id[<!--{$key}-->]" value="<!--{$arrForm.product_class_id.value[$key]}-->" id="product_class_id_<!--{$key}-->" />
-            <input type="hidden" name="point_rate[<!--{$key}-->]" value="<!--{$arrForm.point_rate.value[$key]}-->" id="point_rate_<!--{$key}-->" />
+            <input type="hidden" name="product_type_id[<!--{$product_index}-->]" value="<!--{$arrForm.product_type_id.value[$product_index]|h}-->" id="product_type_id_<!--{$product_index}-->" />
+            <input type="hidden" name="product_id[<!--{$product_index}-->]" value="<!--{$arrForm.product_id.value[$product_index]|h}-->" id="product_id_<!--{$product_index}-->" />
+            <input type="hidden" name="product_class_id[<!--{$product_index}-->]" value="<!--{$arrForm.product_class_id.value[$product_index]|h}-->" id="product_class_id_<!--{$product_index}-->" />
+            <input type="hidden" name="point_rate[<!--{$product_index}-->]" value="<!--{$arrForm.point_rate.value[$product_index]|h}-->" id="point_rate_<!--{$product_index}-->" />
             </td>
-            <td align="center"><input type="text" name="price[<!--{$key}-->]" value="<!--{$arrForm.price.value[$key]|h}-->" size="6" class="box6" maxlength="<!--{$arrForm.price.length}-->" id="price_<!--{$key}-->"/> 円</td>
-            <td align="center"><input type="text" name="quantity[<!--{$key}-->]" value="<!--{$arrForm.quantity.value[$key]|h}-->" size="3" class="box3" maxlength="<!--{$arrForm.quantity.length}-->" id="quantity_<!--{$key}-->" /></td>
-            <!--{assign var=price value=`$arrForm.price.value[$key]`}-->
-            <!--{assign var=quantity value=`$arrForm.quantity.value[$key]`}-->
+            <td align="center">
+              <!--{assign var=key value="price"}-->
+              <span class="attention"><!--{$arrErr[$key][$product_index]}--></span>
+              <input type="text" name="<!--{$key}-->[<!--{$product_index}-->]" value="<!--{$arrForm[$key].value[$product_index]|h}-->" size="6" class="box6" maxlength="<!--{$arrForm[$key].length}-->" style="<!--{$arrErr[$key][$product_index]|sfGetErrorColor}-->" id="<!--{$key}-->_<!--{$product_index}-->" /> 円
+            </td>
+            <td align="center">
+              <!--{assign var=key value="quantity"}-->
+              <span class="attention"><!--{$arrErr[$key][$product_index]}--></span>
+              <input type="text" name="<!--{$key}-->[<!--{$product_index}-->]" value="<!--{$arrForm[$key].value[$product_index]|h}-->" size="3" class="box3" maxlength="<!--{$arrForm[$key].length}-->" style="<!--{$arrErr[$key][$product_index]|sfGetErrorColor}-->" id="<!--{$key}-->_<!--{$product_index}-->" />
+            </td>
+            <!--{assign var=price value=`$arrForm.price.value[$product_index]`}-->
+            <!--{assign var=quantity value=`$arrForm.quantity.value[$product_index]`}-->
             <td class="right"><!--{$price|sfCalcIncTax:$arrInfo.tax:$arrInfo.tax_rule|number_format}--> 円</td>
             <td class="right"><!--{$price|sfCalcIncTax:$arrInfo.tax:$arrInfo.tax_rule|sfMultiply:$quantity|number_format}-->円</td>
         </tr>
@@ -375,16 +382,16 @@
     <!--{section name=shipping loop=$arrForm.shipping_quantity.value}-->
     <!--{assign var=shipping_index value="`$smarty.section.shipping.index`"}-->
 
-    <!--{assign var=shipping_id value=$arrShippingIds[$shipping_index]}-->
     <!--{if $arrForm.shipping_quantity.value > 1}-->
     <h3>お届け先<!--{$smarty.section.shipping.iteration}--></h3>
     <!--{/if}-->
-    <input type="hidden" name="shipping_id_<!--{$shipping_id}-->" value="<!--{$shipping_id}-->" id="shipping_id_<!--{$shipping_id}-->" />
+    <!--{assign var=key value="shipping_id"}-->
+    <input type="hidden" name="<!--{$key}-->[<!--{$shipping_index}-->]" value="<!--{$arrForm[$key].value[$shipping_index]|default:"0"|h}-->" id="<!--{$key}-->_<!--{$shipping_index}-->" />
     <!--{if $arrForm.shipping_quantity.value > 1}-->
-    <!--{assign var=product_quantity value="shipping_product_quantity_`$shipping_id`"}-->
-    <input type="hidden" name="<!--{$product_quantity}-->" value="<!--{$arrForm[$product_quantity].value|h}-->" />
+    <!--{assign var=product_quantity value="shipping_product_quantity"}-->
+    <input type="hidden" name="<!--{$product_quantity}-->[<!--{$shipping_index}-->]" value="<!--{$arrForm[$product_quantity].value[$shipping_index]|h}-->" />
 
-    <!--{if $arrForm[$product_quantity].value > 0}-->
+    <!--{if $arrForm[$product_quantity].value[$shipping_index] > 0}-->
     <table class="list" id="order-edit-products">
       <tr>
         <th class="id">商品コード</th>
@@ -392,36 +399,35 @@
         <th class="price">単価</th>
         <th class="qty">数量</th>
       </tr>
-      <!--{section name=item loop=$arrForm[$product_quantity].value}-->
+      <!--{section name=item loop=$arrForm[$product_quantity].value[$shipping_index]}-->
       <!--{assign var=item_index value="`$smarty.section.item.index`"}-->
-      <!--{assign var=product_class_id value=$arrProductClassIds[$shipping_index][$item_index]}-->
 
       <tr>
         <td>
-          <!--{assign var=key value="product_class_id_`$shipping_id`_`$product_class_id`"}-->
-          <input type="hidden" name="<!--{$key}-->" value="<!--{$arrForm[$key].value|h}-->" />
-          <!--{assign var=key value="product_code_`$shipping_id`_`$product_class_id`"}-->
-          <input type="hidden" name="<!--{$key}-->" value="<!--{$arrForm[$key].value|h}-->" />
-          <!--{$arrForm[$key].value|h}-->
+          <!--{assign var=key value="shipment_product_class_id"}-->
+          <input type="hidden" name="<!--{$key}-->[<!--{$shipping_index}-->][<!--{$item_index}-->]" value="<!--{$arrForm[$key].value[$shipping_index][$item_index]|h}-->" />
+          <!--{assign var=key value="shipment_product_code"}-->
+          <input type="hidden" name="<!--{$key}-->[<!--{$shipping_index}-->][<!--{$item_index}-->]" value="<!--{$arrForm[$key].value[$shipping_index][$item_index]|h}-->" />
+          <!--{$arrForm[$key].value[$shipping_index][$item_index]|h}-->
         </td>
         <td>
-          <!--{assign var=key1 value="product_name_`$shipping_id`_`$product_class_id`"}-->
-          <!--{assign var=key2 value="classcategory_name1_`$shipping_id`_`$product_class_id`"}-->
-          <!--{assign var=key3 value="classcategory_name2_`$shipping_id`_`$product_class_id`"}-->
-          <input type="hidden" name="<!--{$key1}-->" value="<!--{$arrForm[$key1].value|h}-->" />
-          <input type="hidden" name="<!--{$key2}-->" value="<!--{$arrForm[$key2].value|h}-->" />
-          <input type="hidden" name="<!--{$key3}-->" value="<!--{$arrForm[$key3].value|h}-->" />
-          <!--{$arrForm[$key1].value|h}-->/<!--{$arrForm[$key2].value|default:"(なし)"|h}-->/<!--{$arrForm[$key3].value|default:"(なし)"|h}-->
+          <!--{assign var=key1 value="shipment_product_name"}-->
+          <!--{assign var=key2 value="shipment_classcategory_name1"}-->
+          <!--{assign var=key3 value="shipment_classcategory_name2"}-->
+          <input type="hidden" name="<!--{$key1}-->[<!--{$shipping_index}-->][<!--{$item_index}-->]" value="<!--{$arrForm[$key1].value[$shipping_index][$item_index]|h}-->" />
+          <input type="hidden" name="<!--{$key2}-->[<!--{$shipping_index}-->][<!--{$item_index}-->]" value="<!--{$arrForm[$key2].value[$shipping_index][$item_index]|h}-->" />
+          <input type="hidden" name="<!--{$key3}-->[<!--{$shipping_index}-->][<!--{$item_index}-->]" value="<!--{$arrForm[$key3].value[$shipping_index][$item_index]|h}-->" />
+          <!--{$arrForm[$key1].value[$shipping_index][$item_index]|h}-->/<!--{$arrForm[$key2].value[$shipping_index][$item_index]|default:"(なし)"|h}-->/<!--{$arrForm[$key3].value[$shipping_index][$item_index]|default:"(なし)"|h}-->
         </td>
         <td class="right">
-          <!--{assign var=key value="price_`$shipping_id`_`$product_class_id`"}-->
-          <!--{$arrForm[$key].value|sfCalcIncTax:$arrInfo.tax:$arrInfo.tax_rule|number_format}-->円
-          <input type="hidden" name="<!--{$key}-->" value="<!--{$arrForm[$key].value|h}-->" />
+          <!--{assign var=key value="shipment_price"}-->
+          <!--{$arrForm[$key].value[$shipping_index][$item_index]|sfCalcIncTax:$arrInfo.tax:$arrInfo.tax_rule|number_format}-->円
+          <input type="hidden" name="<!--{$key}-->[<!--{$shipping_index}-->][<!--{$item_index}-->]" value="<!--{$arrForm[$key].value[$shipping_index][$item_index]|h}-->" />
         </td>
         <td class="right">
-          <!--{assign var=key value="quantity_`$shipping_id`_`$product_class_id`"}-->
-          <!--{$arrForm[$key].value|h}-->
-          <input type="hidden" name="<!--{$key}-->" value="<!--{$arrForm[$key].value|h}-->" />
+          <!--{assign var=key value="shipment_quantity"}-->
+          <!--{$arrForm[$key].value[$shipping_index][$item_index]|h}-->
+          <input type="hidden" name="<!--{$key}-->[<!--{$shipping_index}-->][<!--{$item_index}-->]" value="<!--{$arrForm[$key].value[$shipping_index][$item_index]|h}-->" />
         </td>
       </tr>
       <!--{/section}-->
@@ -433,90 +439,90 @@
         <tr>
             <th>お名前</th>
             <td>
-                <!--{assign var=key1 value="shipping_name01_`$shipping_id`"}-->
-                <!--{assign var=key2 value="shipping_name02_`$shipping_id`"}-->
-                <span class="attention"><!--{$arrErr[$key1]}--><!--{$arrErr[$key2]}--></span>
-                <input type="text" name="<!--{$key1}-->" value="<!--{$arrForm[$key1].value|h}-->" maxlength="<!--{$arrForm[$key1].length}-->" style="<!--{$arrErr[$key1]|sfGetErrorColor}-->" size="15" class="box15" />
-                <input type="text" name="<!--{$key2}-->" value="<!--{$arrForm[$key2].value|h}-->" maxlength="<!--{$arrForm[$key2].length}-->" style="<!--{$arrErr[$key2]|sfGetErrorColor}-->" size="15" class="box15" />
+                <!--{assign var=key1 value="shipping_name01"}-->
+                <!--{assign var=key2 value="shipping_name02"}-->
+                <span class="attention"><!--{$arrErr[$key1][$shipping_index]}--><!--{$arrErr[$key2][$shipping_index]}--></span>
+                <input type="text" name="<!--{$key1}-->[<!--{$shipping_index}-->]" value="<!--{$arrForm[$key1].value[$shipping_index]|h}-->" maxlength="<!--{$arrForm[$key1].length}-->" style="<!--{$arrErr[$key1][$shipping_index]|sfGetErrorColor}-->" size="15" class="box15" />
+                <input type="text" name="<!--{$key2}-->[<!--{$shipping_index}-->]" value="<!--{$arrForm[$key2].value[$shipping_index]|h}-->" maxlength="<!--{$arrForm[$key2].length}-->" style="<!--{$arrErr[$key2][$shipping_index]|sfGetErrorColor}-->" size="15" class="box15" />
             </td>
         </tr>
         <tr>
             <th>お名前(カナ)</th>
             <td>
-                <!--{assign var=key1 value="shipping_kana01_`$shipping_id`"}-->
-                <!--{assign var=key2 value="shipping_kana02_`$shipping_id`"}-->
-                <span class="attention"><!--{$arrErr[$key1]}--><!--{$arrErr[$key2]}--></span>
-                <input type="text" name="<!--{$key1}-->" value="<!--{$arrForm[$key1].value|h}-->" maxlength="<!--{$arrForm[$key1].length}-->" style="<!--{$arrErr[$key1]|sfGetErrorColor}-->" size="15" class="box15" />
-                <input type="text" name="<!--{$key2}-->" value="<!--{$arrForm[$key2].value|h}-->" maxlength="<!--{$arrForm[$key2].length}-->" style="<!--{$arrErr[$key2]|sfGetErrorColor}-->" size="15" class="box15" />
+                <!--{assign var=key1 value="shipping_kana01"}-->
+                <!--{assign var=key2 value="shipping_kana02"}-->
+                <span class="attention"><!--{$arrErr[$key1][$shipping_index]}--><!--{$arrErr[$key2][$shipping_index]}--></span>
+                <input type="text" name="<!--{$key1}-->[<!--{$shipping_index}-->]" value="<!--{$arrForm[$key1].value[$shipping_index]|h}-->" maxlength="<!--{$arrForm[$key1].length}-->" style="<!--{$arrErr[$key1][$shipping_index]|sfGetErrorColor}-->" size="15" class="box15" />
+                <input type="text" name="<!--{$key2}-->[<!--{$shipping_index}-->]" value="<!--{$arrForm[$key2].value[$shipping_index]|h}-->" maxlength="<!--{$arrForm[$key2].length}-->" style="<!--{$arrErr[$key2][$shipping_index]|sfGetErrorColor}-->" size="15" class="box15" />
             </td>
         </tr>
         <tr>
             <th>TEL</th>
             <td>
-                <!--{assign var=key1 value="shipping_tel01_`$shipping_id`"}-->
-                <!--{assign var=key2 value="shipping_tel02_`$shipping_id`"}-->
-                <!--{assign var=key3 value="shipping_tel03_`$shipping_id`"}-->
-                <span class="attention"><!--{$arrErr[$key1]}--></span>
-                <span class="attention"><!--{$arrErr[$key2]}--></span>
-                <span class="attention"><!--{$arrErr[$key3]}--></span>
-                <input type="text" name="<!--{$arrForm[$key1].keyname}-->" value="<!--{$arrForm[$key1].value|h}-->" maxlength="<!--{$arrForm[$key1].length}-->" style="<!--{$arrErr[$key1]|sfGetErrorColor}-->" size="6" class="box6" /> -
-                <input type="text" name="<!--{$arrForm[$key2].keyname}-->" value="<!--{$arrForm[$key2].value|h}-->" maxlength="<!--{$arrForm[$key2].length}-->" style="<!--{$arrErr[$key2]|sfGetErrorColor}-->" size="6" class="box6" /> -
-                <input type="text" name="<!--{$arrForm[$key3].keyname}-->" value="<!--{$arrForm[$key3].value|h}-->" maxlength="<!--{$arrForm[$key3].length}-->" style="<!--{$arrErr[$key3]|sfGetErrorColor}-->" size="6" class="box6" />
+                <!--{assign var=key1 value="shipping_tel01"}-->
+                <!--{assign var=key2 value="shipping_tel02"}-->
+                <!--{assign var=key3 value="shipping_tel03"}-->
+                <span class="attention"><!--{$arrErr[$key1][$shipping_index]}--></span>
+                <span class="attention"><!--{$arrErr[$key2][$shipping_index]}--></span>
+                <span class="attention"><!--{$arrErr[$key3][$shipping_index]}--></span>
+                <input type="text" name="<!--{$key1}-->[<!--{$shipping_index}-->]" value="<!--{$arrForm[$key1].value[$shipping_index]|h}-->" maxlength="<!--{$arrForm[$key1].length}-->" style="<!--{$arrErr[$key1]|sfGetErrorColor}-->" size="6" class="box6" /> -
+                <input type="text" name="<!--{$key2}-->[<!--{$shipping_index}-->]" value="<!--{$arrForm[$key2].value[$shipping_index]|h}-->" maxlength="<!--{$arrForm[$key2].length}-->" style="<!--{$arrErr[$key2]|sfGetErrorColor}-->" size="6" class="box6" /> -
+                <input type="text" name="<!--{$key3}-->[<!--{$shipping_index}-->]" value="<!--{$arrForm[$key3].value[$shipping_index]|h}-->" maxlength="<!--{$arrForm[$key3].length}-->" style="<!--{$arrErr[$key3]|sfGetErrorColor}-->" size="6" class="box6" />
             </td>
         </tr>
         <tr>
             <th>住所</th>
             <td>
-                <!--{assign var=key1 value="shipping_zip01_`$shipping_id`"}-->
-                <!--{assign var=key2 value="shipping_zip02_`$shipping_id`"}-->
-                <span class="attention"><!--{$arrErr[$key1]}--><!--{$arrErr[$key2]}--></span>
+                <!--{assign var=key1 value="shipping_zip01"}-->
+                <!--{assign var=key2 value="shipping_zip02"}-->
+                <span class="attention"><!--{$arrErr[$key1][$shipping_index]}--><!--{$arrErr[$key2][$shipping_index]}--></span>
                 〒
-                <input type="text" name="<!--{$key1}-->" value="<!--{$arrForm[$key1].value|h}-->" maxlength="<!--{$arrForm[$key1].length}-->" style="<!--{$arrErr[$key1]|sfGetErrorColor}-->" size="6" class="box6" />
+                <input type="text" name="<!--{$key1}-->[<!--{$shipping_index}-->]" value="<!--{$arrForm[$key1].value[$shipping_index]|h}-->" maxlength="<!--{$arrForm[$key1].length}-->" style="<!--{$arrErr[$key1][$shipping_index]|sfGetErrorColor}-->" size="6" class="box6" />
                  -
-                <input type="text" name="<!--{$key2}-->" value="<!--{$arrForm[$key2].value|h}-->" maxlength="<!--{$arrForm[$key2].length}-->" style="<!--{$arrErr[$key2]|sfGetErrorColor}-->" size="6" class="box6" />
+                <input type="text" name="<!--{$key2}-->[<!--{$shipping_index}-->]" value="<!--{$arrForm[$key2].value[$shipping_index]|h}-->" maxlength="<!--{$arrForm[$key2].length}-->" style="<!--{$arrErr[$key2][$shipping_index]|sfGetErrorColor}-->" size="6" class="box6" />
                 <a class="btn-normal" href="javascript:;" name="address_input" onclick="fnCallAddress('<!--{$smarty.const.INPUT_ZIP_URLPATH}-->', 'shipping_zip01', 'shipping_zip02', 'shipping_pref', 'shipping_addr01'); return false;">住所入力</a><br />
-                <!--{assign var=key value="shipping_pref_`$shipping_id`"}-->
-                <span class="attention"><!--{$arrErr[$key]}--></span>
-                <select class="top" name="<!--{$key}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->">
+                <!--{assign var=key value="shipping_pref"}-->
+                <span class="attention"><!--{$arrErr[$key][$shipping_index]}--></span>
+                <select class="top" name="<!--{$key}-->[<!--{$shipping_index}-->]" style="<!--{$arrErr[$key]|sfGetErrorColor}-->">
                     <option value="" selected="">都道府県を選択</option>
-                    <!--{html_options options=$arrPref selected=$arrForm[$key].value}-->
+                    <!--{html_options options=$arrPref selected=$arrForm[$key].value[$shipping_index]}-->
                 </select><br />
-                <!--{assign var=key value="shipping_addr01_`$shipping_id`"}-->
-                <span class="attention"><!--{$arrErr[$key]}--></span>
-                <input type="text" name="<!--{$key}-->" value="<!--{$arrForm[$key].value|h}-->" size="60" class="box60 top" maxlength="<!--{$arrForm[$key].length}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" /><br />
-                <!--{assign var=key value="shipping_addr02_`$shipping_id`"}-->
-                <span class="attention"><!--{$arrErr[$key]}--></span>
-                <input type="text" name="<!--{$key}-->" value="<!--{$arrForm[$key].value|h}-->" size="60" class="box60" maxlength="<!--{$arrForm[$key].length}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" />
+                <!--{assign var=key value="shipping_addr01"}-->
+                <span class="attention"><!--{$arrErr[$key][$shipping_index]}--></span>
+                <input type="text" name="<!--{$key}-->[<!--{$shipping_index}-->]" value="<!--{$arrForm[$key].value[$shipping_index]|h}-->" size="60" class="box60 top" maxlength="<!--{$arrForm[$key].length}-->" style="<!--{$arrErr[$key][$shipping_index]|sfGetErrorColor}-->" /><br />
+                <!--{assign var=key value="shipping_addr02"}-->
+                <span class="attention"><!--{$arrErr[$key][$shipping_index]}--></span>
+                <input type="text" name="<!--{$key}-->[<!--{$shipping_index}-->]" value="<!--{$arrForm[$key].value[$shipping_index]|h}-->" size="60" class="box60" maxlength="<!--{$arrForm[$key].length}-->" style="<!--{$arrErr[$key][$shipping_index]|sfGetErrorColor}-->" />
             </td>
         </tr>
         <tr>
             <th>お届け時間</th>
             <td>
-                <!--{assign var=key value="time_id_`$shipping_id`"}-->
-                <span class="attention"><!--{$arrErr[$key]}--></span>
-                <select name="<!--{$key}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->">
+                <!--{assign var=key value="time_id"}-->
+                <span class="attention"><!--{$arrErr[$key][$shipping_index]}--></span>
+                <select name="<!--{$key}-->[<!--{$shipping_index}-->]" style="<!--{$arrErr[$key]|sfGetErrorColor}-->">
                     <option value="" selected="0">指定無し</option>
-                    <!--{html_options options=$arrDelivTime selected=$arrForm[$key].value}-->
+                    <!--{html_options options=$arrDelivTime selected=$arrForm[$key].value[$shipping_index]}-->
                 </select>
             </td>
         </tr>
         <tr>
             <th>お届け日</th>
             <td>
-              <!--{assign var=key1 value="shipping_date_year_`$shipping_id`"}-->
-              <!--{assign var=key2 value="shipping_date_month_`$shipping_id`"}-->
-              <!--{assign var=key3 value="shipping_date_day_`$shipping_id`"}-->
+              <!--{assign var=key1 value="shipping_date_year"}-->
+              <!--{assign var=key2 value="shipping_date_month"}-->
+              <!--{assign var=key3 value="shipping_date_day"}-->
               <span class="attention"><!--{$arrErr[$key1]}--></span>
               <span class="attention"><!--{$arrErr[$key2]}--></span>
               <span class="attention"><!--{$arrErr[$key3]}--></span>
-              <select name="<!--{$key1}-->" style="<!--{$arrErr[$key1]|sfGetErrorColor}-->">
-              <!--{html_options options=$arrYearShippingDate selected=$arrForm[$key1].value|default:""}-->
+              <select name="<!--{$key1}-->[<!--{$shipping_index}-->]" style="<!--{$arrErr[$key1]|sfGetErrorColor}-->">
+              <!--{html_options options=$arrYearShippingDate selected=$arrForm[$key1].value[$shipping_index]|default:""}-->
               </select>年
-              <select name="<!--{$key2}-->" style="<!--{$arrErr[$key2]|sfGetErrorColor}-->">
-              <!--{html_options options=$arrMonthShippingDate selected=$arrForm[$key2].value|default:""}-->
+              <select name="<!--{$key2}-->[<!--{$shipping_index}-->]" style="<!--{$arrErr[$key2]|sfGetErrorColor}-->">
+              <!--{html_options options=$arrMonthShippingDate selected=$arrForm[$key2].value[$shipping_index]|default:""}-->
               </select>月
-              <select name="<!--{$key3}-->" style="<!--{$arrErr[$key3]|sfGetErrorColor}-->">
-              <!--{html_options options=$arrDayShippingDate selected=$arrForm[$key3].value|default:""}-->
+              <select name="<!--{$key3}-->[<!--{$shipping_index}-->]" style="<!--{$arrErr[$key3]|sfGetErrorColor}-->">
+              <!--{html_options options=$arrDayShippingDate selected=$arrForm[$key3].value[$shipping_index]|default:""}-->
               </select>日
             </td>
         </tr>
@@ -525,13 +531,25 @@
     <!--{/section}-->
     <!--▲お届け先情報ここまで-->
 
+    <a name="deliv"></a>
     <table class="form">
         <tr>
+            <th>配送業者<br /><span class="attention">(配送業者の変更に伴う送料の変更は手動にてお願いします。)</span></th>
+            <td>
+                <!--{assign var=key value="deliv_id"}-->
+                <span class="attention"><!--{$arrErr[$key]}--></span>
+                <select name="<!--{$key}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" onchange="fnModeSubmit('deliv','anchor_key','deliv');">
+                    <option value="" selected="">選択してください</option>
+                    <!--{html_options options=$arrDeliv selected=$arrForm[$key].value}-->
+                </select>
+            </td>
+        </tr>
+        <tr>
             <th>お支払方法<br /><span class="attention">(お支払方法の変更に伴う手数料の変更は手動にてお願いします。)</span></th>
             <td>
                 <!--{assign var=key value="payment_id"}-->
                 <span class="attention"><!--{$arrErr[$key]}--></span>
-                <select name="<!--{$key}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" onchange="fnModeSubmit('payment','anchor_key','order_products');">
+                <select name="<!--{$key}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" onchange="fnModeSubmit('payment','anchor_key','deliv');">
                     <option value="" selected="">選択してください</option>
                     <!--{html_options options=$arrPayment selected=$arrForm[$key].value}-->
                 </select>

変更: branches/version-2_5-dev/data/Smarty/templates/admin/order/multiple.tpl
===================================================================
--- branches/version-2_5-dev/data/Smarty/templates/admin/order/multiple.tpl	2011-02-17 05:16:23 UTC (rev 20179)
+++ branches/version-2_5-dev/data/Smarty/templates/admin/order/multiple.tpl	2011-02-17 10:40:06 UTC (rev 20180)
@@ -28,59 +28,71 @@
 self.moveTo(20,20);self.focus();
 $(function() {
 
-    var product_class_id = window.opener.jQuery('input[id^=product_class_id_]');
-    var product_code = window.opener.jQuery('input[id^=product_code_]');
-    var product_name = window.opener.jQuery('input[id^=product_name_]');
-    var classcategory_name1 = window.opener.jQuery('input[id^=classcategory_name1_]');
-    var classcategory_name2 = window.opener.jQuery('input[id^=classcategory_name2_]');
-    var price = window.opener.jQuery('input[id^=price_]');
-    var quantity = window.opener.jQuery('input[id^=quantity_]');
-    var shipping_id = window.opener.jQuery('input[id^=shipping_id_]');
-    var shipping_name01 = window.opener.jQuery('input[name^=shipping_name01_]');
-    var shipping_name02 = window.opener.jQuery('input[name^=shipping_name02_]');
-    var shipping_pref = window.opener.jQuery('select[name^=shipping_pref_] option:selected');
-    var shipping_addr01 = window.opener.jQuery('input[name^=shipping_addr01_]');
-    var shipping_addr02 = window.opener.jQuery('input[name^=shipping_addr02_]');
+    var product_class_id = window.opener.jQuery('input[id^=product_class_id]');
+    var product_code = window.opener.jQuery('input[id^=product_code]');
+    var product_name = window.opener.jQuery('input[id^=product_name]');
+    var classcategory_name1 = window.opener.jQuery('input[id^=classcategory_name1]');
+    var classcategory_name2 = window.opener.jQuery('input[id^=classcategory_name2]');
+    var price = window.opener.jQuery('input[id^=price]');
+    var quantity = window.opener.jQuery('input[id^=quantity]');
+    var shipping_id = window.opener.jQuery('input[id^=shipping_id]');
+    var shipping_name01 = window.opener.jQuery('input[name^=shipping_name01]');
+    var shipping_name02 = window.opener.jQuery('input[name^=shipping_name02]');
+    var shipping_pref = window.opener.jQuery('select[name^=shipping_pref] option:selected');
+    var shipping_addr01 = window.opener.jQuery('input[name^=shipping_addr01]');
+    var shipping_addr02 = window.opener.jQuery('input[name^=shipping_addr02]');
 
     var index = 0;
     for (var i = 0; i < product_class_id.length; i++) {
 
         for (var j = 0; j < $(quantity[i]).val(); j++) {
 
+            // 表示商品名
+            var dispname = '';
+
             // 商品規格ID
             var idfield = $('<input type="hidden" />')
-                .attr({'name': 'multiple_product_class_id' + index})
+                .attr({'name': 'multiple_product_class_id[' + index + ']'})
                 .val($(product_class_id[i]).val());
 
             // 商品コード
             var codefield = $('<input type="hidden" />')
-                .attr({'name': 'multiple_product_code' + index})
+                .attr({'name': 'multiple_product_code['+ index + ']'})
                 .val($(product_code[i]).val());
 
             // 商品名
             var namefield = $('<input type="hidden" />')
-                .attr({'name': 'multiple_product_name' + index})
+                .attr({'name': 'multiple_product_name[' + index + ']'})
                 .val($(product_name[i]).val());
+            dispname = $(product_name[i]).val();
 
             // 規格1
             var class1field = $('<input type="hidden" />')
-                .attr({'name': 'multiple_classcategory_name1' + index})
+                .attr({'name': 'multiple_classcategory_name1[' + index + ']'})
                 .val($(classcategory_name1[i]).val());
 
+            if ($(classcategory_name1[i]).val() != '') {
+                dispname += '<br />' + $(classcategory_name1[i]).val();
+            }
+
             // 規格2
             var class2field = $('<input type="hidden" />')
-                .attr({'name': 'multiple_classcategory_name2' + index})
+                .attr({'name': 'multiple_classcategory_name2[' + index + ']'})
                 .val($(classcategory_name2[i]).val());
 
+            if ($(classcategory_name2[i]).val() != '') {
+                dispname += '<br />' + $(classcategory_name2[i]).val();
+            }
+
             // 単価
             var pricefield = $('<input type="hidden" />')
-                .attr({'name': 'multiple_price' + index})
+                .attr({'name': 'multiple_price[' + index + ']'})
                 .val($(price[i]).val());
 
 
             // 数量
             var qfield = $('<input type="text" />')
-                .attr({'name': 'multiple_quantity' + index,
+                .attr({'name': 'multiple_quantity[' + index + ']',
                        'size': 4})
                 .val(1);
 
@@ -95,13 +107,13 @@
                 .append(qfield);
 
             // お届け先
-            var select = $('<select />').attr('name', 'multiple_shipping' + index);
+            var select = $('<select />').attr('name', 'multiple_shipping_id[' + index + ']');
             var s = $('<td />').append(select);
 
             // 行を生成
             var tr = $('<tr />')
                 .append($('<td />').text($(product_code[i]).val()))
-                .append($('<td />').text($(product_name[i]).val()))
+                .append($('<td />').html(dispname))
                 .append(q)
                 .append(s);
 
@@ -132,11 +144,10 @@
     var div = $('<div />');
     $('input[name^=multiple_], select[name^=multiple_]').each(function() {
         // TODO タグをベタ書きにしないと, innerHTML で value が空になってしまう
-        $(div).append('<input type="text" name="'
+        $(div).append('<input type="hidden" name="'
                       + $(this).attr('name')
                       + '" value="' + $(this).val() + '" />');
     });
-    $(div).append('<input type="hidden" name="multiple_size" value="' + $('input[name^=multiple_product_class_id]').length + '" />');
 
     // window.opener に対する append は IE で動作しない
     window.opener.jQuery('#multiple').html(div.html());

変更: branches/version-2_5-dev/data/class/SC_FormParam.php
===================================================================
--- branches/version-2_5-dev/data/class/SC_FormParam.php	2011-02-17 05:16:23 UTC (rev 20179)
+++ branches/version-2_5-dev/data/class/SC_FormParam.php	2011-02-17 10:40:06 UTC (rev 20180)
@@ -241,61 +241,80 @@
     /**
      * SC_CheckError::doFunc() を再帰的に実行する.
      *
+     * 再帰実行した場合は, エラーメッセージを多次元配列で格納する
+     *
+     * TODO 二次元以上のエラーメッセージへの対応
+     *
      * @param string $disp_name 表示名
      * @param string $func チェック種別
      * @param mixed $value チェック対象の値. 配列の場合は再帰的にチェックする.
      * @param array $arrErr エラーメッセージを格納する配列
      * @param string $error_key エラーメッセージを格納する配列のキー
      * @param integer $length チェック対象の値の長さ
+     * @param integer $depth 再帰実行した場合の深度
+     * @param integer $recursion_count 再帰実行した回数
      * @return void
      */
     function recursionCheck($disp_name, $func, $value, &$arrErr, $error_key,
-                            $length = 0) {
+                            $length = 0, $depth = 0, $recursion_count = 0) {
         if (is_array($value)) {
+            $depth++;
+            $recursion_count = 0;
             foreach ($value as $in) {
                 $this->recursionCheck($disp_name, $func, $in, $arrErr, $error_key,
-                                      $length);
+                                      $length, $depth, $recursion_count);
+                $recursion_count++;
             }
         } else {
-            $objSubErr = new SC_CheckError(array(0 => $value));
-            $objSubErr->doFunc(array($disp_name, 0, $length), array($func));
-            if(count($objSubErr->arrErr) > 0) {
-                foreach($objSubErr->arrErr as $mess) {
-                    if($mess != "") {
-                        $arrErr[$error_key] .= $mess;
+            $objErr = new SC_CheckError(array(0 => $value));
+            $objErr->doFunc(array($disp_name, 0, $length), array($func));
+            if (!SC_Utils_Ex::isBlank($objErr->arrErr)) {
+                foreach($objErr->arrErr as $message) {
+
+                    if(!SC_Utils_Ex::isBlank($message)) {
+                        // 再帰した場合は多次元配列のエラーメッセージを生成
+                        $error_var = '$arrErr[$error_key]';
+                        for ($i = 0; $i < $depth; $i++) {
+                            // FIXME 二次元以上の対応
+                            $error_var .= '[' . $recursion_count . ']';
+                        }
+                        eval($error_var . ' = $message;');
                     }
                 }
             }
         }
     }
 
-    // 入力文字の変換
+    /**
+     * フォームの入力パラメータに応じて, 再帰的に mb_convert_kana 関数を実行する.
+     *
+     * @return voi
+     * @see mb_convert_kana
+     */
     function convParam() {
-        /*
-         *	文字列の変換
-         *	K :  「半角(ハンカク)片仮名」を「全角片仮名」に変換
-         *	C :  「全角ひら仮名」を「全角かた仮名」に変換
-         *	V :  濁点付きの文字を一文字に変換。"K","H"と共に使用します
-         *	n :  「全角」数字を「半角(ハンカク)」に変換
-         *  a :  「全角」英字を「半角」英字に変換
-         */
         $cnt = 0;
         foreach ($this->keyname as $val) {
             if (!isset($this->param[$cnt])) $this->param[$cnt] = "";
+            $this->recursionConvParam($this->param[$cnt], $this->convert[$cnt]);
+            $cnt++;
+        }
+    }
 
-            if(!is_array($this->param[$cnt])) {
-                if($this->convert[$cnt] != "") {
-                    $this->param[$cnt] = mb_convert_kana($this->param[$cnt] ,$this->convert[$cnt]);
-                }
-            } else {
-                $max = count($this->param[$cnt]);
-                for($i = 0; $i < $max; $i++) {
-                    if($this->convert[$cnt] != "") {
-                        $this->param[$cnt][$i] = mb_convert_kana($this->param[$cnt][$i] ,$this->convert[$cnt]);
-                    }
-                }
+    /**
+     * 再帰的に mb_convert_kana を実行する.
+     *
+     * @param mixed $value 変換する値. 配列の場合は再帰的に実行する.
+     * @param string $convert mb_convert_kana の変換オプション
+     */
+    function recursionConvParam(&$value, $convert) {
+        if (is_array($value)) {
+            foreach (array_keys($value) as $key) {
+                $this->recursionConvParam($value[$key], $convert);
             }
-            $cnt++;
+        } else {
+            if (!SC_Utils_Ex::isBlank($value)) {
+                $value = mb_convert_kana($value, $convert);
+            }
         }
     }
 
@@ -416,26 +435,33 @@
      */
     function trimParam($has_wide_space = true) {
         $cnt = 0;
-        $pattern = '/^[  \r\n\t]*(.*?)[  \r\n\t]*$/u';
         foreach ($this->keyname as $val) {
             if (!isset($this->param[$cnt])) $this->param[$cnt] = "";
+            $this->recursionTrim($this->param[$cnt], $has_wide_space);
+            $cnt++;
+        }
+    }
 
-            if (!is_array($this->param[$cnt])) {
+    /**
+     * 再帰的に入力パラメータの先頭及び末尾にある空白文字を削除する.
+     *
+     * @param mixed $value 変換する値. 配列の場合は再帰的に実行する.
+     * @param boolean $has_wide_space 全角空白も削除する場合 true
+     * @return void
+     */
+    function recursionTrim(&$value, $has_wide_space = true) {
+        $pattern = '/^[  \r\n\t]*(.*?)[  \r\n\t]*$/u';
+        if (is_array($value)) {
+            foreach (array_keys($value) as $key) {
+                $this->recursionTrim($value[$key], $convert);
+            }
+        } else {
+            if (!SC_Utils_Ex::isBlank($value)) {
                 if ($has_wide_space) {
-                    $this->param[$cnt] = preg_replace($pattern, '$1', $this->param[$cnt]);
+                    $value = preg_replace($pattern, '$1', $value);
                 }
-                $this->param[$cnt] = trim($this->param[$cnt]);
-            } else {
-                $max = count($this->param[$cnt]);
-                // XXX foreach の方が良い?
-                for ($i = 0; $i < $max; $i++) {
-                    if ($has_wide_space) {
-                        $this->param[$cnt][$i] = preg_replace($pattern, '$1', $this->param[$cnt][$i]);
-                    }
-                    $this->param[$cnt][$i] = trim($this->param[$cnt][$i]);
-                }
+                $value = trim($value);
             }
-            $cnt++;
         }
     }
 

変更: branches/version-2_5-dev/data/class/helper/SC_Helper_DB.php
===================================================================
--- branches/version-2_5-dev/data/class/helper/SC_Helper_DB.php	2011-02-17 05:16:23 UTC (rev 20179)
+++ branches/version-2_5-dev/data/class/helper/SC_Helper_DB.php	2011-02-17 10:40:06 UTC (rev 20180)
@@ -1367,38 +1367,6 @@
     }
 
     /**
-     * 受注の名称列を更新する
-     *
-     * FIXME
-     *
-     * @param integer $order_id 更新対象の注文番号
-     * @param boolean $temp_table 更新対象は「受注_Temp」か
-     * @static
-     */
-    function sfUpdateOrderNameCol($order_id, $temp_table = false) {
-        $objQuery =& SC_Query::getSingletonInstance();
-
-        if ($temp_table) {
-            $tgt_table = 'dtb_order_temp';
-            $sql_where = 'WHERE order_temp_id = ?';
-        } else {
-            $tgt_table = 'dtb_order';
-            $sql_where = 'WHERE order_id = ?';
-        }
-
-        $sql = <<< __EOS__
-            UPDATE
-                {$tgt_table}
-            SET
-                 payment_method = (SELECT payment_method FROM dtb_payment WHERE payment_id = {$tgt_table}.payment_id)
-                ,deliv_time = (SELECT deliv_time FROM dtb_delivtime WHERE time_id = {$tgt_table}.deliv_time_id AND deliv_id = {$tgt_table}.deliv_id)
-            $sql_where
-__EOS__;
-
-        $objQuery->query($sql, array($order_id));
-    }
-
-    /**
      * 店舗基本情報に基づいて税金額を返す
      *
      * @param integer $price 計算対象の金額
@@ -1439,131 +1407,6 @@
     }
 
     /**
-     * 受注.対応状況の更新
-     *
-     * ・必ず呼び出し元でトランザクションブロックを開いておくこと。
-     *
-     * @param integer $orderId 注文番号
-     * @param integer|null $newStatus 対応状況 (null=変更無し)
-     * @param integer|null $newAddPoint 加算ポイント (null=変更無し)
-     * @param integer|null $newUsePoint 使用ポイント (null=変更無し)
-     * @param array $sqlval 更新後の値をリファレンスさせるためのパラメータ
-     * @return void
-     */
-    function sfUpdateOrderStatus($orderId, $newStatus = null, $newAddPoint = null, $newUsePoint = null) {
-        $objQuery =& SC_Query::getSingletonInstance();
-
-        $arrOrderOld = $objQuery->getRow('status, add_point, use_point, customer_id', 'dtb_order', 'order_id = ?', array($orderId));
-
-        // 対応状況が変更無しの場合、DB値を引き継ぐ
-        if (is_null($newStatus)) {
-            $newStatus = $arrOrderOld['status'];
-        }
-
-        // 使用ポイント、DB値を引き継ぐ
-        if (is_null($newUsePoint)) {
-            $newUsePoint = $arrOrderOld['use_point'];
-        }
-
-        // 加算ポイント、DB値を引き継ぐ
-        if (is_null($newAddPoint)) {
-            $newAddPoint = $arrOrderOld['add_point'];
-        }
-
-        if (USE_POINT !== false) {
-            // 顧客.ポイントの加減値
-            $addCustomerPoint = 0;
-
-            // ▼使用ポイント
-            // 変更前の対応状況が利用対象の場合、変更前の使用ポイント分を戻す
-            if (SC_Utils_Ex::sfIsUsePoint($arrOrderOld['status'])) {
-                $addCustomerPoint += $arrOrderOld['use_point'];
-            }
-
-            // 変更後の対応状況が利用対象の場合、変更後の使用ポイント分を引く
-            if (SC_Utils_Ex::sfIsUsePoint($newStatus)) {
-                $addCustomerPoint -= $newUsePoint;
-            }
-            // ▲使用ポイント
-
-            // ▼加算ポイント
-            // 変更前の対応状況が加算対象の場合、変更前の加算ポイント分を戻す
-            if (SC_Utils_Ex::sfIsAddPoint($arrOrderOld['status'])) {
-                $addCustomerPoint -= $arrOrderOld['add_point'];
-            }
-
-            // 変更後の対応状況が加算対象の場合、変更後の加算ポイント分を足す
-            if (SC_Utils_Ex::sfIsAddPoint($newStatus)) {
-                $addCustomerPoint += $newAddPoint;
-            }
-            // ▲加算ポイント
-
-            if ($addCustomerPoint != 0) {
-                // ▼顧客テーブルの更新
-                $sqlval = array();
-                $where = '';
-                $arrVal = array();
-                $arrRawSql = array();
-                $arrRawSqlVal = array();
-
-                $sqlval['update_date'] = 'Now()';
-                $arrRawSql['point'] = 'point + ?';
-                $arrRawSqlVal[] = $addCustomerPoint;
-                $where .= 'customer_id = ?';
-                $arrVal[] = $arrOrderOld['customer_id'];
-
-                $objQuery->update('dtb_customer', $sqlval, $where, $arrVal, $arrRawSql, $arrRawSqlVal);
-                // ▲顧客テーブルの更新
-
-                // 顧客.ポイントをマイナスした場合、
-                if ($addCustomerPoint < 0) {
-                    $sql = 'SELECT point FROM dtb_customer WHERE customer_id = ?';
-                    $point = $objQuery->getOne($sql, array($arrOrderOld['customer_id']));
-                    // 変更後の顧客.ポイントがマイナスの場合、
-                    if ($point < 0) {
-                        // ロールバック
-                        $objQuery->rollback();
-                        // エラー
-                        SC_Utils_Ex::sfDispSiteError(LACK_POINT);
-                    }
-                }
-            }
-        }
-
-        // ▼受注テーブルの更新
-        if (empty($sqlval)) {
-            $sqlval = array();
-        }
-
-        if (USE_POINT !== false) {
-            $sqlval['add_point'] = $newAddPoint;
-            $sqlval['use_point'] = $newUsePoint;
-        }
-        // ステータスが発送済みに変更の場合、発送日を更新
-        if ($arrOrderOld['status'] != ORDER_DELIV && $newStatus == ORDER_DELIV) {
-            $sqlval['commit_date'] = 'Now()';
-        }
-        // ステータスが入金済みに変更の場合、入金日を更新
-        elseif ($arrOrderOld['status'] != ORDER_PRE_END && $newStatus == ORDER_PRE_END) {
-            $sqlval['payment_date'] = 'Now()';
-        }
-
-        $sqlval['status'] = $newStatus;
-        $sqlval['update_date'] = 'Now()';
-
-        $cols = $objQuery->listTableFields('dtb_order');
-        $dest = array();
-        foreach ($sqlval as $key => $val) {
-            if (in_array($key, $cols)) {
-                $dest[$key] = $val;
-            }
-        }
-
-        $objQuery->update('dtb_order', $dest, 'order_id = ?', array($orderId));
-        // ▲受注テーブルの更新
-    }
-
-    /**
      * 指定ファイルが存在する場合 SQL として実行
      *
      * XXX プラグイン用に追加。将来消すかも。

変更: branches/version-2_5-dev/data/class/helper/SC_Helper_Purchase.php
===================================================================
--- branches/version-2_5-dev/data/class/helper/SC_Helper_Purchase.php	2011-02-17 05:16:23 UTC (rev 20179)
+++ branches/version-2_5-dev/data/class/helper/SC_Helper_Purchase.php	2011-02-17 10:40:06 UTC (rev 20180)
@@ -71,8 +71,8 @@
         $orderTemp = $this->getOrderTemp($uniqId);
 
         $orderTemp['status'] = $orderStatus;
-        $orderId = $this->registerOrder($orderTemp, $objCartSession,
-                                        $objCartSession->getKey());
+        $orderId = $this->registerOrderComplete($orderTemp, $objCartSession,
+                                                $objCartSession->getKey());
         $shippingTemp =& $this->getShippingTemp();
         if (count($shippingTemp) > 1) {
             foreach ($shippingTemp as $shippingId => $val) {
@@ -528,20 +528,26 @@
      *
      * $arrParam のうち, dtb_shipping テーブルに存在するカラムのみを登録する.
      *
+     * TODO UPDATE/INSERT にする
+     *
      * @param integer $order_id 受注ID
      * @param array $arrParams 配送情報の連想配列
+     * @param boolean $convert_shipping_date yyyy/mm/dd(EEE) 形式の配送日付を変換する場合 true
      * @return void
      */
-    function registerShipping($order_id, $arrParams) {
+    function registerShipping($order_id, $arrParams, $convert_shipping_date = true) {
         $objQuery =& SC_Query::getSingletonInstance();
         $table = 'dtb_shipping';
+        $where = 'order_id = ?';
+        $objQuery->delete($table, $where, array($order_id));
 
          foreach ($arrParams as $arrShipping) {
 
             $arrValues = $objQuery->extractOnlyColsOf($table, $arrShipping);
 
             // 配送日付を timestamp に変換
-            if (!SC_Utils_Ex::isBlank($arrValues['shipping_date'])) {
+            if (!SC_Utils_Ex::isBlank($arrValues['shipping_date'])
+                && $convert_shipping_date) {
                 $d = mb_strcut($arrValues["shipping_date"], 0, 10);
                 $arrDate = split("/", $d);
                 $ts = mktime(0, 0, 0, $arrDate[1], $arrDate[2], $arrDate[0]);
@@ -563,38 +569,63 @@
      * @param array $arrParams 配送商品の配列
      * @return void
      */
-    function registerShipmentItem($orderId, $shippingId, $params) {
+    function registerShipmentItem($order_id, $shipping_id, $arrParams) {
         $objQuery =& SC_Query::getSingletonInstance();
+        $table = 'dtb_shipment_item';
+        $where = 'order_id = ? AND shipping_id = ?';
+        $objQuery->delete($table, $where, array($order_id, $shipping_id));
+
         $objProduct = new SC_Product();
-        foreach ($params as $productClassId => $val) {
-            $d = $objProduct->getDetailAndProductsClass($productClassId);
-            $sqlval['order_id'] = $orderId;
-            $sqlval['shipping_id'] = $shippingId;
-            $sqlval['product_class_id'] = $productClassId;
-            $sqlval['product_name'] = $d['name'];
-            $sqlval['product_code'] = $d['product_code'];
-            $sqlval['classcategory_name1'] = $d['classcategory_name1'];
-            $sqlval['classcategory_name2'] = $d['classcategory_name2'];
-            $sqlval['price'] = $d['price02'];
-            $sqlval['quantity'] = $val['quantity'];
-            $objQuery->insert("dtb_shipment_item", $sqlval);
+        foreach ($arrParams as $arrValues) {
+            if (SC_Utils_Ex::isBlank($arrValues['product_class_id'])) {
+                continue;
+            }
+            $d = $objProduct->getDetailAndProductsClass($arrValues['product_class_id']);
+            $name = SC_Utils_Ex::isBlank($arrValues['product_name'])
+                ? $d['name']
+                : $arrValues['product_name'];
+
+            $code = SC_Utils_Ex::isBlank($arrValues['product_code'])
+                ? $d['code']
+                : $arrValues['product_code'];
+
+            $cname1 = SC_Utils_Ex::isBlank($arrValues['classcategory_name1'])
+                ? $d['classcategory_name1']
+                : $arrValues['classcategory_name1'];
+
+            $cname2 = SC_Utils_Ex::isBlank($arrValues['classcategory_name2'])
+                ? $d['classcategory_name2']
+                : $arrValues['classcategory_name2'];
+
+            $price = SC_Utils_Ex::isBlank($arrValues['price'])
+                ? $d['price02']
+                : $arrValues['price'];
+
+            $arrValues['order_id'] = $order_id;
+            $arrValues['shipping_id'] = $shipping_id;
+            $arrValues['product_name'] = $name;
+            $arrValues['product_code'] = $code;
+            $arrValues['classcategory_name1'] = $cname1;
+            $arrValues['classcategory_name2'] = $cname2;
+            $arrValues['price'] = $price;
+
+            $arrExtractValues = $objQuery->extractOnlyColsOf($table, $arrValues);
+            $objQuery->insert($table, $arrExtractValues);
         }
     }
 
     /**
-     * 受注情報を登録する.
+     * 受注登録を完了する.
      *
      * 引数の受注情報を受注テーブル及び受注詳細テーブルに登録する.
      * 登録後, 受注一時テーブルに削除フラグを立て, カートの内容を削除する.
      *
-     * TODO ダウンロード商品の場合の扱いを検討
-     *
      * @param array $orderParams 登録する受注情報の配列
      * @param SC_CartSession $objCartSession カート情報のインスタンス
      * @param integer $cartKey 登録を行うカート情報のキー
      * @param integer 受注ID
      */
-    function registerOrder($orderParams, &$objCartSession, $cartKey) {
+    function registerOrderComplete($orderParams, &$objCartSession, $cartKey) {
         $objQuery =& SC_Query::getSingletonInstance();
 
         // 不要な変数を unset
@@ -618,40 +649,35 @@
         $orderParams['create_date'] = 'Now()';
         $orderParams['update_date'] = 'Now()';
 
-        $objQuery->insert("dtb_order", $orderParams);
+        $this->registerOrder($orderParams['order_id'], $orderParams);
 
-        // 受注.対応状況の更新
-        SC_Helper_DB_Ex::sfUpdateOrderStatus($orderParams['order_id'],
-                                             null, $addPoint, $usePoint);
-
         // 詳細情報を取得
         $cartItems = $objCartSession->getCartList($cartKey);
 
-        // 既に存在する詳細レコードを消しておく。
-        $objQuery->delete("dtb_order_detail", "order_id = ?",
-                          array($orderParams['order_id']));
-
+        // 詳細情報を生成
         $objProduct = new SC_Product();
+        $i = 0;
         foreach ($cartItems as $item) {
             $p =& $item['productsClass'];
-            $detail['order_id'] = $orderParams['order_id'];
-            $detail['product_id'] = $p['product_id'];
-            $detail['product_class_id'] = $p['product_class_id'];
-            $detail['product_name'] = $p['name'];
-            $detail['product_code'] = $p['product_code'];
-            $detail['classcategory_name1'] = $p['classcategory_name1'];
-            $detail['classcategory_name2'] = $p['classcategory_name2'];
-            $detail['point_rate'] = $item['point_rate'];
-            $detail['price'] = $item['price'];
-            $detail['quantity'] = $item['quantity'];
+            $arrDetail[$i]['order_id'] = $orderParams['order_id'];
+            $arrDetail[$i]['product_id'] = $p['product_id'];
+            $arrDetail[$i]['product_class_id'] = $p['product_class_id'];
+            $arrDetail[$i]['product_name'] = $p['name'];
+            $arrDetail[$i]['product_code'] = $p['product_code'];
+            $arrDetail[$i]['classcategory_name1'] = $p['classcategory_name1'];
+            $arrDetail[$i]['classcategory_name2'] = $p['classcategory_name2'];
+            $arrDetail[$i]['point_rate'] = $item['point_rate'];
+            $arrDetail[$i]['price'] = $item['price'];
+            $arrDetail[$i]['quantity'] = $item['quantity'];
 
             // 在庫の減少処理
             if (!$objProduct->reduceStock($p['product_class_id'], $item['quantity'])) {
                 $objQuery->rollback();
                 SC_Utils_Ex::sfDispSiteError(SOLD_OUT, "", true);
             }
-            $objQuery->insert("dtb_order_detail", $detail);
+            $i++;
         }
+        $this->registerOrderDetail($orderParams['order_id'], $arrDetail);
 
         $objQuery->update("dtb_order_temp", array('del_flg' => 1),
                           "order_temp_id = ?",
@@ -663,6 +689,77 @@
     }
 
     /**
+     * 受注情報を登録する.
+     *
+     * 既に受注IDが存在する場合は, 受注情報を更新する.
+     * 引数の受注IDが, 空白又は null の場合は, 新しく受注IDを発行して登録する.
+     *
+     * @param integer $order_id 受注ID
+     * @param array $arrParams 受注情報の連想配列
+     * @return integer 受注ID
+     */
+    function registerOrder($order_id, $arrParams) {
+        $table = 'dtb_order';
+        $where = 'order_id = ?';
+        $objQuery = SC_Query::getSingletonInstance();
+        $arrValues = $objQuery->extractOnlyColsOf($table, $arrParams);
+
+        $exists = $objQuery->count($table, $where, array($order_id));
+        if ($exists > 0) {
+
+            $this->sfUpdateOrderStatus($order_id, $arrValues['status'],
+                                       $arrValues['add_point'],
+                                       $arrValues['use_point'],
+                                       $arrValues);
+            $this->sfUpdateOrderNameCol($order_id);
+
+            $arrValues['update_date'] = 'now()';
+            $objQuery->update($table, $arrValues, $where, array($order_id));
+        } else {
+            if (SC_Utils_Ex::isBlank($order_id)) {
+                $order_id = $objQuery->nextVal('dtb_order_order_id');
+            }
+            $arrValues['order_id'] = $order_id;
+            $arrValues['customer_id'] =
+                    SC_Utils_Ex::isBlank($arrValues['customer_id'])
+                    ? 0 : $arrValues['customer_id'];
+            $arrValues['create_date'] = 'now()';
+            $arrValues['update_date'] = 'now()';
+            $objQuery->insert($table, $arrValues);
+
+            $this->sfUpdateOrderStatus($order_id, $arrValues['status'],
+                                       $arrValues['add_point'],
+                                       $arrValues['use_point'],
+                                       $arrValues);
+            $this->sfUpdateOrderNameCol($order_id);
+
+        }
+        return $order_id;
+    }
+
+    /**
+     * 受注詳細情報を登録する.
+     *
+     * 既に, 該当の受注が存在する場合は, 受注情報を削除し, 登録する.
+     *
+     * @param integer $order_id 受注ID
+     * @param array $arrParams 受注情報の連想配列
+     * @return void
+     */
+    function registerOrderDetail($order_id, $arrParams) {
+        $table = 'dtb_order_detail';
+        $where = 'order_id = ?';
+        $objQuery = SC_Query::getSingletonInstance();
+
+        $objQuery->delete($table, $where, array($order_id));
+        foreach ($arrParams as $arrDetail) {
+            $arrValues = $objQuery->extractOnlyColsOf($table, $arrDetail);
+            $arrValues['order_id'] = $order_id;
+            $objQuery->insert($table, $arrValues);
+        }
+    }
+
+    /**
      * 受注情報を取得する.
      *
      * @param integer $order_id 受注ID
@@ -684,9 +781,10 @@
      * 受注詳細を取得する.
      *
      * @param integer $order_id 受注ID
+     * @param boolean $has_order_status 受注ステータス, 入金日も含める場合 true
      * @return array 受注詳細の配列
      */
-    function getOrderDetail($order_id) {
+    function getOrderDetail($order_id, $has_order_status = true) {
         $objQuery =& SC_Query::getSingletonInstance();
         $dbFactory  = SC_DB_DBFactory_Ex::getInstance();
         $col = <<< __EOS__
@@ -700,8 +798,13 @@
             T2.price,
             T2.quantity,
             T2.point_rate,
-            T1.status AS status,
-            T1.payment_date AS payment_date,
+__EOS__;
+        if ($has_order_status) {
+            $col .= 'T1.status AS status, T1.payment_date AS payment_date,';
+
+        }
+        $col .= <<< __EOS__
+
             CASE WHEN EXISTS(
                     SELECT 1 FROM dtb_products
                      WHERE product_id = T3.product_id
@@ -771,11 +874,11 @@
             $product_class_id = $arrItem['product_class_id'];
 
             foreach ($arrItem as $detailKey => $detailVal) {
-                $arrResults[$product_class_id][$detailKey] = $detailVal;
+                $arrResults[$key][$detailKey] = $detailVal;
             }
             // 商品詳細を関連づける
             if ($has_detail) {
-                $arrResults[$product_class_id]['productsClass']
+                $arrResults[$key]['productsClass']
                     =& $objProduct->getDetailAndProductsClass($product_class_id);
             }
         }
@@ -796,4 +899,161 @@
         $mailHelper->sfSendOrderMail($orderId,
                                      SC_MobileUserAgent::isMobile() ? 2 : 1);
     }
+
+    /**
+     * 受注.対応状況の更新
+     *
+     * ・必ず呼び出し元でトランザクションブロックを開いておくこと。
+     *
+     * @param integer $orderId 注文番号
+     * @param integer|null $newStatus 対応状況 (null=変更無し)
+     * @param integer|null $newAddPoint 加算ポイント (null=変更無し)
+     * @param integer|null $newUsePoint 使用ポイント (null=変更無し)
+     * @param array $sqlval 更新後の値をリファレンスさせるためのパラメータ
+     * @return void
+     */
+    function sfUpdateOrderStatus($orderId, $newStatus = null, $newAddPoint = null, $newUsePoint = null, &$sqlval) {
+        $objQuery =& SC_Query::getSingletonInstance();
+
+        $arrOrderOld = $objQuery->getRow('status, add_point, use_point, customer_id', 'dtb_order', 'order_id = ?', array($orderId));
+
+        // 対応状況が変更無しの場合、DB値を引き継ぐ
+        if (is_null($newStatus)) {
+            $newStatus = $arrOrderOld['status'];
+        }
+
+        // 使用ポイント、DB値を引き継ぐ
+        if (is_null($newUsePoint)) {
+            $newUsePoint = $arrOrderOld['use_point'];
+        }
+
+        // 加算ポイント、DB値を引き継ぐ
+        if (is_null($newAddPoint)) {
+            $newAddPoint = $arrOrderOld['add_point'];
+        }
+
+        if (USE_POINT !== false) {
+            // 顧客.ポイントの加減値
+            $addCustomerPoint = 0;
+
+            // ▼使用ポイント
+            // 変更前の対応状況が利用対象の場合、変更前の使用ポイント分を戻す
+            if (SC_Utils_Ex::sfIsUsePoint($arrOrderOld['status'])) {
+                $addCustomerPoint += $arrOrderOld['use_point'];
+            }
+
+            // 変更後の対応状況が利用対象の場合、変更後の使用ポイント分を引く
+            if (SC_Utils_Ex::sfIsUsePoint($newStatus)) {
+                $addCustomerPoint -= $newUsePoint;
+            }
+            // ▲使用ポイント
+
+            // ▼加算ポイント
+            // 変更前の対応状況が加算対象の場合、変更前の加算ポイント分を戻す
+            if (SC_Utils_Ex::sfIsAddPoint($arrOrderOld['status'])) {
+                $addCustomerPoint -= $arrOrderOld['add_point'];
+            }
+
+            // 変更後の対応状況が加算対象の場合、変更後の加算ポイント分を足す
+            if (SC_Utils_Ex::sfIsAddPoint($newStatus)) {
+                $addCustomerPoint += $newAddPoint;
+            }
+            // ▲加算ポイント
+
+            if ($addCustomerPoint != 0) {
+                // ▼顧客テーブルの更新
+                $sqlval = array();
+                $where = '';
+                $arrVal = array();
+                $arrRawSql = array();
+                $arrRawSqlVal = array();
+
+                $sqlval['update_date'] = 'Now()';
+                $arrRawSql['point'] = 'point + ?';
+                $arrRawSqlVal[] = $addCustomerPoint;
+                $where .= 'customer_id = ?';
+                $arrVal[] = $arrOrderOld['customer_id'];
+
+                $objQuery->update('dtb_customer', $sqlval, $where, $arrVal, $arrRawSql, $arrRawSqlVal);
+                // ▲顧客テーブルの更新
+
+                // 顧客.ポイントをマイナスした場合、
+                if ($addCustomerPoint < 0) {
+                    $sql = 'SELECT point FROM dtb_customer WHERE customer_id = ?';
+                    $point = $objQuery->getOne($sql, array($arrOrderOld['customer_id']));
+                    // 変更後の顧客.ポイントがマイナスの場合、
+                    if ($point < 0) {
+                        // ロールバック
+                        $objQuery->rollback();
+                        // エラー
+                        SC_Utils_Ex::sfDispSiteError(LACK_POINT);
+                    }
+                }
+            }
+        }
+
+        // ▼受注テーブルの更新
+        if (empty($sqlval)) {
+            $sqlval = array();
+        }
+
+        if (USE_POINT !== false) {
+            $sqlval['add_point'] = $newAddPoint;
+            $sqlval['use_point'] = $newUsePoint;
+        }
+        // ステータスが発送済みに変更の場合、発送日を更新
+        if ($arrOrderOld['status'] != ORDER_DELIV && $newStatus == ORDER_DELIV) {
+            $sqlval['commit_date'] = 'Now()';
+        }
+        // ステータスが入金済みに変更の場合、入金日を更新
+        elseif ($arrOrderOld['status'] != ORDER_PRE_END && $newStatus == ORDER_PRE_END) {
+            $sqlval['payment_date'] = 'Now()';
+        }
+
+        $sqlval['status'] = $newStatus;
+        $sqlval['update_date'] = 'Now()';
+
+        $cols = $objQuery->listTableFields('dtb_order');
+        $dest = array();
+        foreach ($sqlval as $key => $val) {
+            if (in_array($key, $cols)) {
+                $dest[$key] = $val;
+            }
+        }
+
+        $objQuery->update('dtb_order', $dest, 'order_id = ?', array($orderId));
+        // ▲受注テーブルの更新
+    }
+
+    /**
+     * 受注の名称列を更新する
+     *
+     * @param integer $order_id 更新対象の注文番号
+     * @param boolean $temp_table 更新対象は「受注_Temp」か
+     * @static
+     */
+    function sfUpdateOrderNameCol($order_id, $temp_table = false) {
+        $objQuery =& SC_Query::getSingletonInstance();
+
+        if ($temp_table) {
+            $tgt_table = 'dtb_order_temp';
+            $sql_where = 'order_temp_id = ?';
+        } else {
+            $tgt_table = 'dtb_order';
+            $sql_where = 'order_id = ?';
+
+            $objQuery->update('dtb_shipping', array(),
+                              $sql_where,
+                              array($order_id),
+                              array('shipping_time' =>
+                                    "(SELECT deliv_time FROM dtb_delivtime WHERE time_id = dtb_shipping.time_id AND deliv_id = dtb_shipping.deliv_id)"));
+
+        }
+
+        $objQuery->update($tgt_table, array(),
+                          $sql_where,
+                          array($order_id),
+                          array('payment_method' =>
+                                "(SELECT payment_method FROM dtb_payment WHERE payment_id = " . $tgt_table . ".payment_id)"));
+    }
 }

変更: branches/version-2_5-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php	2011-02-17 05:16:23 UTC (rev 20179)
+++ branches/version-2_5-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php	2011-02-17 10:40:06 UTC (rev 20180)
@@ -22,7 +22,7 @@
  */
 
 // {{{ requires
-require_once(CLASS_REALDIR . "pages/admin/LC_Page_Admin.php");
+require_once(CLASS_EX_REALDIR . "page_extends/admin/order/LC_Page_Admin_Order_Ex.php");
 
 /**
  * 受注修正 のページクラス.
@@ -31,13 +31,8 @@
  * @author LOCKON CO.,LTD.
  * @version $Id$
  */
-class LC_Page_Admin_Order_Edit extends LC_Page_Admin {
+class LC_Page_Admin_Order_Edit extends LC_Page_Admin_Order_Ex {
 
-    // {{{ properties
-
-    /** 表示モード */
-    var $disp_mode;
-
     // }}}
     // {{{ functions
 
@@ -51,19 +46,23 @@
         $this->tpl_mainpage = 'order/edit.tpl';
         $this->tpl_subnavi = 'order/subnavi.tpl';
         $this->tpl_mainno = 'order';
-        $this->tpl_subno = 'index';
-        $this->tpl_subtitle = '受注管理';
-        if (empty($_GET['order_id']) && empty($_POST['order_id'])) {
-            $this->tpl_subno = 'add';
-            $this->tpl_mode = 'add';
-            $this->tpl_subtitle = '新規受注入力';
-        }
 
         $masterData = new SC_DB_MasterData_Ex();
         $this->arrPref = $masterData->getMasterData('mtb_pref');
         $this->arrORDERSTATUS = $masterData->getMasterData("mtb_order_status");
         $this->arrDeviceType = $masterData->getMasterData('mtb_device_type');
 
+        $objDate = new SC_Date(RELEASE_YEAR);
+        $this->arrYearShippingDate = $objDate->getYear('', date('Y'), '');
+        $this->arrMonthShippingDate = $objDate->getMonth(true);
+        $this->arrDayShippingDate = $objDate->getDay(true);
+
+        // 支払い方法の取得
+        $this->arrPayment = SC_Helper_DB_Ex::sfGetIDValueList("dtb_payment", "payment_id", "payment_method");
+
+        // 配送業者の取得
+        $this->arrDeliv = SC_Helper_DB_Ex::sfGetIDValueList("dtb_deliv", "deliv_id", "name");
+
         $this->httpCacheControl('nocache');
     }
 
@@ -83,207 +82,129 @@
      * @return void
      */
     function action() {
-        $objSess = new SC_Session();
-        $objDb = new SC_Helper_DB_Ex();
-        $objDate = new SC_Date(1970);
+        // 認証可否の判定
+        SC_Utils_Ex::sfIsSuccess(new SC_Session());
+
         $objPurchase = new SC_Helper_Purchase_Ex();
-        $this->arrYearShippingDate = $objDate->getYear('', date('Y'), '');
-        $this->arrMonthShippingDate = $objDate->getMonth(true);
-        $this->arrDayShippingDate = $objDate->getDay(true);
+        $objFormParam = new SC_FormParam();
 
-        // パラメータ管理クラス
-        $this->objFormParam = new SC_FormParam();
         // パラメータ情報の初期化
-        $this->lfInitParam();
+        $this->lfInitParam($objFormParam);
+        $objFormParam->setParam($_REQUEST);
+        $objFormParam->convParam();
+        $order_id = $objFormParam->getValue('order_id');
 
-        // 認証可否の判定
-        SC_Utils_Ex::sfIsSuccess($objSess);
-
-        // 検索パラメータの引き継ぎ
-        foreach ($_POST as $key => $val) {
-            if (ereg("^search_", $key)) {
-                $this->arrSearchHidden[$key] = $val;
-            }
-        }
-
-        // 表示モード判定
-        if(isset($_GET['order_id']) &&
-           SC_Utils_Ex::sfIsInt($_GET['order_id'])) {
-            $this->disp_mode = true;
-            $order_id = $_GET['order_id'];
-        } else {
-            $order_id = $_POST['order_id'];
-        }
-        $this->tpl_order_id = $order_id;
-
         // DBから受注情報を読み込む
         if (!SC_Utils_Ex::isBlank($order_id)) {
-            $this->lfGetOrderData($order_id);
+            $this->setOrderToFormParam($objFormParam, $order_id);
+            $this->tpl_subno = 'index';
+            $this->tpl_subtitle = '受注管理';
+        } else {
+            $this->tpl_subno = 'add';
+            $this->tpl_mode = 'add';
+            $this->tpl_subtitle = '新規受注入力';
         }
 
+        $this->arrSearchHidden = $objFormParam->getSearchArray();
+
         switch($this->getMode()) {
         case 'pre_edit':
         case 'order_id':
             break;
+
         case 'edit':
-        case 'add':
-            // POST情報で上書き
-            $this->lfInitShippingParam($this->arrShipping);
-            $this->objFormParam->setParam($_POST);
+            $objFormParam->setParam($_POST);
+            $objFormParam->convParam();
+            $this->arrErr = $this->lfCheckError($objFormParam);
+            if (SC_Utils_Ex::isBlank($this->arrErr)) {
+                $order_id = $this->doRegister($order_id, $objPurchase, $objFormParam);
+                $this->setOrderToFormParam($objFormParam, $order_id);
+                $this->tpl_onload = "window.alert('受注を編集しました。');";
+            }
+            break;
 
-            // 入力値の変換
-            $this->objFormParam->convParam();
-            $this->arrErr = $this->lfCheckError();
-
-            if(count($this->arrErr) == 0) {
-            	//TODO 要リファクタリング(MODE if利用)
-                if ($this->getMode() == 'add') {
-                    $order_id = $this->lfRegistNewData($objPurchase);
-
-                    $this->tpl_order_id = $order_id;
+        case 'add':
+            if ($_SERVER['REQUEST_METHOD'] == 'POST') {
+                $objFormParam->setParam($_POST);
+                $objFormParam->convParam();
+                $this->arrErr = $this->lfCheckError($objFormParam);
+                if (SC_Utils_Ex::isBlank($this->arrErr)) {
+                    $order_id = $this->doRegister(null, $objPurchase, $objFormParam);
                     $this->tpl_mode = 'edit';
-
-                    $arrData['order_id'] = $order_id;
-                    $this->objFormParam->setParam($arrData);
-
-                    $text = "'新規受注を登録しました。'";
-                } else {
-                    $this->lfRegistData($_POST['order_id'], $objPurchase);
-                    $text = "'受注履歴を編集しました。'";
+                    $objFormParam->setValue('order_id', $order_id);
+                    $this->setOrderToFormParam($objFormParam, $order_id);
+                    $this->tpl_onload = "window.alert('新規受注を登録しました。');";
                 }
-                // DBから受注情報を再読込
-                $this->lfGetOrderData($order_id);
-                $this->lfInitShippingParam($this->arrShipping);
-                $this->tpl_onload = "window.alert(".$text.");";
             }
+
             break;
+
         // 再計算
-        case 'cheek':
+        case 'recalculate':
         //支払い方法の選択
         case 'payment':
-            // POST情報で上書き
-            $this->lfInitShippingParam($this->arrShipping);
-            $this->objFormParam->setParam($_POST);
-            // 入力値の変換
-            $this->objFormParam->convParam();
-            $this->arrErr = $this->lfCheckError();
+        // 配送業者の選択
+        case 'deliv':
+            $objFormParam->setParam($_POST);
+            $objFormParam->convParam();
+            $this->arrErr = $this->lfCheckError($objFormParam);
             break;
 
-        /* 商品削除*/
+        // 商品削除
         case 'delete_product':
-            $delete_no = $_POST['delete_no'];
-            foreach ($_POST AS $key=>$val) {
-                if (is_array($val)) {
-                    foreach ($val AS $k=>$v) {
-                        if ($k != $delete_no) {
-                            $arrData[$key][] = $v;
-                        }
-                    }
-                } else {
-                    $arrData[$key] = $val;
-                }
-            }
-            // 情報上書き
-            $this->lfInitShippingParam($this->arrShipping);
-            $this->objFormParam->setParam($arrData);
-            // 入力値の変換
-            $this->objFormParam->convParam();
-            $this->arrErr = $this->lfCheckError();
+            $objFormParam->setParam($_POST);
+            $objFormParam->convParam();
+            $delete_no = $objFormParam->getValue('delete_no');
+            $this->doDeleteProduct($delete_no, $objFormParam);
+            $this->arrErr = $this->lfCheckError($objFormParam);
             break;
-        /* 商品追加ポップアップより商品選択後、商品情報取得*/
-        case 'select_product_detail':
-            // POST情報で上書き
-            $this->objFormParam->setParam($_POST);
-            if (!empty($_POST['add_product_class_id'])) {
-                $this->lfInsertProduct($_POST['add_product_class_id']);
-            } elseif (!empty($_POST['edit_product_class_id'])) {
-                $this->lfUpdateProduct($_POST['edit_product_class_id'], $_POST['no']);
-            }
-            $arrData = $_POST;
-            foreach ($this->arrForm AS $key=>$val) {
-                if (is_array($val)) {
-                    $arrData[$key] = $this->arrForm[$key]['value'];
-                } else {
-                    $arrData[$key] = $val;
-                }
-            }
 
-            // 情報上書き
-            $this->lfInitShippingParam($this->arrShipping);
-            $this->objFormParam->setParam($arrData);
-            // 入力値の変換
-            $this->objFormParam->convParam();
-            $this->arrErr = $this->lfCheckError();
+        // 商品追加ポップアップより商品選択
+        case 'select_product_detail':
+            $objFormParam->setParam($_POST);
+            $objFormParam->convParam();
+            $this->doRegisterProduct($objFormParam);
+            $this->arrErr = $this->lfCheckError($objFormParam);
             break;
-        /* 顧客検索ポップアップより顧客指定後、顧客情報取得*/
-        case 'search_customer':
-            // POST情報で上書き
-            $this->lfInitShippingParam($this->arrShipping);
-            $this->objFormParam->setParam($_POST);
 
-            // 検索結果から顧客IDを指定された場合、顧客情報をフォームに代入する
-            $this->lfSetCustomerInfo($_POST['edit_customer_id']);
-
+        // 顧客検索ポップアップより顧客指定
+        case 'search_customer':
+            $objFormParam->setParam($_POST);
+            $objFormParam->convParam();
+            $this->setCustomerTo($objFormParam->getValue('edit_customer_id'),
+                                 $objFormParam);
+            $this->arrErr = $this->lfCheckError($objFormParam);
             break;
 
         // 複数配送設定表示
         case 'multiple':
-            $this->lfInitShippingParam($this->arrShipping);
-            $this->objFormParam->setParam($_POST);
-            // 入力値の変換
-            $this->objFormParam->convParam();
-            $this->arrErr = $this->lfCheckError();
+            $objFormParam->setParam($_POST);
+            $objFormParam->convParam();
+            $this->arrErr = $this->lfCheckError($objFormParam);
             break;
 
         // 複数配送設定を反映
         case 'multiple_set_to':
-            $multipleSize = $_POST['multiple_size'];
-            $this->lfInitMultipleParam($multipleSize);
-            $this->objFormParam->setParam($_POST);
-            $this->lfInitShippingParam($this->arrShipping);
-            $this->setMultipleItemTo($multipleSize);
+            $this->lfInitMultipleParam($objFormParam);
+            $objFormParam->setParam($_POST);
+            $objFormParam->convParam();
+            $this->setMultipleItemTo($objFormParam);
             break;
 
         // お届け先の追加
         case 'append_shipping':
-            $this->lfInitShippingParam($this->arrShipping, true);
-            $this->objFormParam->setParam($_POST);
-            // 入力値の変換
-            $this->objFormParam->convParam();
+            $objFormParam->setParam($_POST);
+            $objFormParam->convParam();
+            $this->addShipping($objFormParam);
             break;
 
         default:
-            // お届け先の初期表示
-            $this->lfInitShippingParam();
-            break;
         }
 
-        // 支払い方法の取得
-        $this->arrPayment = $objDb->sfGetIDValueList("dtb_payment", "payment_id", "payment_method");
-
-        $this->arrForm = $this->objFormParam->getFormParamList();
-
-        // XXX 商品種別IDは0番目の配列を使用
-        $this->product_type_id = $this->arrForm['product_type_id']['value'][0];
-        $this->arrDelivTime = $objPurchase->getDelivTime($this->product_type_id);
-        $this->product_count = count($this->arrForm['quantity']['value']);
-
-        // アンカーを設定
-        if (isset($_POST['anchor_key']) && !empty($_POST['anchor_key'])) {
-            $anchor_hash = "location.hash='#" . $_POST['anchor_key'] . "'";
-        } else {
-            $anchor_hash = "";
-        }
-        $this->tpl_onload .= $anchor_hash;
-
-        $objSiteInfo = new SC_SiteInfo();
-        $this->arrInfo = $objSiteInfo->data;
-        // 表示モード判定
-        if(!$this->disp_mode) {
-            $this->setTemplate(MAIN_FRAME);
-        } else {
-            $this->setTemplate('order/disp.tpl');
-        }
+        $this->arrForm = $objFormParam->getFormParamList();
+        $this->arrDelivTime = $objPurchase->getDelivTime($objFormParam->getValue('deliv_id'));
+        $this->tpl_onload .= $this->getAnchorKey($objFormParam);
+        $this->arrInfo = SC_Helper_DB::sfGetBasisData();
     }
 
     /**
@@ -295,406 +216,356 @@
         parent::destroy();
     }
 
-    /* パラメータ情報の初期化 */
-    function lfInitParam() {
+    /**
+     * パラメータ情報の初期化を行う.
+     *
+     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+     * @return void
+     */
+    function lfInitParam(&$objFormParam) {
+        // 検索条件のパラメータを初期化
+        parent::lfInitParam($objFormParam);
 
         // お客様情報
-        $this->objFormParam->addParam("顧客名1", "order_name01", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
-        $this->objFormParam->addParam("顧客名2", "order_name02", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
-        $this->objFormParam->addParam("顧客名カナ1", "order_kana01", STEXT_LEN, "KVCa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
-        $this->objFormParam->addParam("顧客名カナ2", "order_kana02", STEXT_LEN, "KVCa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
-        $this->objFormParam->addParam("メールアドレス", "order_email", MTEXT_LEN, "KVCa", array("NO_SPTAB", "EMAIL_CHECK", "EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK"));
-        $this->objFormParam->addParam("郵便番号1", "order_zip01", ZIP01_LEN, "n", array("NUM_CHECK", "NUM_COUNT_CHECK"));
-        $this->objFormParam->addParam("郵便番号2", "order_zip02", ZIP02_LEN, "n", array("NUM_CHECK", "NUM_COUNT_CHECK"));
-        $this->objFormParam->addParam("都道府県", "order_pref", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
-        $this->objFormParam->addParam("住所1", "order_addr01", MTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
-        $this->objFormParam->addParam("住所2", "order_addr02", MTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
-        $this->objFormParam->addParam("電話番号1", "order_tel01", TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
-        $this->objFormParam->addParam("電話番号2", "order_tel02", TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
-        $this->objFormParam->addParam("電話番号3", "order_tel03", TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
+        $objFormParam->addParam("顧客名1", "order_name01", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+        $objFormParam->addParam("顧客名2", "order_name02", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+        $objFormParam->addParam("顧客名カナ1", "order_kana01", STEXT_LEN, "KVCa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+        $objFormParam->addParam("顧客名カナ2", "order_kana02", STEXT_LEN, "KVCa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+        $objFormParam->addParam("メールアドレス", "order_email", MTEXT_LEN, "KVCa", array("NO_SPTAB", "EMAIL_CHECK", "EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK"));
+        $objFormParam->addParam("郵便番号1", "order_zip01", ZIP01_LEN, "n", array("NUM_CHECK", "NUM_COUNT_CHECK"));
+        $objFormParam->addParam("郵便番号2", "order_zip02", ZIP02_LEN, "n", array("NUM_CHECK", "NUM_COUNT_CHECK"));
+        $objFormParam->addParam("都道府県", "order_pref", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $objFormParam->addParam("住所1", "order_addr01", MTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+        $objFormParam->addParam("住所2", "order_addr02", MTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+        $objFormParam->addParam("電話番号1", "order_tel01", TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
+        $objFormParam->addParam("電話番号2", "order_tel02", TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
+        $objFormParam->addParam("電話番号3", "order_tel03", TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
 
         // 受注商品情報
-        $this->objFormParam->addParam("値引き", "discount", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
-        $this->objFormParam->addParam("送料", "deliv_fee", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
-        $this->objFormParam->addParam("手数料", "charge", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
+        $objFormParam->addParam("値引き", "discount", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
+        $objFormParam->addParam("送料", "deliv_fee", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
+        $objFormParam->addParam("手数料", "charge", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
 
         // ポイント機能ON時のみ
         if (USE_POINT !== false) {
-            $this->objFormParam->addParam("利用ポイント", "use_point", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
+            $objFormParam->addParam("利用ポイント", "use_point", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
         }
 
-        $this->objFormParam->addParam("お支払い方法", "payment_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
-        $this->objFormParam->addParam("対応状況", "status", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
-        $this->objFormParam->addParam("お支払方法名称", "payment_method");
+        $objFormParam->addParam("配送業者", "deliv_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $objFormParam->addParam("お支払い方法", "payment_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $objFormParam->addParam("対応状況", "status", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $objFormParam->addParam("お支払方法名称", "payment_method");
 
         // 受注詳細情報
-        $this->objFormParam->addParam("商品種別ID", "product_type_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
-        $this->objFormParam->addParam("単価", "price", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
-        $this->objFormParam->addParam("数量", "quantity", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
-        $this->objFormParam->addParam("商品ID", "product_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
-        $this->objFormParam->addParam("商品規格ID", "product_class_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
-        $this->objFormParam->addParam("ポイント付与率", "point_rate");
-        $this->objFormParam->addParam("商品コード", "product_code");
-        $this->objFormParam->addParam("商品名", "product_name");
-        $this->objFormParam->addParam("規格名1", "classcategory_name1");
-        $this->objFormParam->addParam("規格名2", "classcategory_name2");
-        $this->objFormParam->addParam("メモ", "note", MTEXT_LEN, "KVa", array("MAX_LENGTH_CHECK"));
+        $objFormParam->addParam("商品項番", "product_class_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
+        $objFormParam->addParam("商品種別ID", "product_type_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
+        $objFormParam->addParam("単価", "price", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
+        $objFormParam->addParam("数量", "quantity", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
+        $objFormParam->addParam("商品ID", "product_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
+        $objFormParam->addParam("商品規格ID", "product_class_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
+        $objFormParam->addParam("ポイント付与率", "point_rate");
+        $objFormParam->addParam("商品コード", "product_code");
+        $objFormParam->addParam("商品名", "product_name");
+        $objFormParam->addParam("規格名1", "classcategory_name1");
+        $objFormParam->addParam("規格名2", "classcategory_name2");
+        $objFormParam->addParam("メモ", "note", MTEXT_LEN, "KVa", array("MAX_LENGTH_CHECK"));
+        $objFormParam->addParam("削除用項番", "delete_no", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+
         // DB読込用
-        $this->objFormParam->addParam("小計", "subtotal");
-        $this->objFormParam->addParam("合計", "total");
-        $this->objFormParam->addParam("支払い合計", "payment_total");
-        $this->objFormParam->addParam("加算ポイント", "add_point");
-        $this->objFormParam->addParam("お誕生日ポイント", "birth_point");
-        $this->objFormParam->addParam("消費税合計", "tax");
-        $this->objFormParam->addParam("最終保持ポイント", "total_point");
-        $this->objFormParam->addParam("顧客ID", "customer_id");
-        $this->objFormParam->addParam("現在のポイント", "point");
-        $this->objFormParam->addParam("注文番号", "order_id");
-        $this->objFormParam->addParam("受注日", "create_date");
-        $this->objFormParam->addParam("発送日", "commit_date");
-        $this->objFormParam->addParam("備考", "message");
-        $this->objFormParam->addParam("入金日", "payment_date");
-        $this->objFormParam->addParam("アクセス端末", "device_type_id");
-    }
+        $objFormParam->addParam("小計", "subtotal");
+        $objFormParam->addParam("合計", "total");
+        $objFormParam->addParam("支払い合計", "payment_total");
+        $objFormParam->addParam("加算ポイント", "add_point");
+        $objFormParam->addParam("お誕生日ポイント", "birth_point");
+        $objFormParam->addParam("消費税合計", "tax");
+        $objFormParam->addParam("最終保持ポイント", "total_point");
+        $objFormParam->addParam("顧客ID", "customer_id", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
+        $objFormParam->addParam("顧客ID", "edit_customer_id", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
+        $objFormParam->addParam("現在のポイント", "point");
+        $objFormParam->addParam("注文番号", "order_id");
+        $objFormParam->addParam("受注日", "create_date");
+        $objFormParam->addParam("発送日", "commit_date");
+        $objFormParam->addParam("備考", "message");
+        $objFormParam->addParam("入金日", "payment_date");
+        $objFormParam->addParam("アクセス端末", "device_type_id");
 
-    /**
-     * お届け先用フォームの初期化
-     */
-    function lfInitShippingParam($arrShipping = array(), $add = false) {
-        if (empty($arrShipping) && !$add) {
-            $arrShipping[0]['shipping_id'] = 0;
-            $this->arrShippingIds[0] = 0;
-            $_POST['shipping_quantity'] = 1;
-        }
+        // 複数情報
+        $objFormParam->addParam("配送数", "shipping_quantity", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
+        $objFormParam->addParam("配送ID", "shipping_id", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"), 0);
+        $objFormParam->addParam("お名前1", "shipping_name01", STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+        $objFormParam->addParam("お名前2", "shipping_name02", STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+        $objFormParam->addParam("お名前(フリガナ・姓)", "shipping_kana01", STEXT_LEN, "KVCa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+        $objFormParam->addParam("お名前(フリガナ・名)", "shipping_kana02", STEXT_LEN, "KVCa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+        $objFormParam->addParam("郵便番号1", "shipping_zip01", ZIP01_LEN, "n", array("NUM_CHECK", "NUM_COUNT_CHECK"));
+        $objFormParam->addParam("郵便番号2", "shipping_zip02", ZIP02_LEN, "n", array("NUM_CHECK", "NUM_COUNT_CHECK"));
+        $objFormParam->addParam("都道府県", "shipping_pref", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $objFormParam->addParam("住所1", "shipping_addr01", MTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+        $objFormParam->addParam("住所2", "shipping_addr02", MTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+        $objFormParam->addParam("電話番号1", "shipping_tel01", TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
+        $objFormParam->addParam("電話番号2", "shipping_tel02", TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
+        $objFormParam->addParam("電話番号3", "shipping_tel03", TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
+        $objFormParam->addParam("お届け時間ID", "time_id", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $objFormParam->addParam("お届け時間", "shipping_time");
+        $objFormParam->addParam("お届け日(年)", "shipping_date_year", "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $objFormParam->addParam("お届け日(月)", "shipping_date_month", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $objFormParam->addParam("お届け日(日)", "shipping_date_day", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $objFormParam->addParam("お届け日", "shipping_date", STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+        $objFormParam->addParam("配送商品数", "shipping_product_quantity", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
 
-        if ($add) {
-            $_POST['shipping_quantity'] = $_POST['shipping_quantity'] + 1;
-        }
-        for ($i = 0; $i < $_POST['shipping_quantity']; $i++) {
-            $arrShipping[$i]['shipping_id'] = $i;
-            $this->arrShippingIds[$i] = $i;
-        }
+        $objFormParam->addParam("商品規格ID", "shipment_product_class_id", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $objFormParam->addParam("商品コード", "shipment_product_code");
+        $objFormParam->addParam("商品名", "shipment_product_name");
+        $objFormParam->addParam("規格名1", "shipment_classcategory_name1");
+        $objFormParam->addParam("規格名2", "shipment_classcategory_name2");
+        $objFormParam->addParam("単価", "shipment_price", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
+        $objFormParam->addParam("数量", "shipment_quantity", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
 
-        $this->objFormParam->addParam("配送数", "shipping_quantity", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
-        $this->objFormParam->setValue('shipping_quantity', $_POST['shipping_quantity']);
-
-        foreach ($arrShipping as $shipping) {
-            $this->objFormParam->addParam("配送ID", "shipping_id_" . $shipping['shipping_id'], INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"), 0);
-            $this->objFormParam->addParam("お名前1", "shipping_name01_" . $shipping['shipping_id'], STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
-            $this->objFormParam->addParam("お名前2", "shipping_name02_" . $shipping['shipping_id'], STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
-            $this->objFormParam->addParam("お名前(フリガナ・姓)", "shipping_kana01_" . $shipping['shipping_id'], STEXT_LEN, "KVCa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
-            $this->objFormParam->addParam("お名前(フリガナ・名)", "shipping_kana02_" . $shipping['shipping_id'], STEXT_LEN, "KVCa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
-            $this->objFormParam->addParam("郵便番号1", "shipping_zip01_" . $shipping['shipping_id'], ZIP01_LEN, "n", array("NUM_CHECK", "NUM_COUNT_CHECK"));
-            $this->objFormParam->addParam("郵便番号2", "shipping_zip02_" . $shipping['shipping_id'], ZIP02_LEN, "n", array("NUM_CHECK", "NUM_COUNT_CHECK"));
-            $this->objFormParam->addParam("都道府県", "shipping_pref_" . $shipping['shipping_id'], INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
-            $this->objFormParam->addParam("住所1", "shipping_addr01_" . $shipping['shipping_id'], MTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
-            $this->objFormParam->addParam("住所2", "shipping_addr02_" . $shipping['shipping_id'], MTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
-            $this->objFormParam->addParam("電話番号1", "shipping_tel01_" . $shipping['shipping_id'], TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
-            $this->objFormParam->addParam("電話番号2", "shipping_tel02_" . $shipping['shipping_id'], TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
-            $this->objFormParam->addParam("電話番号3", "shipping_tel03_" . $shipping['shipping_id'], TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
-            $this->objFormParam->addParam("お届け時間ID", "time_id_" . $shipping['shipping_id'], INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
-            $this->objFormParam->addParam("お届け時間", "shipping_time_" . $shipping['shipping_id']);
-            $this->objFormParam->addParam("お届け日(年)", "shipping_date_year_" . $shipping['shipping_id'], INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
-            $this->objFormParam->addParam("お届け日(月)", "shipping_date_month_" . $shipping['shipping_id'], INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
-            $this->objFormParam->addParam("お届け日(日)", "shipping_date_day_" . $shipping['shipping_id'], INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
-            $this->objFormParam->addParam("お届け日", "shipping_date_" . $shipping['shipping_id'], STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
-            $this->objFormParam->addParam("配送商品規格数", "shipping_product_quantity_" . $shipping['shipping_id'], INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
-            foreach (array_keys($shipping['shipment_item']) as $productClassId) {
-                $this->objFormParam->addParam("商品規格ID", "product_class_id_" . $shipping['shipping_id'] . '_' . $productClassId, INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
-                $this->objFormParam->addParam("商品コード", "product_code_" . $shipping['shipping_id'] . '_' . $productClassId, $item['product_code']);
-                $this->objFormParam->addParam("商品名", "product_name_" . $shipping['shipping_id'] . '_' . $productClassId);
-                $this->objFormParam->addParam("規格名1", "classcategory_name1_" . $shipping['shipping_id'] . '_' . $productClassId);
-                $this->objFormParam->addParam("規格名2", "classcategory_name2_" . $shipping['shipping_id'] . '_' . $productClassId);
-                $this->objFormParam->addParam("単価", "price_" . $shipping['shipping_id'] . '_' . $productClassId, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
-                $this->objFormParam->addParam("数量", "quantity_" . $shipping['shipping_id'] . '_' . $productClassId, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
-            }
-        }
+        $objFormParam->addParam("商品項番", "no", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $objFormParam->addParam("追加商品規格ID", "add_product_class_id", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $objFormParam->addParam("修正商品規格ID", "edit_product_class_id", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $objFormParam->addParam("アンカーキー", "anchor_key", STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
     }
 
     /**
-     * 複数配送用フォームの初期化
+     * 複数配送用フォームの初期化を行う.
+     *
+     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+     * @return void
      */
-    function lfInitMultipleParam($size) {
-        for ($i = 0; $i < $size; $i++) {
-            $this->objFormParam->addParam("商品規格ID", "multiple_product_class_id" . $i, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
-            $this->objFormParam->addParam("商品コード", "multiple_product_code" . $i, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
-            $this->objFormParam->addParam("商品名", "multiple_product_name" . $i, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
-            $this->objFormParam->addParam("規格1", "multiple_classcategory_name1" . $i, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
-            $this->objFormParam->addParam("規格2", "multiple_classcategory_name2" . $i, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
-            $this->objFormParam->addParam("単価", "multiple_price" . $i, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
-            $this->objFormParam->addParam("数量", "multiple_quantity" . $i, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
-            $this->objFormParam->addParam("配送先住所", "multiple_shipping" . $i, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
-        }
+    function lfInitMultipleParam(&$objFormParam) {
+        $objFormParam->addParam("商品規格ID", "multiple_product_class_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $objFormParam->addParam("商品コード", "multiple_product_code", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
+        $objFormParam->addParam("商品名", "multiple_product_name", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
+        $objFormParam->addParam("規格1", "multiple_classcategory_name1", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
+        $objFormParam->addParam("規格2", "multiple_classcategory_name2", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
+        $objFormParam->addParam("単価", "multiple_price", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
+        $objFormParam->addParam("数量", "multiple_quantity", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
+        $objFormParam->addParam("配送先住所", "multiple_shipping_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
     }
 
+    /**
+     * 複数配送入力フォームで入力された値を SC_FormParam へ設定する.
+     *
+     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+     * @return void
+     */
+    function setMultipleItemTo(&$objFormParam) {
+        $arrMultipleKey = array('multiple_shipping_id',
+                                'multiple_product_class_id',
+                                'multiple_product_name',
+                                'multiple_product_code',
+                                'multiple_classcategory_name1',
+                                'multiple_classcategory_name2',
+                                'multiple_price',
+                                'multiple_quantity');
+        $arrMultipleParams = $objFormParam->getSwapArray($arrMultipleKey);
 
-    function setMultipleItemTo($size) {
+        /*
+         * 複数配送フォームの入力値を shipping_id ごとにマージ
+         *
+         * $arrShipmentItem[配送先ID][商品規格ID]['shipment_(key)'] = 値
+         */
         $arrShipmentItem = array();
-        for ($i = 0; $i < $size; $i++) {
-            $shippingId = $this->objFormParam->getValue('multiple_shipping' . $i);
-            $productClassId = $this->objFormParam->getValue('multiple_product_class_id' . $i);
-
-            $name = $this->objFormParam->getValue('multiple_product_name' . $i);
-            $code = $this->objFormParam->getValue('multiple_product_code' . $i);
-            $class1 = $this->objFormParam->getValue('multiple_classcategory_name1' . $i);
-            $class2 = $this->objFormParam->getValue('multiple_classcategory_name2' . $i);
-            $price = $this->objFormParam->getValue('multiple_price' . $i);
-            $quantity = $this->objFormParam->getValue('multiple_quantity' . $i);
-
-            $this->arrShipping[$shippingId]['shipment_item'][$productClassId]['shipping_id'] = $shippingId;
-            $this->arrShipping[$shippingId]['shipment_item'][$productClassId]['product_class_id'] = $productClassId;
-            $this->arrShipping[$shippingId]['shipment_item'][$productClassId]['product_name'] = $name;
-            $this->arrShipping[$shippingId]['shipment_item'][$productClassId]['product_code'] = $code;
-            $this->arrShipping[$shippingId]['shipment_item'][$productClassId]['classcategory_name1'] = $class1;
-            $this->arrShipping[$shippingId]['shipment_item'][$productClassId]['classcategory_name2'] = $class2;
-            $this->arrShipping[$shippingId]['shipment_item'][$productClassId]['price'] = $price;
-            $this->arrShipping[$shippingId]['shipment_item'][$productClassId]['quantity'] += $quantity;
+        foreach ($arrMultipleParams as $arrMultiple) {
+            $shipping_id = $arrMultiple['multiple_shipping_id'];
+            $product_class_id = $arrMultiple['multiple_product_class_id'];
+            foreach ($arrMultiple as $key => $val) {
+                if ($key == 'multiple_quantity') {
+                    $arrShipmentItem[$shipping_id][$product_class_id][str_replace('multiple', 'shipment', $key)] += $val;
+                } else {
+                    $arrShipmentItem[$shipping_id][$product_class_id][str_replace('multiple', 'shipment', $key)] = $val;
+                }
+            }
         }
 
-        $arrQuantity = array();
-        $this->arrShippingIds = array();
-        $this->arrProductClassIds = array();
-        foreach ($this->arrShipping as $shippingId => $items) {
-
-            $this->objFormParam->setValue('shipping_product_quantity' . '_' . $shippingId, count($items['shipment_item']));
-
-            $this->arrShippingIds[] = $shippingId;
-            $this->arrProductClassIds[] = array_keys($items['shipment_item']);
-
-            foreach ($items['shipment_item'] as $productClassId => $item) {
-                $arrQuantity[$productClassId] += $item['quantity'];
-                foreach ($item as $itemKey => $itemVal) {
-                    $arrParam[$itemKey . '_' . $shippingId . '_' . $productClassId] = $itemVal;
-                    $this->objFormParam->setValue($itemKey . '_' . $shippingId . '_' . $productClassId, $itemVal);
-                    $this->arrForm[$itemKey . '_' . $shippingId . '_' . $productClassId]['value'] = $itemVal;
+        /*
+         * フォームの配送先ごとの配列を生成
+         *
+         * $arrShipmentForm['(key)'][$shipping_index][$item_index] = 値
+         * $arrProductQuantity[$shipping_index] = 配送先ごとの配送商品数
+         */
+        $arrShipmentForm = array();
+        $arrProductQuantity = array();
+        $arrShippingIds = $objFormParam->getValue('shipping_id');
+        foreach ($arrShippingIds as $shipping_index => $shipping_id) {
+            $item_index = 0;
+            foreach ($arrShipmentItem[$shipping_id] as $product_class_id => $shipment_item) {
+                foreach ($shipment_item as $key => $val) {
+                    $arrShipmentForm[$key][$shipping_index][$item_index] = $val;
                 }
+                // 受注商品の数量を設定
+                $arrQuantity[$product_class_id] += $shipment_item['shipment_quantity'];
+                $item_index++;
             }
+            // 配送先ごとの配送商品数を設定
+            $arrProductQuantity[$shipping_index] = count($arrShipmentItem[$shipping_id]);
         }
 
+        $objFormParam->setParam($arrShipmentForm);
+        $objFormParam->setValue('shipping_product_quantity', $arrProductQuantity);
+
         // 受注商品の数量を変更
-        $dest = array();
-        foreach ($arrQuantity as $productClassId => $quantity) {
-            foreach ($this->arrForm['product_class_id'] as $n => $orderProductClassId) {
-                if ($productClassId == $orderProductClassId) {
-                    $dest['quantity'][$n] = $quantity;
+        $arrDest = array();
+        foreach ($arrQuantity as $product_class_id => $quantity) {
+            foreach ($objFormParam->getValue('product_class_id') as $n => $order_product_class_id) {
+                if ($product_class_id == $order_product_class_id) {
+                    $arrDest['quantity'][$n] = $quantity;
                 }
             }
         }
-
-        // $this->arrShipping の内容で, 再度パラメータを初期化する
-        $this->lfInitShippingParam($this->arrShipping);
-        $this->objFormParam->setParam($arrParam);
-        $this->objFormParam->setParam($dest);
+        $objFormParam->setParam($arrDest);
     }
 
-    function lfGetOrderData($order_id) {
-        if(SC_Utils_Ex::sfIsInt($order_id)) {
-            // DBから受注情報を読み込む
-            $objQuery = new SC_Query();
-            $objDb = new SC_Helper_DB_Ex();
-            $where = "order_id = ?";
-            $arrRet = $objQuery->select("*", "dtb_order", $where, array($order_id));
-            $this->objFormParam->setParam($arrRet[0]);
-            list($db_point, $rollback_point) = $objDb->sfGetRollbackPoint($order_id, $arrRet[0]['use_point'], $arrRet[0]['add_point']);
-            $this->objFormParam->setValue('total_point', $db_point);
-            $this->objFormParam->setValue('point', $rollback_point);
-            $this->arrForm = $arrRet[0];
+    /**
+     * 受注データを取得して, SC_FormParam へ設定する.
+     *
+     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+     * @param integer $order_id 取得元の受注ID
+     * @return void
+     */
+    function setOrderToFormParam(&$objFormParam, $order_id) {
+        $objPurchase = new SC_Helper_Purchase_Ex();
 
-            // 受注詳細データの取得
-            $arrRet = $this->lfGetOrderDetail($order_id);
-            $arrRet = SC_Utils_Ex::sfSwapArray($arrRet);
-            $this->arrForm = array_merge($this->arrForm, $arrRet);
-            $this->objFormParam->setParam($arrRet);
+        // 受注詳細を設定
+        $arrOrderDetail = $objPurchase->getOrderDetail($order_id, false);
+        $objFormParam->setParam(SC_Utils_Ex::sfSwapArray($arrOrderDetail));
 
-            $this->arrShipping = $this->lfGetShippingData($order_id);
-            $this->lfInitShippingParam($this->arrShipping);
+        $arrShippings = $objPurchase->getShippings($order_id);
+        // お届け日の処理
+        foreach (array_keys($arrShippings) as $key) {
+            $shipping =& $arrShippings[$key];
+            if (!SC_Utils_Ex::isBlank($shipping["shipping_date"])) {
+                $ts = strtotime($shipping["shipping_date"]);
+                $arrShippings[$key]['shipping_date_year'] = date("Y", $ts);
+                $arrShippings[$key]['shipping_date_month'] = date("n", $ts);
+                $arrShippings[$key]['shipping_date_day'] = date("j", $ts);
+            }
+        }
+        $objFormParam->setValue('shipping_quantity', count($arrShippings));
+        $objFormParam->setParam(SC_Utils_Ex::sfSwapArray($arrShippings));
 
-            $this->objFormParam->setValue('shipping_quantity', count($this->arrShipping));
-
-            // 配送情報の処理
-            foreach ($this->arrShipping as $shipping) {
-
-                $this->arrShippingIds[] = $shipping['shipping_id'];
-                $this->arrProductClassIds[] = array_keys($shipping['shipment_item']);
-
-                // お届け日の取得
-                if (!SC_Utils_Ex::isBlank($shipping["shipping_date"])) {
-                    $ts = strtotime($shipping["shipping_date"]);
-                    $this->objFormParam->setValue('shipping_date_year_' . $shipping['shipping_id'], date("Y", $ts));
-                    $this->objFormParam->setValue('shipping_date_month_' . $shipping['shipping_id'], date("n", $ts));
-                    $this->objFormParam->setValue('shipping_date_day_' . $shipping['shipping_id'], date("j", $ts));
+        /*
+         * 配送商品を設定
+         *
+         * $arrShipmentItem['shipment_(key)'][$shipping_index][$item_index] = 値
+         * $arrProductQuantity[$shipping_index] = 配送先ごとの配送商品数
+         */
+        $arrProductQuantity = array();
+        $arrShipmentItem = array();
+        foreach ($arrShippings as $shipping_index => $arrShipping) {
+            $arrProductQuantity[$shipping_index] = count($arrShipping['shipment_item']);
+            foreach ($arrShipping['shipment_item'] as $item_index => $arrItem) {
+                foreach ($arrItem as $item_key => $item_val) {
+                    $arrShipmentItem['shipment_' . $item_key][$shipping_index][$item_index] = $item_val;
                 }
-
-                // 配送内容の処理
-                foreach ($shipping as $shippingKey => $shippingVal) {
-
-                    $this->objFormParam->setValue($shippingKey . '_' . $shipping['shipping_id'], $shippingVal);
-
-                    $this->objFormParam->setValue('shipping_product_quantity' . '_' . $shipping['shipping_id'], count($shipping['shipment_item']));
-
-                    // 配送商品の処理
-                    foreach ($shipping['shipment_item'] as $productClassId => $item) {
-                        foreach ($item as $itemKey => $itemVal) {
-                            $this->objFormParam->setValue($itemKey . '_' . $shipping['shipping_id'] . '_' . $productClassId, $itemVal);
-                            $this->arrForm[$itemKey . '_' . $shipping['shipping_id'] . '_' . $productClassId]['value'] = $itemVal;
-                        }
-                    }
-                }
             }
-
-            // その他支払い情報を表示
-            if($this->arrForm["memo02"] != "") $this->arrForm["payment_info"] = unserialize($this->arrForm["memo02"]);
-            if($this->arrForm["memo01"] == PAYMENT_CREDIT_ID){
-                $this->arrForm["payment_type"] = "クレジット決済";
-            }elseif($this->arrForm["memo01"] == PAYMENT_CONVENIENCE_ID){
-                $this->arrForm["payment_type"] = "コンビニ決済";
-            }else{
-                $this->arrForm["payment_type"] = "お支払い";
-            }
-            // 受注データを表示用配列に代入(各EC-CUBEバージョンと決済モジュールとのデータ連携保全のため)
-            $this->arrDisp = $this->arrForm;
-        } else {
-            $this->lfInitShippingParam($this->arrShipping);
-            $this->objFormParam->setParam($_POST);
         }
-    }
+        $objFormParam->setValue('shipping_product_quantity', $arrProductQuantity);
+        $objFormParam->setParam($arrShipmentItem);
 
-    // 受注詳細データの取得
-    function lfGetOrderDetail($order_id) {
-        $objQuery = new SC_Query();
-        $col = "T1.product_id, T1.product_class_id, T1.product_name, "
-            . "T1.product_code, T1.classcategory_name1, T1.classcategory_name2, "
-            . "T1.price, T1.quantity, T1.point_rate, T2.product_type_id";
-        $from = <<< __EOS__
-                 dtb_order_detail T1
-            JOIN dtb_products_class T2
-               ON T1.product_class_id = T2.product_class_id
-__EOS__;
-        $arrRet = $objQuery->select($col, $from,
-                                    "order_id = ?", array($order_id));
-        return $arrRet;
+        /*
+         * 受注情報を設定
+         * $arrOrderDetail と項目が重複しており, $arrOrderDetail は連想配列の値
+         * が渡ってくるため, $arrOrder で上書きする.
+         */
+        $arrOrder = $objPurchase->getOrder($order_id);
+        $objFormParam->setParam($arrOrder);
+
+        // XXX ポイントを設定
+        list($db_point, $rollback_point) = SC_Helper_DB_Ex::sfGetRollbackPoint($order_id, $arrOrder['use_point'], $arrOrder['add_point']);
+        $objFormParam->setValue('total_point', $db_point);
+        $objFormParam->setValue('point', $rollback_point);
     }
 
     /**
-     * 配送情報の取得.
-     * TODO リファクタリング
+     * 入力内容のチェックを行う.
+     *
+     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+     * @return array エラーメッセージの配列
      */
-    function lfGetShippingData($orderId) {
-        $objQuery =& SC_Query::getSingletonInstance();
-        $objProduct = new SC_Product();
-        $objQuery->setOrder('shipping_id');
-        $arrRet = $objQuery->select("*", "dtb_shipping", "order_id = ?", array($orderId));
-        foreach (array_keys($arrRet) as $key) {
-            $objQuery->setOrder('shipping_id');
-            $arrItems = $objQuery->select("*", "dtb_shipment_item", "order_id = ? AND shipping_id = ?",
-                                          array($orderId, $arrRet[$key]['shipping_id']));
-            foreach ($arrItems as $itemKey => $arrDetail) {
-                foreach ($arrDetail as $detailKey => $detailVal) {
-                    $arrRet[$key]['shipment_item'][$arrDetail['product_class_id']][$detailKey] = $detailVal;
-                }
+    function lfCheckError(&$objFormParam) {
+        $objErr->arrErr = $objFormParam->checkError();
 
-                $arrRet[$key]['shipment_item'][$arrDetail['product_class_id']]['productsClass'] =& $objProduct->getDetailAndProductsClass($arrDetail['product_class_id']);
-            }
-        }
-        return $arrRet;
-    }
-
-    /* 入力内容のチェック */
-    function lfCheckError() {
-        // 入力データを渡す。
-        $arrRet =  $this->objFormParam->getHashArray();
-        $objErr = new SC_CheckError($arrRet);
-        $objErr->arrErr = $this->objFormParam->checkError();
-
-        if (count($objErr->arrErr) >= 1) {
+        if (!SC_Utils_Ex::isBlank($objErr->arrErr)) {
             return $objErr->arrErr;
         }
 
-        return $this->lfCheek();
-    }
+        $arrValues = $objFormParam->getHashArray();
 
-    /* 計算処理 */
-    function lfCheek() {
-        $objDb = new SC_Helper_DB_Ex();
-        $arrVal = $this->objFormParam->getHashArray();
-        $arrErr = array();
-
         // 商品の種類数
-        $max = count($arrVal['quantity']);
+        $max = count($arrValues['quantity']);
         $subtotal = 0;
         $totalpoint = 0;
         $totaltax = 0;
         for($i = 0; $i < $max; $i++) {
             // 小計の計算
-            $subtotal += SC_Helper_DB_Ex::sfCalcIncTax($arrVal['price'][$i]) * $arrVal['quantity'][$i];
+            $subtotal += SC_Helper_DB_Ex::sfCalcIncTax($arrValues['price'][$i]) * $arrValues['quantity'][$i];
             // 小計の計算
-            $totaltax += SC_Helper_DB_Ex::sfTax($arrVal['price'][$i]) * $arrVal['quantity'][$i];
+            $totaltax += SC_Helper_DB_Ex::sfTax($arrValues['price'][$i]) * $arrValues['quantity'][$i];
             // 加算ポイントの計算
-            $totalpoint += SC_Utils_Ex::sfPrePoint($arrVal['price'][$i], $arrVal['point_rate'][$i]) * $arrVal['quantity'][$i];
+            $totalpoint += SC_Utils_Ex::sfPrePoint($arrValues['price'][$i], $arrValues['point_rate'][$i]) * $arrValues['quantity'][$i];
         }
 
         // 消費税
-        $arrVal['tax'] = $totaltax;
+        $arrValues['tax'] = $totaltax;
         // 小計
-        $arrVal['subtotal'] = $subtotal;
+        $arrValues['subtotal'] = $subtotal;
         // 合計
-        $arrVal['total'] = $subtotal - $arrVal['discount'] + $arrVal['deliv_fee'] + $arrVal['charge'];
+        $arrValues['total'] = $subtotal - $arrValues['discount'] + $arrValues['deliv_fee'] + $arrValues['charge'];
         // お支払い合計
-        $arrVal['payment_total'] = $arrVal['total'] - ($arrVal['use_point'] * POINT_VALUE);
+        $arrValues['payment_total'] = $arrValues['total'] - ($arrValues['use_point'] * POINT_VALUE);
 
         // 加算ポイント
-        $arrVal['add_point'] = SC_Helper_DB_Ex::sfGetAddPoint($totalpoint, $arrVal['use_point']);
+        $arrValues['add_point'] = SC_Helper_DB_Ex::sfGetAddPoint($totalpoint, $arrValues['use_point']);
 
         // 最終保持ポイント
-        $arrVal['total_point'] = $this->objFormParam->getValue('point') - $arrVal['use_point'] + $arrVal['add_point'];
+        $arrValues['total_point'] = $objFormParam->getValue('point') - $arrValues['use_point'] + $arrValues['add_point'];
 
-        if ($arrVal['total'] < 0) {
-            $arrErr['total'] = '合計額がマイナス表示にならないように調整して下さい。<br />';
+        if ($arrValues['total'] < 0) {
+            $objErr->arrErr['total'] = '合計額がマイナス表示にならないように調整して下さい。<br />';
         }
 
-        if ($arrVal['payment_total'] < 0) {
-            $arrErr['payment_total'] = 'お支払い合計額がマイナス表示にならないように調整して下さい。<br />';
+        if ($arrValues['payment_total'] < 0) {
+            $objErr->arrErr['payment_total'] = 'お支払い合計額がマイナス表示にならないように調整して下さい。<br />';
         }
-        //新規追加受注のみ TODO 要リファクタリング(MODE if利用)
-        if ($this->getMode() == "add") {
-            if ($arrVal['total_point'] < 0) {
-                $arrErr['use_point'] = '最終保持ポイントがマイナス表示にならないように調整して下さい。<br />';
-            }
+
+        if ($arrValues['total_point'] < 0) {
+            $objErr->arrErr['use_point'] = '最終保持ポイントがマイナス表示にならないように調整して下さい。<br />';
         }
 
-        $this->objFormParam->setParam($arrVal);
-        return $arrErr;
+        $objFormParam->setParam($arrValues);
+        return $objErr->arrErr;
     }
 
     /**
      * DB更新処理
      *
-     * TODO リファクタリング
-     *
-     * @param integer $order_id 注文番号
-     * @return void
+     * @param integer $order_id 受注ID
+     * @param SC_Helper_Purchase $objPurchase SC_Helper_Purchase インスタンス
+     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+     * @return integer $order_id 受注ID
      */
-    function lfRegistData($order_id, &$objPurchase) {
-        $objQuery = new SC_Query();
+    function doRegister($order_id, &$objPurchase, &$objFormParam) {
 
-        $sqlval = $this->lfMakeSqlvalForDtbOrder();
+        $objQuery =& SC_Query::getSingletonInstance();
+        $arrValues = $objFormParam->getDbArray();
 
         $where = "order_id = ?";
 
         $objQuery->begin();
 
-        // 受注.対応状況の更新
-        SC_Helper_DB_Ex::sfUpdateOrderStatus($order_id, $sqlval['status'], $sqlval['add_point'], $sqlval['use_point'], $sqlval);
-
         // 受注テーブルの更新
-        $this->registerOrder($sqlval, $order_id);
+        $order_id = $objPurchase->registerOrder($order_id, $arrValues);
 
-        // 受注テーブルの名称列を更新
-        //SC_Helper_DB_Ex::sfUpdateOrderNameCol($order_id);
+        $arrDetail = $objFormParam->getSwapArray(array("product_id",
+                                                       "product_class_id",
+                                                       "product_code",
+                                                       "product_name",
+                                                       "price", "quantity",
+                                                       "point_rate",
+                                                       "classcategory_name1",
+                                                       "classcategory_name2"));
 
-        $arrDetail = $this->objFormParam->getSwapArray(array("product_id", "product_class_id", "product_code", "product_name", "price", "quantity", "point_rate", "classcategory_name1", "classcategory_name2"));
-
-
         // 変更しようとしている商品情報とDBに登録してある商品情報を比較することで、更新すべき数量を計算
         $max = count($arrDetail);
         $k = 0;
@@ -725,389 +596,197 @@
             ++$k;
         }
 
-        // 受注詳細データの初期化
-        $objQuery->delete("dtb_order_detail", $where, array($order_id));
-
         // 受注詳細データの更新
-        $max = count($arrDetail);
-        for ($i = 0; $i < $max; $i++) {
-            $sqlval = array();
-            $sqlval['order_id'] = $order_id;
-            $sqlval['product_id']  = $arrDetail[$i]['product_id'];
-            $sqlval['product_class_id']  = $arrDetail[$i]['product_class_id'];
-            $sqlval['product_code']  = $arrDetail[$i]['product_code'];
-            $sqlval['product_name']  = $arrDetail[$i]['product_name'];
-            $sqlval['price']  = $arrDetail[$i]['price'];
-            $sqlval['quantity']  = $arrDetail[$i]['quantity'];
-            $sqlval['point_rate']  = $arrDetail[$i]['point_rate'];
-            $sqlval['classcategory_name1'] = $arrDetail[$i]['classcategory_name1'];
-            $sqlval['classcategory_name2'] = $arrDetail[$i]['classcategory_name2'];
-            $objQuery->insert("dtb_order_detail", $sqlval);
-        }
+        $objPurchase->registerOrderDetail($order_id, $arrDetail);
 
         // 在庫数調整
-        $status = $sqlval['status'];
-        if (ORDER_DELIV != $status && ORDER_CANCEL != $status) {
-            $stock_sql = "UPDATE dtb_products_class SET stock = stock + ? WHERE product_class_id = ?";
-            foreach ($arrStockData AS $key=>$val) {
-                $stock_sqlval = array();
-                $stock_sqlval[] = $val['quantity'];
-                $stock_sqlval[] = $val['product_class_id'];
-
-                $objQuery->query($stock_sql, $stock_sqlval);
+        if (ORDER_DELIV != $arrValues['status']
+            && ORDER_CANCEL != $arrValues['status']) {
+            foreach ($arrStockData AS $stock) {
+                $objQuery->update('dtb_products_class', array(),
+                                  'product_class_id = ?',
+                                  array($stock['product_class_id']),
+                                  array('stock' => 'stock + ?'),
+                                  array($stock['quantity']));
             }
         }
 
-        // 配送情報の初期化
-        // FIXME UPDATE/INSERT にする
-        $objQuery->delete('dtb_shipping', "order_id = ?", array($order_id));
-        $objQuery->delete('dtb_shipment_item', "order_id = ?", array($order_id));
+        $arrAllShipping =  $objFormParam->getSwapArray(array('shipping_id',
+                                                             'shipping_name01',
+                                                             'shipping_name02',
+                                                             'shipping_kana01',
+                                                             'shipping_kana02',
+                                                             'shipping_tel01',
+                                                             'shipping_tel02',
+                                                             'shipping_tel03',
+                                                             'shipping_fax01',
+                                                             'shipping_fax02',
+                                                             'shipping_fax03',
+                                                             'shipping_pref',
+                                                             'shipping_zip01',
+                                                             'shipping_zip02',
+                                                             'shipping_addr01',
+                                                             'shipping_addr02',
+                                                             'shipping_date_year',
+                                                             'shipping_date_month',
+                                                             'shipping_date_day',
+                                                             'time_id'));
 
-        //        $arrParams = $this->objFormParam->getHashArray();
-        $arrParams = $_POST;
-        // 配送ID の配列を取得
-        $shippingIds = array();
-        foreach (array_keys($arrParams) as $key) {
-            if (preg_match('/^shipping_id_/', $key)) {
-                $shippingIds[] = $arrParams[$key];
-            }
-        }
+        $arrAllShipmentItem =
+            $objFormParam->getSwapArray(array('shipment_product_class_id',
+                                              'shipment_product_code',
+                                              'shipment_product_name',
+                                              'shipment_classcategory_name1',
+                                              'shipment_classcategory_name2',
+                                              'shipment_price',
+                                              'shipment_quantity'));
+        $arrShippingValues = array();
+        foreach ($arrAllShipping as $shipping_index => $arrShipping) {
+            $shipping_id = $arrShipping['shipping_id'];
+            $arrShippingValues[$shipping_index] = $arrShipping;
 
-        $cols = $objQuery->listTableFields('dtb_shipping');
+            $arrShippingValues[$shipping_index]['shipping_date']
+                = SC_Utils_Ex::sfGetTimestamp($arrShipping['shipping_date_year'],
+                                              $arrShipping['shipping_date_month'],
+                                              $arrShipping['shipping_date_day']);
 
-        foreach ($shippingIds as $shipping_id) {
+            // 配送業者IDを取得
+            $arrShippingValues[$shipping_index]['deliv_id'] = $objFormParam->getValue('deliv_id');
 
-            $arrParams['shipping_date_' .  $shipping_id] = SC_Utils_Ex::sfGetTimestamp($arrParams['shipping_date_year_' . $shipping_id],
-                                                                                       $arrParams['shipping_date_month_' . $shipping_id],
-                                                                                       $arrParams['shipping_date_day_' . $shipping_id]);
-            $dest = array();
-            foreach ($arrParams as $key => $val) {
-                $key = preg_replace('/_' . $shipping_id . '$/', '', $key);
-                if (in_array($key, $cols)) {
-                    $dest[$key] = $val;
-                }
-            }
+            // 複数配送の場合は配送商品を登録
+            if (!SC_Utils_Ex::isBlank($arrAllShipmentItem)) {
+                $arrShipmentValues = array();
 
-            if (SC_Utils::isBlank($dest['deliv_id'])) {
-                // XXX 商品種別IDは0番目の配列を使用
-                $product_type_id = $this->objFormParam->getValue('product_type_id');
-                $arrDeliv = $objPurchase->getDeliv($product_type_id[0]);
-                $dest['deliv_id'] = $arrDeliv[0]['deliv_id'];
-            }
-
-            $dest['shipping_id'] = $shipping_id;
-            $dest['order_id'] = $order_id;
-            $dest['create_date'] = 'Now()';
-            $dest['update_date'] = 'Now()';
-            $objQuery->insert('dtb_shipping', $dest);
-
-            // 商品規格ID の配列を取得
-            $productClassIds = array();
-            foreach (array_keys($arrParams) as $key) {
-                if (preg_match('/^product_class_id_' . $shipping_id . '_/', $key)) {
-                    $productClassIds[] = $arrParams[$key];
+                foreach ($arrAllShipmentItem[$shipping_index] as $key => $arrItem) {
+                    $i = 0;
+                    foreach ($arrItem as $item) {
+                        $arrShipmentValues[$shipping_index][$i][str_replace('shipment_', '', $key)] = $item;
+                        $i++;
+                    }
                 }
+                $objPurchase->registerShipmentItem($order_id, $shipping_id,
+                                                   $arrShipmentValues[$shipping_index]);
             }
-
-            foreach ($productClassIds as $product_class_id) {
-                $item['shipping_id'] = $shipping_id;
-                $item['order_id'] = $order_id;
-                $item['product_class_id'] = $product_class_id;
-                $item['product_name'] = $arrParams['product_name_' . $shipping_id . '_' . $product_class_id];
-                $item['product_code'] = $arrParams['product_code_' . $shipping_id . '_' . $product_class_id];
-                $item['classcategory_name1'] = $arrParams['classcategory_name1_' . $shipping_id . '_' . $product_class_id];
-                $item['classcategory_name2'] = $arrParams['classcategory_name2_' . $shipping_id . '_' . $product_class_id];
-                $item['price'] = $arrParams['price_' . $shipping_id . '_' . $product_class_id];
-                $item['quantity'] = $arrParams['quantity_' . $shipping_id . '_' . $product_class_id];
-                $objQuery->insert("dtb_shipment_item", $item);
-            }
         }
+        $objPurchase->registerShipping($order_id, $arrShippingValues, false);
         $objQuery->commit();
+        return $order_id;
     }
 
     /**
-     * DB登録処理
+     * 受注商品の追加/更新を行う.
      *
-     * @return integer 注文番号
+     * 小画面で選択した受注商品をフォームに反映させる.
+     *
+     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+     * @return void
      */
-    function lfRegistNewData(&$objPurchase) {
-        $objQuery = new SC_Query();
-
-        $sqlval = $this->lfMakeSqlvalForDtbOrder();
-
-        // ポイントは別登録
-        $addPoint = $sqlval['add_point'];
-        $usePoint = $sqlval['use_point'];
-        $sqlval['add_point'] = 0;
-        $sqlval['use_point'] = 0;
-
-        // customer_id
-        if ($sqlval["customer_id"] == "") {
-            $sqlval['customer_id'] = '0';
+    function doRegisterProduct(&$objFormParam) {
+        $product_class_id = $objFormParam->getValue('add_product_class_id');
+        if (SC_Utils_Ex::isBlank($product_class_id)) {
+            $product_class_id = $objFormParam->getValue('edit_product_class_id');
         }
 
-        $sqlval['create_date'] = 'Now()';       // 受注日
-
-        $objQuery->begin();
-
-        // 受注テーブルの登録
-        $order_id = $objQuery->nextVal('dtb_order_order_id');
-        $sqlval['order_id'] = $order_id;
-        $this->registerOrder($sqlval, $order_id);
-
-        // 受注.対応状況の更新
-        SC_Helper_DB_Ex::sfUpdateOrderStatus($order_id, null, $addPoint, $usePoint);
-
-        // 受注テーブルの名称列を更新
-        //SC_Helper_DB_Ex::sfUpdateOrderNameCol($order_id);
-
-        // 受注詳細データの更新
-        $arrDetail = $this->objFormParam->getSwapArray(array("product_id", "product_class_id", "product_code", "product_name", "price", "quantity", "point_rate", "classcategory_name1", "classcategory_name2"));
-        $objQuery->delete("dtb_order_detail", 'order_id = ?', array($order_id));
-
-        $max = count($arrDetail);
-        for ($i = 0; $i < $max; $i++) {
-            $sqlval = array();
-            $sqlval['order_id'] = $order_id;
-            $sqlval['product_id']  = $arrDetail[$i]['product_id'];
-            $sqlval['product_class_id']  = $arrDetail[$i]['product_class_id'];
-            $sqlval['product_code']  = $arrDetail[$i]['product_code'];
-            $sqlval['product_name']  = $arrDetail[$i]['product_name'];
-            $sqlval['price']  = $arrDetail[$i]['price'];
-            $sqlval['quantity']  = $arrDetail[$i]['quantity'];
-            $sqlval['point_rate']  = $arrDetail[$i]['point_rate'];
-            $sqlval['classcategory_name1'] = $arrDetail[$i]['classcategory_name1'];
-            $sqlval['classcategory_name2'] = $arrDetail[$i]['classcategory_name2'];
-
-            $objQuery->insert("dtb_order_detail", $sqlval);
-
-
-            // 在庫数減少処理
-            // 現在の実在庫数取得
-            $pre_stock = $objQuery->getOne("SELECT stock FROM dtb_products_class WHERE product_class_id = ?", array($arrDetail[$i]['product_class_id']));
-
-            $stock_sqlval = array();
-            $stock_sqlval['stock'] = intval($pre_stock - $arrDetail[$i]['quantity']);
-            if ($stock_sqlval['stock'] === 0) {
-                $stock_sqlval['stock'] = '0';
+        // フォームの内容を更新
+        $exists = false;
+        $arrExistsProductClassIds = $objFormParam->getValue('product_class_id');
+        foreach (array_keys($arrExistsProductClassIds) as $key) {
+            $exists_product_class_id = $arrExistsProductClassIds[$key];
+            if ($exists_product_class_id == $product_class_id) {
+                $exists = true;
+                $arrExistsQuantity = $objFormParam->getValue('quantity');
+                $arrExistsQuantity[$key]++;
+                $objFormParam->setValue('quantity', $arrExistsQuantity);
             }
-
-            $st_params = array();
-            $st_params[] = $arrDetail[$i]['product_class_id'];
-
-            $objQuery->update("dtb_products_class", $stock_sqlval, 'product_class_id = ?', $st_params);
         }
 
-        $arrParams = $this->objFormParam->getHashArray();
-        // 配送ID の配列を取得
-        $shippingIds = array();
-        foreach (array_keys($arrParams) as $key) {
-            if (preg_match('/^shipping_id_/', $key)) {
-                $shippingIds[] = $arrParams[$key];
-            }
-        }
+        // 新しく商品を追加した場合はフォームに登録
+        if (!$exists) {
+            $objProduct = new SC_Product();
+            $arrProduct = $objProduct->getDetailAndProductsClass($product_class_id);
+            $arrProduct['quantity'] = 1;
+            $arrProduct['price'] = $arrProduct['price02'];
+            $arrProduct['product_name'] = $arrProduct['name'];
 
-        $cols = $objQuery->listTableFields('dtb_shipping');
-        foreach ($shippingIds as $shipping_id) {
-
-            $arrParams['shipping_date_' .  $shipping_id] = SC_Utils_Ex::sfGetTimestamp($arrParams['shipping_date_year_' . $shipping_id],
-                                                                                       $arrParams['shipping_date_month_' . $shipping_id],
-                                                                                       $arrParams['shipping_date_day_' . $shipping_id]);
-            $dest = array();
-            foreach ($arrParams as $key => $val) {
-                $key = preg_replace('/_' . $shipping_id . '$/', '', $key);
-                if (in_array($key, $cols)) {
-                    $dest[$key] = $val;
-                }
+            $arrUpdateKeys = array('product_id', 'product_class_id',
+                                   'product_type_id', 'point_rate',
+                                   'product_code', 'product_name',
+                                   'classcategory_name1', 'classcategory_name2',
+                                   'quantity', 'price');
+            foreach ($arrUpdateKeys as $key) {
+                $arrValues = $objFormParam->getValue($key);
+                $arrValues[] = $arrProduct[$key];
+                $objFormParam->setValue($key, $arrValues);
             }
-            if (SC_Utils::isBlank($dest['deliv_id'])) {
-                // XXX 商品種別IDは0番目の配列を使用
-                $product_type_id = $this->objFormParam->getValue('product_type_id');
-                $arrDeliv = $objPurchase->getDeliv($product_type_id[0]);
-                $dest['deliv_id'] = $arrDeliv[0]['deliv_id'];
-            }
-
-            $dest['shipping_id'] = $shipping_id;
-            $dest['order_id'] = $order_id;
-            $dest['create_date'] = 'Now()';
-            $dest['update_date'] = 'Now()';
-            $objQuery->insert('dtb_shipping', $dest);
-
-            // 商品規格ID の配列を取得
-            $productClassIds = array();
-            foreach (array_keys($arrParams) as $key) {
-                if (preg_match('/^product_class_id_' . $shipping_id . '_/', $key)) {
-                    $productClassIds[] = $arrParams[$key];
-                }
-            }
-
-            foreach ($productClassIds as $product_class_id) {
-                $item['shipping_id'] = $shipping_id;
-                $item['order_id'] = $order_id;
-                $item['product_class_id'] = $product_class_id;
-                $item['product_name'] = $arrParams['product_name_' . $shipping_id . '_' . $product_class_id];
-                $item['product_code'] = $arrParams['product_code_' . $shipping_id . '_' . $product_class_id];
-                $item['classcategory_name1'] = $arrParams['classcategory_name1_' . $shipping_id . '_' . $product_class_id];
-                $item['classcategory_name2'] = $arrParams['classcategory_name2_' . $shipping_id . '_' . $product_class_id];
-                $item['price'] = $arrParams['price_' . $shipping_id . '_' . $product_class_id];
-                $item['quantity'] = $arrParams['quantity_' . $shipping_id . '_' . $product_class_id];
-                $objQuery->insert("dtb_shipment_item", $item);
-            }
         }
-
-        $objQuery->commit();
-
-        return $order_id;
     }
 
     /**
-     * 受注を登録する
+     * 受注商品を削除する.
+     *
+     * @param integer $delete_no 削除する受注商品の項番
+     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+     * @return void
      */
-    function registerOrder($sqlval, $order_id) {
-        $table = 'dtb_order';
-        $objQuery = SC_Query::getSingletonInstance();
-        $cols = $objQuery->listTableFields($table);
-        $dest = array();
-        foreach ($sqlval as $key => $val) {
-            if (in_array($key, $cols)) {
-                $dest[$key] = $val;
-            }
-        }
-
-        $exists = $objQuery->count("dtb_order", "order_id = ?", array($order_id));
-        if ($exists > 0) {
-            $objQuery->update($table, $dest, "order_id = ?", array($order_id));
-        } else {
-            $dest['order_id'] = $order_id;
-            $result = $objQuery->insert($table, $dest);
-        }
-    }
-
-    function lfInsertProduct($product_class_id) {
-        $objProduct = new SC_Product();
-        $arrProduct = $this->lfGetProductsClass($objProduct->getDetailAndProductsClass($product_class_id));
-        $this->arrForm = $this->objFormParam->getFormParamList();
-        $existes = false;
-        $existes_key = NULL;
-        // 既に同じ商品がないか、確認する
-        if (!empty($this->arrForm['product_class_id']['value'])) {
-            foreach ($this->arrForm['product_class_id']['value'] AS $key=>$val) {
-                // 既に同じ商品がある場合
-                if ($val == $product_class_id) {
-                    $existes = true;
-                    $existes_key = $key;
+    function doDeleteProduct($delete_no, &$objFormParam) {
+        $arrDeleteKeys = array('product_id', 'product_class_id',
+                               'product_type_id', 'point_rate',
+                               'product_code', 'product_name',
+                               'classcategory_name1', 'classcategory_name2',
+                               'quantity', 'price');
+        foreach ($arrDeleteKeys as $key) {
+            $arrNewValues = array();
+            $arrValues = $objFormParam->getValue($key);
+            foreach ($arrValues as $index => $val) {
+                if ($index != $delete_no) {
+                    $arrNewValues[] = $val;
                 }
             }
+            $objFormParam->setValue($key, $arrNewValues);
         }
-
-        if ($existes) {
-            // 既に同じ商品がある場合
-            ++$this->arrForm['quantity']['value'][$existes_key];
-        } else {
-            // 既に同じ商品がない場合
-            $this->lfSetProductData($arrProduct);
-        }
     }
 
-    function lfUpdateProduct($product_class_id, $no) {
-        $objProduct = new SC_Product();
-        $arrProduct = $this->lfGetProductsClass($objProduct->getDetailAndProductsClass($product_class_id));
-        $this->arrForm = $this->objFormParam->getFormParamList();
-        $this->lfSetProductData($arrProduct, $no);
+    /**
+     * お届け先を追加する.
+     *
+     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+     * @return void
+     */
+    function addShipping(&$objFormParam) {
+        $objFormParam->setValue('shipping_quantity',
+                                $objFormParam->getValue('shipping_quantity') + 1);
+        $arrShippingIds = $objFormParam->getValue('shipping_id');
+        $arrShippingIds[] = max($arrShippingIds) + 1;
+        $objFormParam->setValue('shipping_id', $arrShippingIds);
     }
 
-    function lfSetProductData($arrProduct, $no = null) {
-        foreach ($arrProduct AS $key=>$val) {
-            if (!is_array($this->arrForm[$key]['value'])) {
-                unset($this->arrForm[$key]['value']);
-            }
-            if ($no === null) {
-                $this->arrForm[$key]['value'][] = $val;
-            } else {
-                $this->arrForm[$key]['value'][$no] = $val;
-            }
-        }
-    }
-
-    function lfGetProductsClass($productsClass) {
-        $arrProduct['price'] = $productsClass['price02'];
-        $arrProduct['quantity'] = 1;
-        $arrProduct['product_id'] = $productsClass['product_id'];
-        $arrProduct['product_class_id'] = $productsClass['product_class_id'];
-        $arrProduct['product_type_id'] = $productsClass['product_type_id'];
-        $arrProduct['point_rate'] = $productsClass['point_rate'];
-        $arrProduct['product_code'] = $productsClass['product_code'];
-        $arrProduct['product_name'] = $productsClass['name'];
-        $arrProduct['classcategory_name1'] = $productsClass['classcategory_name1'];
-        $arrProduct['classcategory_name2'] = $productsClass['classcategory_name2'];
-        return $arrProduct;
-    }
-
-
     /**
-     * 検索結果から顧客IDを指定された場合、顧客情報をフォームに代入する
-     * @param int $edit_customer_id 顧客ID
+     * 顧客情報をフォームに設定する.
+     *
+     * @param integer $customer_id 顧客ID
+     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+     * @return void
      */
-    function lfSetCustomerInfo($edit_customer_id = ""){
-        // 顧客IDが指定されている場合のみ、処理を実行する
-        if( $edit_customer_id === "" ) return ;
-
-        // 検索で選択された顧客IDが入力されている場合
-        if( is_null($edit_customer_id) === false && 0 < strlen($edit_customer_id) && SC_Utils_Ex::sfIsInt($edit_customer_id) ){
-            $objQuery = new SC_Query();
-
-            // 顧客情報を取得する
-            $arrCustomerInfo = $objQuery->select('*', 'dtb_customer', 'customer_id = ? AND del_flg = 0', array($edit_customer_id));
-
-            // 顧客情報を取得する事が出来たら、テンプレートに値を渡す
-            if( 0 < count($arrCustomerInfo) && is_array($arrCustomerInfo) === true){
-                // カラム名にorder_を付ける(テンプレート側でorder_がついている為
-                foreach($arrCustomerInfo[0] as $index=>$customer_info){
-                    // customer_idにはorder_を付けないようにする
-                    $order_index = ($index == 'customer_id') ? $index : 'order_'.$index;
-                    $arrCustomer[$order_index] = $customer_info;
-                }
-            }
-
-            // hiddenに渡す
-            $this->edit_customer_id = $edit_customer_id;
-
-            // 受注日に現在の時刻を取得し、表示させる
-            $create_date = $objQuery->getAll('SELECT now() as create_date;');
-            $arrCustomer['create_date'] = $create_date[0]['create_date'];
-
-            // 情報上書き
-            $this->objFormParam->setParam($arrCustomer);
-            // 入力値の変換
-            $this->objFormParam->convParam();
+    function setCustomerTo($customer_id, &$objFormParam) {
+        $arrCustomer = SC_Helper_Customer_Ex::sfGetCustomerDataFromId($customer_id);
+        foreach ($arrCustomer as $key => $val) {
+            $objFormParam->setValue('order_' . $key, $val);
         }
+        $objFormParam->setValue('customer_id', $customer_id);
     }
 
     /**
-     * 受注テーブルの登録・更新用データの共通部分を作成する
+     * アンカーキーを取得する.
      *
-     * @return array
+     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+     * @return アンカーキーの文字列
      */
-    function lfMakeSqlvalForDtbOrder() {
-
-        // 入力データを取得する
-        $sqlval = $this->objFormParam->getHashArray();
-        foreach ($sqlval as $key => $val) {
-            // 配列は登録しない
-            if (is_array($val)) {
-                unset($sqlval[$key]);
-            }
+    function getAnchorKey(&$objFormParam) {
+        $ancor_key = $objFormParam->getValue('anchor_key');
+        if (!SC_Utils_Ex::isBlank($ancor_key)) {
+            return "location.hash='#" . htmlentities(urlencode($ancor_key), ENT_QUOTES) . "'";
         }
-
-        // 受注テーブルに書き込まない列を除去
-        unset($sqlval['total_point']);
-        unset($sqlval['point']);
-        unset($sqlval['commit_date']);
-
-        // 更新日時
-        $sqlval['update_date'] = 'Now()';
-
-        return $sqlval;
+        return '';
     }
 }
 ?>

変更: branches/version-2_5-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Status.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Status.php	2011-02-17 05:16:23 UTC (rev 20179)
+++ branches/version-2_5-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Status.php	2011-02-17 10:40:06 UTC (rev 20180)
@@ -171,6 +171,7 @@
      * ステータス情報の更新
      */
     function lfStatusMove($statusId, $arrOrderId) {
+        $objPurchase = new SC_Helper_Purchase_Ex();
         $objQuery = new SC_Query();
 
         if (!isset($arrOrderId) || !is_array($arrOrderId)) {
@@ -182,7 +183,7 @@
         $objQuery->begin();
 
         foreach ($arrOrderId as $orderId) {
-            SC_Helper_DB_Ex::sfUpdateOrderStatus($orderId, $statusId);
+            $objPurchase->sfUpdateOrderStatus($orderId, $statusId);
         }
 
         $objQuery->commit();




Svn-src-all メーリングリストの案内