Index: 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	(revision 18858)
+++ branches/version-2_5-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php	(revision 18872)
@@ -386,9 +386,8 @@
         $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_id1");
-        $this->objFormParam->addParam("規格2", "classcategory_id2");
         $this->objFormParam->addParam("規格名1", "classcategory_name1");
         $this->objFormParam->addParam("規格名2", "classcategory_name2");
@@ -549,5 +548,5 @@
         SC_Helper_DB_Ex::sfUpdateOrderNameCol($order_id);
 
-        $arrDetail = $this->objFormParam->getSwapArray(array("product_id", "product_code", "product_name", "price", "quantity", "point_rate", "classcategory_id1", "classcategory_id2", "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"));
 
 
@@ -558,21 +557,17 @@
         for($i = 0; $i < $max; $i++) {
             if (!empty($arrDetail[$i]['product_id'])) {
-                $arrPreDetail = $objQuery->select('*', "dtb_order_detail", "order_id = ? AND product_id = ? AND classcategory_id1 = ? AND classcategory_id2 = ?", array($order_id, $arrDetail[$i]['product_id'], $arrDetail[$i]['classcategory_id1'], $arrDetail[$i]['classcategory_id2']));
+                $arrPreDetail = $objQuery->select('*', "dtb_order_detail", "order_id = ? AND product_class_id = ?", array($order_id, $arrDetail[$i]['product_class_id']));
                 if (!empty($arrPreDetail) && $arrPreDetail[0]['quantity'] != $arrDetail[$i]['quantity']) {
                     // 数量が変更された商品
-                    $arrStockData[$k]['product_id'] = $arrDetail[$i]['product_id'];
-                    $arrStockData[$k]['classcategory_id1'] = $arrDetail[$i]['classcategory_id1'];
-                    $arrStockData[$k]['classcategory_id2'] = $arrDetail[$i]['classcategory_id2'];
+                    $arrStockData[$k]['product_class_id'] = $arrDetail[$i]['product_class_id'];
                     $arrStockData[$k]['quantity'] = $arrPreDetail[0]['quantity'] - $arrDetail[$i]['quantity'];
                     ++$k;
                 } elseif (empty($arrPreDetail)) {
                     // 新しく追加された商品 もしくは 違う商品に変更された商品
-                    $arrStockData[$k]['product_id'] = $arrDetail[$i]['product_id'];
-                    $arrStockData[$k]['classcategory_id1'] = $arrDetail[$i]['classcategory_id1'];
-                    $arrStockData[$k]['classcategory_id2'] = $arrDetail[$i]['classcategory_id2'];
+                    $arrStockData[$k]['product_class_id'] = $arrDetail[$i]['product_class_id'];
                     $arrStockData[$k]['quantity'] = -$arrDetail[$i]['quantity'];
                     ++$k;
                 }
-                $objQuery->delete("dtb_order_detail", "order_id = ? AND product_id = ? AND classcategory_id1 = ? AND classcategory_id2 = ?", array($order_id, $arrDetail[$i]['product_id'], $arrDetail[$i]['classcategory_id1'], $arrDetail[$i]['classcategory_id2']));
+                $objQuery->delete("dtb_order_detail", "order_id = ? AND product_class_id = ?", array($order_id, $arrDetail[$i]['product_class_id']));
             }
         }
