Ignore:
Timestamp:
2012/02/14 15:10:54 (15 years ago)
Author:
Seasoft
Message:

#1641 (商品規格における木構造の廃止)

Location:
branches/version-2_12-dev/data/class/pages/admin/products
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php

    r21481 r21502  
    10491049                    $arrProductsClass = $objQuery->select($col, $table, $where, array($arrList['copy_product_id'])); 
    10501050 
    1051                     // 複製元商品の規格組み合わせデータ登録 
    1052                     // 登録した組み合わせIDを取得 
    1053                     $arrRetCombinationId = $this->lfRegistClassCombination($arrProductsClass); 
    1054  
    10551051                    // 規格データ登録 
    10561052                    $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    10571053                    foreach ($arrProductsClass as $arrData) { 
    1058                         $sqlval = array(); 
     1054                        $sqlval = $arrData; 
    10591055                        $sqlval['product_class_id'] = $objQuery->nextVal('dtb_products_class_product_class_id'); 
    10601056                        $sqlval['product_id'] = $product_id; 
    10611057                        $sqlval['create_date'] = 'CURRENT_TIMESTAMP'; 
    1062                         $sqlval['class_combination_id'] = $arrRetCombinationId[$arrData['class_combination_id']]; 
    1063                         $sqlval['product_type_id'] = $arrData['product_type_id']; 
    1064                         $sqlval['product_code'] = $arrData['product_code']; 
    1065                         $sqlval['stock'] = $arrData['stock']; 
    1066                         $sqlval['stock_unlimited'] = $arrData['stock_unlimited']; 
    1067                         $sqlval['sale_limit'] = $arrData['sale_limit']; 
    1068                         $sqlval['price01'] = $arrData['price01']; 
    1069                         $sqlval['price02'] = $arrData['price02']; 
    1070                         $sqlval['deliv_fee'] = $arrData['deliv_fee']; 
    1071                         $sqlval['point_rate'] = $arrData['point_rate']; 
    1072                         $sqlval['creator_id'] = $arrData['creator_id']; 
    10731058                        $sqlval['update_date'] = 'CURRENT_TIMESTAMP'; 
    1074                         $sqlval['down_filename'] = $arrData['down_filename']; 
    1075                         $sqlval['down_realfilename'] = $arrData['down_realfilename']; 
    1076                         $sqlval['del_flg'] = $arrData['del_flg']; 
    10771059                        $objQuery->insert($table, $sqlval); 
    10781060                    } 
     
    12671249 
    12681250    /** 
    1269      * 商品規格データを元に、規格組み合わせデータを複製登録する 
    1270      *  
    1271      * @param array $arrProductsClass 商品規格データ配列 
    1272      * @return array 登録した規格組み合わせID配列 
    1273      */ 
    1274     function lfRegistClassCombination($arrProductsClass) { 
    1275         $arrRetCombinationId = array(); 
    1276  
    1277         // 規格組み合わせデータを取得 
    1278         $arrClassCombination = $this->lfGetClassCombination($arrProductsClass); 
    1279  
    1280         // 規格2を持っているかチェック 
    1281         $has_class2 = $this->lfHasClass2($arrClassCombination); 
    1282  
    1283         // 規格組み合わせデータを複製登録 
    1284         if ($has_class2 == true) { 
    1285             // 規格2を持っている場合、規格1の組み合わせデータも取得 
    1286             $arrClassCombinationParent = $this->lfGetClassCombination($arrClassCombination, true); 
    1287  
    1288             // 親組み合わせデータを複製登録 
    1289             $arrRetCombinationId = $this->lfInsertClassCombination($arrClassCombinationParent); 
    1290             // 子組み合わせデータを複製登録 
    1291             $arrRetCombinationId = $this->lfInsertClassCombination($arrClassCombination, $arrRetCombinationId); 
    1292         } else { 
    1293             // 規格1のみの場合、複製登録 
    1294             $arrRetCombinationId = $this->lfInsertClassCombination($arrClassCombination); 
    1295         } 
    1296  
    1297         return $arrRetCombinationId; 
    1298     } 
    1299  
    1300     /** 
    1301      * 規格2を持っている規格組み合わせデータであるか判定する 
    1302      *  
    1303      * @param array $arrClassCombination 規格組み合わせデータ配列 
    1304      * @return boolean true: 規格2を持っている, false: 規格1のみ 
    1305      */ 
    1306     function lfHasClass2($arrClassCombination) { 
    1307         $has_class2 = false; 
    1308  
    1309         foreach ($arrClassCombination as $arrVal) { 
    1310             if ($arrVal['level'] == '2') { 
    1311                 $has_class2 = true; 
    1312                 break; 
    1313             } 
    1314         } 
    1315  
    1316         return $has_class2; 
    1317     } 
    1318  
    1319     /** 
    1320      * 規格組み合わせデータを取得する 
    1321      *  
    1322      * @param array $arrData 組み合わせIDを含むデータ配列 
    1323      * @param boolean $is_parent 親規格IDから抽出するフラグ(省略時: false) 
    1324      * @return array 規格組み合わせデータ配列 
    1325      */ 
    1326     function lfGetClassCombination($arrData, $is_parent = false) { 
    1327         $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    1328         $key = 'class_combination_id'; 
    1329         if ($is_parent == true) { 
    1330             $key = 'parent_class_combination_id'; 
    1331         } 
    1332  
    1333         $where = 'class_combination_id IN ('; 
    1334         $arrParam = array(); 
    1335         foreach ($arrData as $arrVal) { 
    1336             if (SC_Utils_Ex::isBlank($arrVal[$key]) == true) { 
    1337                 continue; 
    1338             } 
    1339             $where .= '?,'; 
    1340             $arrParam[] = $arrVal[$key]; 
    1341         } 
    1342         $where = preg_replace('/,$/', ')', $where); 
    1343         $arrClassCombination = $objQuery->select('*', 'dtb_class_combination', $where, $arrParam); 
    1344  
    1345         return $arrClassCombination; 
    1346     } 
    1347  
    1348     /** 
    1349      * 規格組み合わせデータを複製登録する 
    1350      *  
    1351      * @param array $arrClassCombination 複製元の規格組み合わせデータ配列 
    1352      * @param array $arrParentCombinationId 登録する親組み合わせID配列 (省略可) 
    1353      * @return array 登録した規格組み合わせID配列 
    1354      */ 
    1355     function lfInsertClassCombination($arrClassCombination, $arrParentCombinationId = array()) { 
    1356         $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    1357         $arrRetCombinationId = array(); 
    1358  
    1359         // 親組み合わせIDの指定がある場合、指定された親組み合わせIDで複製登録 
    1360         if (count($arrParentCombinationId) > 0) { 
    1361             foreach ($arrClassCombination as $key => $arrVal) { 
    1362                 $arrClassCombination[$key]['parent_class_combination_id'] = $arrParentCombinationId[$arrVal['parent_class_combination_id']]; 
    1363             } 
    1364         } 
    1365  
    1366         foreach ($arrClassCombination as $arrVal) { 
    1367             $sqlval = array(); 
    1368             $sqlval['class_combination_id'] = $objQuery->nextVal('dtb_class_combination_class_combination_id'); 
    1369             $sqlval['parent_class_combination_id'] = $arrVal['parent_class_combination_id']; 
    1370             $sqlval['classcategory_id'] = $arrVal['classcategory_id']; 
    1371             $sqlval['level'] = $arrVal['level']; 
    1372             $objQuery->insert('dtb_class_combination', $sqlval); 
    1373  
    1374             $arrRetCombinationId[$arrVal['class_combination_id']] = $sqlval['class_combination_id']; 
    1375         } 
    1376  
    1377         return $arrRetCombinationId; 
    1378     } 
    1379  
    1380     /** 
    13811251     * リネームする際は、自動生成される画像名に一意となるように、Suffixを付ける 
    13821252     *  
  • branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php

    r21481 r21502  
    237237        $arrDefault = $this->getProductsClass($product_id); 
    238238 
    239         $objQuery->delete('dtb_products_class', 'product_id = ? AND class_combination_id IS NOT NULL', array($product_id)); 
     239        $objQuery->delete('dtb_products_class', 'product_id = ? AND (classcategory_id1 <> 0 OR classcategory_id2 <> 0)', array($product_id)); 
    240240 
    241241        for ($i = 0; $i < $total; $i++) { 
     
    244244            $price02 = SC_Utils_Ex::isBlank($arrList['price02'][$i]) ? 0 : $arrList['price02'][$i]; 
    245245            // dtb_products_class 登録/更新用 
    246             $registerKeys = array('product_code', 'stock', 
    247                                   'price01', 'product_type_id', 
    248                                   'down_filename', 'down_realfilename'); 
     246            $registerKeys = array( 
     247                'classcategory_id1', 'classcategory_id2', 
     248                'product_code', 'stock', 'price01', 'product_type_id', 
     249                'down_filename', 'down_realfilename', 
     250            ); 
    249251 
    250252            $arrPC = array(); 
     
    264266            $arrPC['del_flg'] = $del_flg; 
    265267 
    266             $class_combination_id = $arrExists[$arrList['product_class_id'][$i]]['class_combination_id']; 
    267             $existsCombi = $objQuery->getRow('*', 'dtb_class_combination', 
    268                                              'class_combination_id = ?', 
    269                                              array($class_combination_id)); 
    270  
    271             $objQuery->delete('dtb_class_combination', 
    272                               'class_combination_id IN (?, ?)', 
    273                               array($existsCombi['class_combination_id'], 
    274                                     $existsCombi['parent_class_combination_id'])); 
    275  
    276             // 規格組み合わせを登録 
    277             $arrComb1['class_combination_id'] = $objQuery->nextVal('dtb_class_combination_class_combination_id'); 
    278             $arrComb1['classcategory_id'] = $arrList['classcategory_id1'][$i]; 
    279             $arrComb1['level'] = 1; 
    280             $objQuery->insert('dtb_class_combination', $arrComb1); 
    281  
    282             // 規格2も登録する場合 
    283             if (!SC_Utils_Ex::isBlank($arrList['classcategory_id2'][$i])) { 
    284                 $arrComb2['class_combination_id'] = $objQuery->nextVal('dtb_class_combination_class_combination_id'); 
    285                 $arrComb2['classcategory_id'] = $arrList['classcategory_id2'][$i]; 
    286                 $arrComb2['parent_class_combination_id'] = $arrComb1['class_combination_id']; 
    287                 $arrComb2['level'] = 2; 
    288                 $objQuery->insert('dtb_class_combination', $arrComb2); 
    289  
    290                 $arrPC['class_combination_id'] = $arrComb2['class_combination_id']; 
    291             } else { 
    292                 $arrPC['class_combination_id'] = $arrComb1['class_combination_id']; 
    293             } 
    294  
    295268            $arrPC['create_date'] = 'CURRENT_TIMESTAMP'; 
    296269            // 更新の場合は, product_class_id を使い回す 
     
    313286        $arrBlank['update_date'] = 'CURRENT_TIMESTAMP'; 
    314287        $objQuery->update('dtb_products_class', $arrBlank, 
    315                           "product_id = ? AND class_combination_id IS NULL", 
     288                          "product_id = ? AND classcategory_id1 = 0 AND classcategory_id2 = 0", 
    316289                          array($product_id)); 
    317290 
     
    479452        $product_id = $objFormParam->getValue('product_id'); 
    480453        $objProduct = new SC_Product_Ex(); 
    481         $existsProductsClass = $objProduct->getProductsClassFullByProductId($product_id, true); 
     454        $existsProductsClass = $objProduct->getProductsClassFullByProductId($product_id); 
    482455 
    483456        // 規格のデフォルト値(すべての組み合わせ)を取得し, フォームに反映 
     
    557530 
    558531        $objQuery->begin(); 
    559         $arrClassCombi = $objQuery->getCol('class_combination_id', 
    560                                            'dtb_products_class', 
    561                                            'product_id = ?', array($product_id)); 
    562  
    563         foreach ($arrClassCombi as $class_combination_id) { 
    564             if (SC_Utils_Ex::isBlank($class_combination_id)) { 
    565                 continue; 
    566             } 
    567             $existsCombi = $objQuery->getRow('*', 'dtb_class_combination', 
    568                                              'class_combination_id = ?', 
    569                                              array($class_combination_id)); 
    570  
    571             $objQuery->delete('dtb_class_combination', 
    572                               'class_combination_id IN (?, ?)', 
    573                               array($existsCombi['class_combination_id'], 
    574                                     $existsCombi['parent_class_combination_id'])); 
    575         } 
    576         $objQuery->update('dtb_products_class', array('del_flg' => 0), 
    577                           "product_id = ? AND class_combination_id IS NULL", 
    578                           array($product_id)); 
    579         $objQuery->delete('dtb_products_class', 
    580                           "product_id = ? AND class_combination_id IS NOT NULL", 
    581                           array($product_id)); 
     532 
     533        // 商品規格なしデータの復元 
     534        $where = 'product_id = ? AND classcategory_id1 = 0 AND classcategory_id2 = 0'; 
     535        $objQuery->update("dtb_products_class", array('del_flg' => 0), $where, array($product_id)); 
     536 
     537        // 商品規格データの削除 
     538        $where = 'product_id = ? AND (classcategory_id1 <> 0 OR classcategory_id2 <> 0)'; 
     539        $objQuery->delete("dtb_products_class", $where, array($product_id)); 
     540 
    582541        $objQuery->commit(); 
    583542 
     
    780739        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    781740        $col = "product_code, price01, price02, stock, stock_unlimited, sale_limit, deliv_fee, point_rate"; 
    782         return $objQuery->getRow($col, 'dtb_products_class', "product_id = ? AND class_combination_id IS NULL", array($product_id)); 
     741        $where = 'product_id = ? AND classcategory_id1 = 0 AND classcategory_id2 = 0'; 
     742        return $objQuery->getRow($col, 'dtb_products_class', $where, array($product_id)); 
    783743    } 
    784744 
  • branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSV.php

    r21490 r21502  
    613613    function lfCheckErrorDetail($item, $arrErr) { 
    614614        // 規格IDの存在チェック 
     615        // FIXME 規格分類ID自体のが有効かを主眼においたチェックをすべきと感じる。 
    615616        if (!$this->lfIsDbRecord('dtb_products_class', 'product_class_id', $item)) { 
    616617            $arrErr['product_class_id'] = "※ 指定の商品規格IDは、登録されていません。"; 
     
    628629            } 
    629630        } 
    630         // 規格組合せIDの存在チェック 
    631 //        if (!$this->lfIsDbRecord('dtb_class_combination', 'class_combination_id', $item)) { 
    632 //      SC_Utils::sfIsRecord が del_flg が無いと使えない為、個別処理 
    633         if(array_search('class_combination_id', $this->arrFormKeyList) !== FALSE 
    634                 and $item['class_combination_id'] != "") { 
    635             $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    636             $ret = $objQuery->get('class_combination_id', 'dtb_class_combination', 'class_combination_id = ?', array($item['class_combination_id'])); 
    637             if ($ret == "") { 
    638                 $arrErr['class_combination_id'] = "※ 指定の規格組合せIDは、登録されていません。"; 
    639             } 
    640         } 
    641631        // 表示ステータスの存在チェック 
    642632        if (!$this->lfIsArrayRecord($this->arrDISP, 'status', $item)) { 
Note: See TracChangeset for help on using the changeset viewer.