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


/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * 基本情報変更確認
 *
 * @package     Admin.Itemmanage.Order.Confirm
 * @author      T.Shimano <shimano@fuco.jp>
 * @access      public
 */
require_once 'Pager.php';

class Admin_Itemmanage_Order_Confirm
{   
    // 入力パラメータ
    var $ischecked;
    var $itemcd;
    var $structcd;
    var $orderunitprice; // 仕入れ単価  
    var $ordernum;       // 発注数  
    var $suppliercd;     // 仕入れ先コード 
    var $suppliediv;     // 仕入れ区分 
    var $ordercd;        // 発注番号
    
    // DBインターフェイス
    var $itemorder;
    var $supplier;
    
    // 取得データ
    var $data;
    var $count;
    
    // 検索パラメータ
    var $searchkey;
    
    // アクションチェイン
    var $actionChain;
    
    // ページャー
    var $pager;
    var $pageID;
    var $perpage;
    var $sort;

    // タイトル
    var $title;
    var $pagename;
    var $div;
    
    // 絞込み保持
    var $o_itemcd;
    var $o_structcd;
    
    function execute()
    {
        $errorList =& $this->actionChain->getCurErrorList();
        $error = 0;
        
        // チェックボックスにチェックが付いている分だけデータを取得
        $where = array();
        $index = array();
        
        $falpri1 = 0; // 仕入単価の入力チェック
        $falpri2 = 0; // 仕入単価の正しさチェック
        $falnum1 = 0; // 発注数の入力チェック
        $falnum2 = 0; // 発注数の正しさチェック

        
        
        if (!empty($this->ischecked)) {
            foreach ($this->ischecked as $key=>$val) {
                if ($val == 1) {
                    $where[] = array(" st.itemcd = ".$this->itemcd[$key]." AND "." st.structcd = ".$this->structcd[$key]." ");
                    $index[] = $key;
                    
                    // 仕入単価チェック
                    if ($this->orderunitprice[$key] == "") {
                        $falpri1 = 1;
                    } elseif (is_numeric($this->orderunitprice[$key]) && $this->orderunitprice[$key] == 0) {
                        $falpri1 = 1;
                        
                    } elseif (!is_numeric($this->orderunitprice[$key]) ||
  'A'.floor($this->orderunitprice[$key]) != 'A'.$this->orderunitprice[$key] ||
                                              $this->orderunitprice[$key] <= 0 ) {
                        $falpri2 = 1;
                    }
                    
                    // 発注数チェック
                    if ($this->ordernum[$key] == "" ) {
                        $falnum1 = 1;
                    } elseif (is_numeric($this->ordernum[$key]) && $this->ordernum[$key] == 0){
                        $falnum1 = 1;
                    } elseif ( !is_numeric($this->ordernum[$key]) ||
       'A'.floor($this->ordernum[$key]) != 'A'.$this->ordernum[$key] ||
                                            $this->ordernum[$key] <= 0 ) {
                        $falnum2 = 1;
                    }
                }
            }
        }
        
        // エラー処理
        if (empty($this->suppliercd) || $this->suppliercd == 0) { // 仕入先が選択されていない
            $errorList -> add(1, "仕入先を選択してください");
            $error = 1;
        }
        
        if (empty($this->suppliediv) || $this->suppliediv == 0) { // 仕入れ区分が選択されていない
            $errorList -> add(1, "仕入区分を選択してください");
            $error = 1;
        }
        
        if (empty($this->ordercd) || $this->ordercd == "") { // 発注番号が指定されていない
            $errorList -> add(1, "注文番号を入力してください");
            $error = 1;
        }

        if (count($where)==0) {   // チェックボックスが１つもチェックされていない 
            $errorList -> add(1, "発注する商品にチェックをいれてください");
            $error = 1;
        }
             
        if( $falpri1 == 1 ) { // 仕入単価が正しく入力されていない
            $errorList -> add(1, "仕入単価を入力してください");
            $error = 1;
        }
         
        if( $falpri2 == 1 ) { // 仕入単価が正しく入力されていない
            $errorList -> add(1, "仕入単価を正しく入力してください");
            $error = 1;
        }

        if( $falnum1 == 1 ) { // 発注数が正しく入力されていない
            $errorList -> add(1, "発注数を入力してください");
            $error = 1;
        }

        if( $falnum2 == 1 ) { // 発注数が正しく入力されていない
            $errorList -> add(1, "発注数を正しく入力してください");
            $error = 1;
        }
        
        // エラーを起こしてた場合は絞込み保持に差し替える
        if ( $error == 1) {
            $where = array();
            if (is_array($this->o_itemcd)) {
                foreach ($this->o_itemcd as $index => $val) {
                    $where[] = array(" st.itemcd = {$this->o_itemcd[$index]} "," st.structcd = {$this->o_structcd[$index]} ");
                }
            }
        }
        // 失敗した場合
        if($error == 1) {
            $searchkey = $this->searchkey;
            // 検索条件で絞込み
            if(empty($where) || count($where) == 0) {
                
                // 発注締切日
                if (!empty($searchkey->orderclosedatefrom)) {
                    $where[0][] = "orderclosedate >= '$searchkey->orderclosedatefrom' ";
                }
                if (!empty($searchkey->orderclosedateto)) {
                    $where[0][] = "orderclosedate <= '$searchkey->orderclosedateto' ";
                }
    
                // 発売日
                if (!empty($searchkey->salestartdatefrom)) {
                    $where[0][] = "salestartdate >= '$searchkey->salestartdatefrom' ";
                }
                if (!empty($searchkey->salestartdateto)) {
                    $where[0][] = "salestartdate <= '$searchkey->salestartdateto' ";
                }
                 
                // メーカー
                if ( $searchkey->maker_all != 1 ) {
                    if (!empty($searchkey->maker_name)) {
                        $where[0][] = "mk.makercd = $searchkey->maker_name ";
                    }
                    if (!empty($searchkey->maker_label)) {
                        $where[0][] = "lb.labelcd = '$searchkey->maker_label' ";
                    }
                }
    
                // メーカー品番
                if (!empty($searchkey->makeritemcdfrom)) {
                    $where[0][] = "makeritemcd >= '$searchkey->makeritemcdfrom' ";
                }
                if (!empty($searchkey->makeritemcdto)) {
                    $where[0][] = "makeritemcd <= '$searchkey->makeritemcdto' ";
                }
                 
                // 作品区分
                if (!empty($searchkey->itemdiv)) {
                    $where[0][] = "itemdivcd = '$searchkey->itemdiv' ";
                }
                 
                // メディアコード
                if (!empty($searchkey->mediacd)) {
                    $where[0][] = "mediacd = '$searchkey->mediacd' ";
                }
                 
                // ステータス
                if (!empty($searchkey->status) && $searchkey->status > 0) {
                    // 未実装
    
                }
                 
                // 予約数
                if (!empty($searchkey->advancenummin)) {
                    $where[0][] = "advancenum >= '$searchkey->advancenummin' ";
                }
                if (!empty($searchkey->advancenummax)) {
                    $where[0][] = "advancenum <= '$searchkey->advancenummax' ";
                }
            }
            $this->data = $this->itemorder->getItemorderList($this->perpage, $this->perpage*($this->pageID-1), $where, array(), $this->sort, $searchkey->status);
            $this->count = array_pop($this->data);
           
            
            // 発注などを再入力しなくてもすむように細工
            foreach ($this->data as $key=>$val) {
                $this->data[$key]["orderunitprice"] = isset($this->orderunitprice[$key])?$this->orderunitprice[$key]:0;
                $this->data[$key]["ordernum"] = isset($this->ordernum[$key])?$this->ordernum[$key]:0;
            }
            
        } else {
            $this->data = $this->itemorder->getItemorderList(count($where), 0, $where);
            $this->count = array_pop($this->data);
        }
        
        
        // データに仕入れ単価、発注数を追加
        $data = $this->data;
        $ischecked = $this->ischecked;
        $orderunitprice = $this->orderunitprice;
        $ordernum = $this->ordernum;
        
        if($error != 1) {
            foreach( $data as $key=>$val ) {
                $target = $index[$key];
                $data[$key]["orderunitprice"] = $orderunitprice[$target];
                $data[$key]["ordernum"] = $ordernum[$target];
                $data[$key]["orderprice"] = $data[$key]["orderunitprice"] * $data[$key]["ordernum"];
            }
        } else {
            foreach( $data as $key=>$val ) {
                $data[$key]["ischecked"] = empty($ischecked[$key])?0:$ischecked[$key];
                $data[$key]["orderunitprice"] = $orderunitprice[$key];
                $data[$key]["ordernum"] = $ordernum[$key];
            }
        }
        $this->data = $data;
        
        $log =& LogFactory::getLog();
        $log->debug("Admin_Itemmanage_Order_Confirmが実行されました", "Admin_Itemmanage_OrderConfirm_#execute");

        if ($error==1) {
            return 'input';
        }
        return 'success';
    }
    