@@ -581,7 +576,5 @@
         $arrPreDetail = $objQuery->select('*', "dtb_order_detail", "order_id = ?", array($order_id));
         foreach ($arrPreDetail AS $key=>$val) {
-            $arrStockData[$k]['product_id'] = $val['product_id'];
-            $arrStockData[$k]['classcategory_id1'] = $val['classcategory_id1'];
-            $arrStockData[$k]['classcategory_id2'] = $val['classcategory_id2'];
+            $arrStockData[$k]['product_class_id'] = $val['product_class_id'];
             $arrStockData[$k]['quantity'] = $val['quantity'];
             ++$k;
@@ -597,4 +590,5 @@
             $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'];
@@ -602,6 +596,4 @@
             $sqlval['quantity']  = $arrDetail[$i]['quantity'];
             $sqlval['point_rate']  = $arrDetail[$i]['point_rate'];
-            $sqlval['classcategory_id1'] = $arrDetail[$i]['classcategory_id1'];
-            $sqlval['classcategory_id2'] = $arrDetail[$i]['classcategory_id2'];
             $sqlval['classcategory_name1'] = $arrDetail[$i]['classcategory_name1'];
             $sqlval['classcategory_name2'] = $arrDetail[$i]['classcategory_name2'];
@@ -612,11 +604,9 @@
         $status = $sqlval['status'];
         if (ORDER_DELIV != $status && ORDER_CANCEL != $status) {
-            $stock_sql = "UPDATE dtb_products_class SET stock = stock + ? WHERE product_id = ? AND classcategory_id1 = ? AND classcategory_id2 = ?;";
+            $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_id'];
-                $stock_sqlval[] = $val['classcategory_id1'];
-                $stock_sqlval[] = $val['classcategory_id2'];
+                $stock_sqlval[] = $val['product_class_id'];
 
                 $objQuery->query($stock_sql, $stock_sqlval);
@@ -665,5 +655,5 @@
 
         // 受注詳細データの更新
-        $arrDetail = $this->objFormParam->getSwapArray(array("product_id", "product_code", "product_name", "price", "quantity", "point_rate", "classcategory_id1", "classcategory_id2", "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"));
         $objQuery->delete("dtb_order_detail", 'order_id = ?', array($order_id));
 
@@ -673,4 +663,5 @@
             $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'];
@@ -678,6 +669,4 @@
             $sqlval['quantity']  = $arrDetail[$i]['quantity'];
             $sqlval['point_rate']  = $arrDetail[$i]['point_rate'];
-            $sqlval['classcategory_id1'] = $arrDetail[$i]['classcategory_id1'];
-            $sqlval['classcategory_id2'] = $arrDetail[$i]['classcategory_id2'];
             $sqlval['classcategory_name1'] = $arrDetail[$i]['classcategory_name1'];
             $sqlval['classcategory_name2'] = $arrDetail[$i]['classcategory_name2'];
@@ -688,5 +677,5 @@
             // 在庫数減少処理
             // 現在の実在庫数取得
-            $pre_stock = $objQuery->getOne("SELECT stock FROM dtb_products_class WHERE product_id = ? AND classcategory_id1 = ?  AND classcategory_id2 = ?", array($arrDetail[$i]['product_id'], $arrDetail[$i]['classcategory_id1'], $arrDetail[$i]['classcategory_id2']));
+            $pre_stock = $objQuery->getOne("SELECT stock FROM dtb_products_class WHERE product_class_id = ?", array($arrDetail[$i]['product_class_id']));
 
             $stock_sqlval = array();
@@ -697,9 +686,7 @@
 
             $st_params = array();
-            $st_params[] = $arrDetail[$i]['product_id'];
-            $st_params[] = $arrDetail[$i]['classcategory_id1'];
-            $st_params[] = $arrDetail[$i]['classcategory_id2'];
-
-            $objQuery->update("dtb_products_class", $stock_sqlval, 'product_id = ? AND classcategory_id1 = ? AND classcategory_id2 = ?', $st_params);
+            $st_params[] = $arrDetail[$i]['product_class_id'];
+
+            $objQuery->update("dtb_products_class", $stock_sqlval, 'product_class_id = ?', $st_params);
         }
         $objQuery->commit();
@@ -714,6 +701,6 @@
         $existes_key = NULL;
         // 既に同じ商品がないか、確認する
-        if (!empty($this->arrForm['product_id']['value'])) {
-            foreach ($this->arrForm['product_id']['value'] AS $key=>$val) {
+        if (!empty($this->arrForm['product_class_id']['value'])) {
+            foreach ($this->arrForm['product_class_id']['value'] AS $key=>$val) {
                 // 既に同じ商品がある場合
                 if ($val == $product_id && $this->arrForm['product_id']['classcategory_id1'][$key] == $classcategory_id1 && $this->arrForm['product_id']['classcategory_id2'][$key] == $classcategory_id2) {
@@ -752,17 +739,16 @@
     }
 
-    function lfGetProductsClass($product_id, $classcategory_id1, $classcategory_id2) {
+    function lfGetProductsClass($product_class_id) {
         $objDb = new SC_Helper_DB_Ex();
         $arrClassCatName = $objDb->sfGetIDValueList("dtb_classcategory", "classcategory_id", "name");
-        $arrRet = $objDb->sfGetProductsClass(array($product_id, $classcategory_id1, $classcategory_id2), true);
+        $arrRet = $objDb->sfGetProductsClass(array($product_class_id), true);
 
         $arrProduct['price'] = $arrRet['price02'];
         $arrProduct['quantity'] = 1;
         $arrProduct['product_id'] = $arrRet['product_id'];
+        $arrProduct['product_class_id'] = $arrRet['product_class_id'];
         $arrProduct['point_rate'] = $arrRet['point_rate'];
         $arrProduct['product_code'] = $arrRet['product_code'];
         $arrProduct['product_name'] = $arrRet['name'];
-        $arrProduct['classcategory_id1'] = $arrRet['classcategory_id1'];
-        $arrProduct['classcategory_id2'] = $arrRet['classcategory_id2'];
         $arrProduct['classcategory_name1'] = $arrClassCatName[$arrRet['classcategory_id1']];
         $arrProduct['classcategory_name2'] = $arrClassCatName[$arrRet['classcategory_id2']];
Index: branches/version-2_5-dev/data/class/pages/admin/order/LC_Page_Admin_Order_ProductSelect.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/order/LC_Page_Admin_Order_ProductSelect.php	(revision 18820)
+++ branches/version-2_5-dev/data/class/pages/admin/order/LC_Page_Admin_Order_ProductSelect.php	(revision 18872)
@@ -1,2 +1,3 @@
+
 <?php
 /*
@@ -81,4 +82,5 @@
 
             $where = "del_flg = 0";
+            $arrval = array();
 
             /* 入力エラーなし */
@@ -112,29 +114,10 @@
              * FIXME パフォーマンスに問題があるため SC_Product::lists() を使用する
              */
-            // 読み込む列とテーブルの指定
-            $col = "DISTINCT T1.product_id, product_code_min, product_code_max,"
-                . " price01_min, price01_max, price02_min, price02_max,"
-                . " stock_min, stock_max, stock_unlimited_min,"
-                . " stock_unlimited_max, del_flg, status, name, comment1,"
-                . " comment2, comment3, main_list_comment, main_image,"
-                . " main_list_image, deliv_date_id, sale_limit,"
-                . " point_rate, create_date, deliv_fee, "
-                . " T4.product_rank, T4.category_rank";
-            $from = "vw_products_allclass AS T1"
-                . " JOIN ("
-                . " SELECT max(T3.rank) AS category_rank,"
-                . "        max(T2.rank) AS product_rank,"
-                . "        T2.product_id"
-                . "   FROM dtb_product_categories T2"
-                . "   JOIN dtb_category T3 USING (category_id)"
-                . " GROUP BY product_id) AS T4 USING (product_id)";
-            $order = "T4.category_rank DESC, T4.product_rank DESC";
+            $objProduct = new SC_Product();
+            $productIds = $objProduct->findProductIds($objQuery, $arrval);
 
             // 行数の取得
-            if (empty($arrval)) {
-                $arrval = array();
-            }
-            $linemax = $objQuery->count("dtb_products", $where, $arrval);
-            $this->tpl_linemax = $linemax;              // 何件が該当しました。表示用
+            $linemax = count($productIds);
+            $this->tpl_linemax = $linemax;
 
             // ページ送りの処理
@@ -157,16 +140,26 @@
 
             // 検索結果の取得
-            $this->arrProducts = $objQuery->select($col, $from, $where, $arrval);
-
-            // 規格名一覧
-            $arrClassName = $objDb->sfGetIDValueList("dtb_class", "class_id", "name");
-
-            // 規格分類名一覧
-            $arrClassCatName = $objDb->sfGetIDValueList("dtb_classcategory", "classcategory_id", "name");
-
-            // 規格セレクトボックス設定
-            for($i = 0; $i < count($this->arrProducts); $i++) {
-                $this->lfMakeSelect($this->arrProducts[$i]['product_id'], $arrClassName, $arrClassCatName);
-            }
+            $this->arrProducts = $objProduct->lists($objQuery, $arrval);
+            $objProduct->setProductsClassByProductIds($productIds);
+            // 規格1クラス名
+            $this->tpl_class_name1 = $objProduct->className1;
+
+            // 規格2クラス名
+            $this->tpl_class_name2 = $objProduct->className2;
+
+            // 規格1
+            $this->arrClassCat1 = $objProduct->classCats1;
+
+            // 規格1が設定されている
+            $this->tpl_classcat_find1 = $objProduct->classCat1_find;
+            // 規格2が設定されている
+            $this->tpl_classcat_find2 = $objProduct->classCat2_find;
+
+            $this->tpl_stock_find = $objProduct->stock_find;
+            $this->tpl_product_class_id = $objProduct->product_class_id;
+            $this->tpl_product_type = $objProduct->product_type;
+
+            // FIXME 規格のプルダウンを要修正
+            $this->tpl_javascript = "";
         }
 
Index: branches/version-2_5-dev/data/Smarty/templates/default/admin/order/edit.tpl
===================================================================
--- branches/version-2_5-dev/data/Smarty/templates/default/admin/order/edit.tpl	(revision 18853)
+++ branches/version-2_5-dev/data/Smarty/templates/default/admin/order/edit.tpl	(revision 18872)
@@ -57,9 +57,7 @@
 <input type="hidden" name="anchor_key" value="" />
 <input type="hidden" id="add_product_id" name="add_product_id" value="" />
-<input type="hidden" id="add_classcategory_id1" name="add_classcategory_id1" value="" />
-<input type="hidden" id="add_classcategory_id2" name="add_classcategory_id2" value="" />
+<input type="hidden" id="add_product_class_id" name="add_product_class_id" value="" />
 <input type="hidden" id="edit_product_id" name="edit_product_id" value="" />
-<input type="hidden" id="edit_classcategory_id1" name="edit_classcategory_id1" value="" />
-<input type="hidden" id="edit_classcategory_id2" name="edit_classcategory_id2" value="" />
+<input type="hidden" id="edit_product_class_id" name="edit_product_class_id" value="" />
 <input type="hidden" id="no" name="no" value="" />
 <input type="hidden" id="delete_no" name="delete_no" value="" />
@@ -341,7 +339,6 @@
                 <!--{/if}-->
             <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="classcategory_id1[<!--{$key}-->]" value="<!--{$arrForm.classcategory_id1.value[$key]}-->" id="classcategory_id1_<!--{$key}-->" />
-            <input type="hidden" name="classcategory_id2[<!--{$key}-->]" value="<!--{$arrForm.classcategory_id2.value[$key]}-->" id="classcategory_id2_<!--{$key}-->" />
             </td>
             <td align="center"><input type="text" name="price[<!--{$key}-->]" value="<!--{$arrForm.price.value[$key]|escape}-->" size="6" class="box6" maxlength="<!--{$arrForm.price.length}-->" id="price_<!--{$key}-->"/> 円</td>
