<?php
/**
 * @copyright ONE/DEPO Project
 * @license   PHP License 3.01 <http://www.php.net/license/3_01.txt>
 */

/**
 * 出荷明細テーブル関連
 *
 * @package     Onedepo.Db.Forward
 * @author      netnee <mail@example.com>
 * @access      public
 */
class Onedepo_Db_Forward
{
    /**
     * DBアクセスオブジェクト
     *
     * @var     object
     * @access  private
     */
    var $dbaccess = null;


    /**
     * ステータス更新
     *
     * @param int     $no        オーダ番号
     * @param int     $rowno     オーダ行番号
     * @param string  $date      出荷日（進捗状況が４の時は必須）
     * @param int     $status    進捗状況
     * @param string  $reason    返品理由（進捗状況が８の時は必須）
     * @param string  $upduser   更新ユーザ
     * @param int     $updcnt    更新カウンタ
     * @return boolean 結果ステータス
     */
    function statusUpdate($no, $rowno, $date, $status, $reason, $upduser, $updcnt) {
        $log =& LogFactory::getLog();
        $func_name = "Onedepo_Db_Forward#statusUpdate";
        
        $db = $this->dbaccess->doConnect();
        $db->autoCommit(FALSE);
        $db->query("BEGIN;");
        
        if (empty($date)){
            $date = NULL;
        }
        if (empty($reason)){
            $reason = NULL;
        }
        if ($updcnt !== 0){
            if (empty($updcnt)){
                $updcnt = NULL;
            }
        }
        
        $params = array($no, $rowno, $date, $status, $reason, $upduser, $_SERVER['REMOTE_ADDR'], $updcnt);
        
        $sql  = "SELECT * FROM f_forward_detail_state_update(?, ?, ?, ?, ?, ?, ?, ?);";
        
        $res = $db->getRow($sql, $params);
        if (DB::isError($res) || $res[0] < 0) {
            $db->rollback();
            $db->query("ROLLBACK;");
            $log->error("rollback : ". $res->userinfo, $func_name);
            
            $this->dbaccess->doClose($db);
            return false;
        }
        
        $db->commit();
        $db->query("COMMIT;");
        $log->debug("commit : ", $func_name);
        
        $this->dbaccess->doClose($db);
        return true;
    }

    /**
     * 出荷指示更新
     *
     */
    function instructionUpdate($data, $status, $upduser) {
        $log =& LogFactory::getLog();
        $func_name = "Onedepo_Db_Forward#instructionUpdate";
        
        $db = $this->dbaccess->doConnect();
        $db->autoCommit(FALSE);
        $db->query("BEGIN;");
        
        foreach ($data as $val){
            if ($val["updcnt"] !== 0){
                if (empty($val["updcnt"])){
                    $val["updcnt"] = NULL;
                }
            }
            
            $params = array($val["no"], $val["row"], $status, $upduser, $_SERVER['REMOTE_ADDR'], $val["updcnt"]);
            $sql  = "SELECT * FROM f_forward_detail_state_update(?, ?, NULL, ?, NULL, ?, ?, ?);";
            
            $res = $db->getRow($sql, $params);
            
            if (DB::isError($res) || $res[0] < 0) {
                $db->rollback();
                $db->query("ROLLBACK;");
                $log->error("rollback : ". $res->userinfo, $func_name);
                
                $this->dbaccess->doClose($db);
                return false;
            }
        }
        
        $db->commit();
        $db->query("COMMIT;");
        $log->debug("commit : ", $func_name);
        
        $this->dbaccess->doClose($db);
        return true;
    }

    /**
     * ステータス更新 
     *  （行ナンバーNILL可）
     *  （updcnt Noチェック)
     *
     * @param int     $no        オーダ番号（必須）
     * @param string  $date      出荷日
     * @param int     $status    進捗状況（必須）
     * @param string  $reason    返品理由
     * @param string  $upduser   更新ユーザ
     * @return boolean 結果ステータス
     */
    function Update($no, $date, $status, $upduser) {
        $log =& LogFactory::getLog();
        $func_name = "Onedepo_Db_Forward#statusUpdate";
        
        $db = $this->dbaccess->doConnect();
        $db->autoCommit(FALSE);
        $db->query("BEGIN;");
        
        if (empty($date)){
            $date = NULL;
        }
        
        $params = array($no, $date, $status, $upduser, $_SERVER['REMOTE_ADDR']);
        
        $sql  = "SELECT * FROM f_forward_detail_update(2, ?, NULL, ?, ?, NULL, ?, ?);";
        
        $res = $db->getRow($sql, $params);
        if (DB::isError($res) || $res[0] < 0) {
            $db->rollback();
            $db->query("ROLLBACK;");
            $log->error("rollback : ". $res->userinfo, $func_name);
            
            $this->dbaccess->doClose($db);
            return false;
        }
        
        $db->commit();
        $db->query("COMMIT;");
        $log->debug("commit : ", $func_name);
        
        $this->dbaccess->doClose($db);
        return true;
    }
    
    
    /**
     * ステータス更新 
     *  （行ナンバーNILL可）
     *  （updcnt Noチェック)
     *
     * @param int     $no        オーダ番号（必須）
     * @param string  $rowcont   詳細行件数
     * @param string  $date      出荷日
     * @param int     $status    進捗状況（必須）
     * @param string  $reason    返品理由
     * @param string  $upduser   更新ユーザ
     * @return boolean 結果ステータス
     */
    function UpdateRowcont($no, $rowcont, $date, $status, $upduser) {
        $log =& LogFactory::getLog();
        $func_name = "Onedepo_Db_Forward#statusUpdate";
        
        $db = $this->dbaccess->doConnect();
        $db->autoCommit(FALSE);
        $db->query("BEGIN;");
        
        if (empty($date)){
            $date = NULL;
        }
        
        $params = array($no, $rowcont, $date, $status, $upduser, $_SERVER['REMOTE_ADDR']);
        
        $sql  = "SELECT * FROM f_forward_detail_update(1, ?, ?, ?, ?, NULL, ?, ?);";
        
        $res = $db->getRow($sql, $params);
        if (DB::isError($res) || $res[0] < 0) {
            $db->rollback();
            $db->query("ROLLBACK;");
            $log->error("rollback : ". $res->userinfo, $func_name);
            
            $this->dbaccess->doClose($db);
            return false;
        }
        
        $db->commit();
        $db->query("COMMIT;");
        $log->debug("commit : ", $func_name);
        
        $this->dbaccess->doClose($db);
        return true;
    }
    
    //問合わせ番号を更新する。
    function updateEnquiryno($orderno, $enquiryno, $upduser) {
        $log =& LogFactory::getLog();
        $func_name = "Onedepo_Db_Forward#updateEnquiryno";

        $db = $this->dbaccess->doConnect();
        $db->setFetchMode(DB_FETCHMODE_ASSOC);
        
        $db->autoCommit();
        $params = array($orderno, 
                        $enquiryno,
                        $upduser,
                        $_SERVER['REMOTE_ADDR']);

        $sql = "SELECT * FROM f_order_title_update_enquiryno(?,?,?,?);";

        $log->debug($sql, $func_name);
        $log->debug(print_r($params, true), $func_name);
        $res = $db->getRow($sql, $params);
        if (DB::isError($res) || $res["errcd"] < 0) {
            $log->debug($res->userinfo, $func_name);
            $log->debug("rollback", $func_name);
            $db->rollback();
            
            return false;
        }
        $log->debug("commit", $func_name);

        $db->commit();
        $this->dbaccess->doClose($db);
        return true;
    }
}
?>