    function getRequestGET()
    {
        $str = "";
        foreach ($this->searchkey as $key=>$val) {
            if (!empty($val)) {
                if($str != "") {
                    $str.= "&$key=$val";
                } else {
                    $str = "$key=$val";
                }
            }
        }
        if( !empty($this->o_itemcd)) {
            foreach ($this->o_itemcd as $key=>$val) {
                if($str != "") {
                    $str.= "&o_itemcd[]=".$this->o_itemcd[$key]."&o_structcd[]=".$this->o_structcd[$key];
                } else {
                    $str = "o_itemcd[]=".$this->o_itemcd[$key]."&o_structcd[]=".$this->o_structcd[$key];
                }
            }
        }
        return $str;
    }

    function getRequestPOST()
    {
        $str = "";
        foreach ($this->searchkey as $key=>$val) {
            if (!empty($val)) {
                $str .= "<input type=\"hidden\" name=\"$key\" value=\"$val\">\r";
            }
        }
        if( !empty($this->o_itemcd) ) {
            foreach ($this->o_itemcd as $key=>$val) {
                $str .= "<input type=\"hidden\" name=\"o_itemcd[]\" value=\"".$this->o_itemcd[$key]."\">\r";
                $str .= "<input type=\"hidden\" name=\"o_structcd[]\" value=\"".$this->o_structcd[$key]."\">\r";
            }
        }
        return $str;
    }

    function getSupplierName()
    {
        $sup =  $this->supplier-> selectKey($this->suppliercd);
        return $sup["suppliernm"];
    }
    function getSupplieDivName()
    {
        return $this->supplier->getSuppliDivName($this->suppliediv);
    }

    //　ページャー 
    function getPager()
    {
        $search = array();
        foreach($this->searchkey as $key=>$val) {
            $search [$key] = $val;
        }
        $search["action"] = "admin_itemmanage_order_list";
        $params =  $this->pager->getPageParam( $this->count, $this->perpage, $this->pageID);
        $params["extraVars"] = $search;
        $params["importQuery"] =false;
        $pager = & Pager::factory($params);
        $pagedata = $pager->getPageData();
        $links = $pager->getLinks();
        if(!empty($links["all"]))
            return mbereg_replace("confirm", "list",$links["all"]);
        else
            return "";
    }

    function getSupplier()
    {
        return $this->supplier->selectAll();
    }
}
?>
