Changeset 18646


Ignore:
Timestamp:
2010/05/08 23:47:32 (11 years ago)
Author:
Seasoft
Message:

merge r18527

  • 取得元: version-2_4

【取得元のログメッセージ】
merged r18478:18479

  • 受注管理での編集が在庫に反映されない(#507)
Location:
branches/comu-ver2
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/comu-ver2

  • branches/comu-ver2/data/Smarty/templates/default/admin/order/edit.tpl

    r18489 r18646  
    302302        <input type="button" name="add_product" value="商品の追加" onclick="win03('<!--{$smarty.const.URL_DIR}-->admin/order/product_select.php<!--{if $tpl_order_id}-->?order_id=<!--{$tpl_order_id}--><!--{/if}-->', 'search', '500', '500'); " /> 
    303303    </h2> 
    304     <div class="attention">商品の追加、及び数量の変更に伴う在庫数の変更は手動にてお願いします。</div> 
    305304    <!--{if $arrErr.product_id || $arrErr.quantity || $arrErr.price}--> 
    306305        <span class="attention"><!--{$arrErr.product_id}--></span> 
  • branches/comu-ver2/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php

    r18642 r18646  
    550550        SC_Helper_DB_Ex::sfUpdateOrderNameCol($order_id); 
    551551         
     552        $arrDetail = $this->objFormParam->getSwapArray(array("product_id", "product_code", "product_name", "price", "quantity", "point_rate", "classcategory_id1", "classcategory_id2", "classcategory_name1", "classcategory_name2")); 
     553 
     554 
     555        // 変更しようとしている商品情報とDBに登録してある商品情報を比較することで、更新すべき数量を計算 
     556        $max = count($arrDetail); 
     557        $k = 0; 
     558        $arrStockData = array(); 
     559        for($i = 0; $i < $max; $i++) { 
     560            if (!empty($arrDetail[$i]['product_id'])) { 
     561                $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'])); 
     562                if (!empty($arrPreDetail) && $arrPreDetail[0]['quantity'] != $arrDetail[$i]['quantity']) { 
     563                    // 数量が変更された商品 
     564                    $arrStockData[$k]['product_id'] = $arrDetail[$i]['product_id']; 
     565                    $arrStockData[$k]['classcategory_id1'] = $arrDetail[$i]['classcategory_id1']; 
     566                    $arrStockData[$k]['classcategory_id2'] = $arrDetail[$i]['classcategory_id2']; 
     567                    $arrStockData[$k]['quantity'] = $arrPreDetail[0]['quantity'] - $arrDetail[$i]['quantity']; 
     568                    ++$k; 
     569                } elseif (empty($arrPreDetail)) { 
     570                    // 新しく追加された商品 もしくは 違う商品に変更された商品 
     571                    $arrStockData[$k]['product_id'] = $arrDetail[$i]['product_id']; 
     572                    $arrStockData[$k]['classcategory_id1'] = $arrDetail[$i]['classcategory_id1']; 
     573                    $arrStockData[$k]['classcategory_id2'] = $arrDetail[$i]['classcategory_id2']; 
     574                    $arrStockData[$k]['quantity'] = -$arrDetail[$i]['quantity']; 
     575                    ++$k; 
     576                } 
     577                $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'])); 
     578            } 
     579        } 
     580 
     581        // 上記の新しい商品のループでDELETEされなかった商品は、注文より削除された商品 
     582        $arrPreDetail = $objQuery->select('*', "dtb_order_detail", "order_id = ?", array($order_id)); 
     583        foreach ($arrPreDetail AS $key=>$val) { 
     584            $arrStockData[$k]['product_id'] = $val['product_id']; 
     585            $arrStockData[$k]['classcategory_id1'] = $val['classcategory_id1']; 
     586            $arrStockData[$k]['classcategory_id2'] = $val['classcategory_id2']; 
     587            $arrStockData[$k]['quantity'] = $val['quantity']; 
     588            ++$k; 
     589        } 
     590 
     591        // 受注詳細データの初期化 
     592        $objQuery->delete("dtb_order_detail", $where, array($order_id)); 
     593 
    552594        // 受注詳細データの更新 
    553         $arrDetail = $this->objFormParam->getSwapArray(array("product_id", "product_code", "product_name", "price", "quantity", "point_rate", "classcategory_id1", "classcategory_id2", "classcategory_name1", "classcategory_name2")); 
    554         $objQuery->delete("dtb_order_detail", $where, array($order_id)); 
    555  
    556595        $max = count($arrDetail); 
    557596        for ($i = 0; $i < $max; $i++) { 
     
    571610        } 
    572611 
     612        // 在庫数調整 
     613        $status = $sqlval['status']; 
     614        if (ORDER_DELIV != $status && ORDER_CANCEL != $status) { 
     615            $stock_sql = "UPDATE dtb_products_class SET stock = stock + ? WHERE product_id = ? AND classcategory_id1 = ? AND classcategory_id2 = ?;"; 
     616            foreach ($arrStockData AS $key=>$val) { 
     617                $stock_sqlval = array(); 
     618                $stock_sqlval[] = $val['quantity']; 
     619                $stock_sqlval[] = $val['product_id']; 
     620                $stock_sqlval[] = $val['classcategory_id1']; 
     621                $stock_sqlval[] = $val['classcategory_id2']; 
     622 
     623                $objQuery->query($stock_sql, $stock_sqlval); 
     624            } 
     625        } 
     626 
    573627        $objQuery->commit(); 
    574628    } 
     
    630684            $sqlval['classcategory_name1'] = $arrDetail[$i]['classcategory_name1']; 
    631685            $sqlval['classcategory_name2'] = $arrDetail[$i]['classcategory_name2']; 
     686 
    632687            $objQuery->insert("dtb_order_detail", $sqlval); 
    633         } 
    634  
     688 
     689 
     690            // 在庫数減少処理 
     691            // 現在の実在庫数取得 
     692            $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'])); 
     693 
     694            $stock_sqlval = array(); 
     695            $stock_sqlval['stock'] = intval($pre_stock - $arrDetail[$i]['quantity']); 
     696            if ($stock_sqlval['stock'] === 0) { 
     697                $stock_sqlval['stock'] = '0'; 
     698        } 
     699 
     700            $st_params = array(); 
     701            $st_params[] = $arrDetail[$i]['product_id']; 
     702            $st_params[] = $arrDetail[$i]['classcategory_id1']; 
     703            $st_params[] = $arrDetail[$i]['classcategory_id2']; 
     704 
     705            $objQuery->update("dtb_products_class", $stock_sqlval, 'product_id = ? AND classcategory_id1 = ? AND classcategory_id2 = ?', $st_params); 
     706        } 
    635707        $objQuery->commit(); 
    636708 
Note: See TracChangeset for help on using the changeset viewer.