<?php
class Receiving_PutawayDetailController extends Ec_Controller_Action
{
    public function preDispatch()
    {
        $this->tplDirectory = "receiving/views/putaway/";
        $this->serviceClass = new Service_PutawayDetail();
        $userAuth = new Zend_Session_Namespace('userAuthorization');
        $this->warehouse_id = $userAuth->warehouseId;
        $this->user_id = $userAuth->userId;
    }
	/*上架管理*/
    public function listAction()
    {
        $status = Service_PutawayProcess::getItemStatus();
        $type = Service_PutawayProcess::getItemType();
        $wh = Common_DataCache::getWarehouseSimple();
        if ($this->_request->isPost()) {
            $page = $this->_request->getParam('page', 1);
            $pageSize = $this->_request->getParam('pageSize', 20);

            $page = $page ? $page : 1;
            $pageSize = $pageSize ? $pageSize : 20;

            $return = array(
                "state" => 0,
                "message" => "No Data"
            );

            $params = $this->_request->getParams();
            $operationType = isset($params['operationType']) ? $params['operationType'] : '';
            $operationCode = isset($params['operationCode']) ? $params['operationCode'] : '';
            if (!empty($operationCode)) {
                $params[$operationType] = $operationCode;
            }
            $condition = $this->serviceClass->getMatchFields($params);
            if( $this->_userAuth->user['customer_code'] != ''){
                 if($condition['customer_code'] != ''){
                     $return['total'] = 0;
                     die(Zend_Json::encode($return));
                 }
                $condition['customer_code'] =  $this->_userAuth->user['customer_code'];	
            }
            $condition['dateFor'] = isset($params['dateFor'])?$params['dateFor']:'';
            $condition['dateTo'] = isset($params['dateTo'])?$params['dateTo']:'';

            unset($params);
            $count = $this->serviceClass->getLeftJoinUserByCondition($condition, 'count(*)');
            $return['total'] = $count;

            if ($count) {
                $showFields = array(

                    'qc_code',
                    'putaway_code',
                    'receiving_code',
                    'lc_code',
                    'pd_type',
                    'product_barcode',
                    'pd_quantity',
                    'warehouse_id',
                    'pd_status',
                    'putaway_user_id',
                    'pd_add_time',
                    'pd_putaway_time',
                    'pd_id',
                    'user.user_name',
                    'product_id',
                );

                $showFields = $this->serviceClass->getFieldsAlias($showFields);
                $rows = $this->serviceClass->getLeftJoinUserByCondition($condition, $showFields, $pageSize, $page, array('pd_id desc'));

                $return['data'] = $rows;
                $return['status'] = $status;
                $return['type'] = $type;
                $return['warehouse'] = $wh;
                $return['state'] = 1;
                $return['message'] = "";
            }
            die(Zend_Json::encode($return));
        }
      //  $this->view->status = $status;
       // $this->view->type = $type;
        echo Ec::renderTpl($this->tplDirectory . "putaway_detail_index.tpl", 'layout');
    }
	/*上架*/
    public function putawayAction()
    {
        $searchType = Service_PutawayProcess::getSearchType();
        $this->view->searchType = $searchType;
        $this->view->warehouseArea = Common_DataCache::getWarehouseArea();
        $this->view->locationType = Common_DataCache::getLocationType();
        echo Ec::renderTpl($this->tplDirectory . "putaway_index.tpl", 'layout');
    }

    public function locationAction()
    {
        $wh = Common_DataCache::getWarehouseSimple();
        $return = array(
            "state" => 0,
            "message" => "No Data"
        );
        /*if ($this->_request->isPost()) {
            $page = $this->_request->getParam('page', 1);
            $pageSize = $this->_request->getParam('pageSize', 20);
            $productId = $this->_request->getParam('productId', '');
            $warehouseId = $this->_request->getParam('E4',"");

            $page = $page ? $page : 1;
            $pageSize = $pageSize ? $pageSize : 20;

            $productRow = Service_Product::getByField($productId,"product_id","*");

            $params = $this->_request->getParams();
            $locationObj= new Service_Location();
            $condition = $locationObj->getMatchFields($params);
            $condition['batch_lc_code']=1;
            $condition['wa_type'] = "1";
            $condition['lc_status'] = "1";
            $condition['pc_id'] = $productRow['pc_id'];
            $condition['warehouse_id'] = $warehouseId==""?$this->warehouse_id:$warehouseId;
            $condition['wa_status'] = "1";
            $count =$locationObj->getLeftJoinInventoryBatchByCondition($condition, 'count(*)');
            $return['total'] = $count;

            if ($count) {
                $showFields = array(

                    'lc_code',
                    'lc_note',
                    'lc_status',
                    'warehouse_id',
                    'lt_code',
                    'wa_code',
                    'lc_sort',
                    'lc_update_time',
                    'lc_id',
                    'warehouse_area.wa_name',
                );
                $showFields = $locationObj->getFieldsAlias($showFields);
                $rows =$locationObj->getLeftJoinInventoryBatchByCondition($condition, $showFields, $pageSize, $page, array('product_id desc','location.lc_code asc'));
                foreach($rows as $key=>$value){
                    $warehouse = Service_Warehouse::getByField($value['E4'],'warehouse_id',"*");
                    $rows[$key]['warehouse_code'] = $warehouse['warehouse_code'];
                }
                $return['data'] = $rows;
                $return['state'] = 1;
                $return['warehouse'] = $wh;
                $return['message'] = "";
            }
        }*/

        if ($this->_request->isPost()) {
            $page = $this->_request->getParam('page', 1);
            $pageSize = $this->_request->getParam('pageSize', 20);
            $productId = $this->_request->getParam('productId', '');
            $warehouseId = $this->_request->getParam('E4',"");

            $page = $page ? $page : 1;
            $pageSize = $pageSize ? $pageSize : 20;

            $productRow = Service_Product::getByField($productId,"product_id","*");

            $params = $this->_request->getParams();
            $locationObj= new Service_Location();
            $condition = $locationObj->getMatchFields($params);
            //$condition['batch_lc_code']=1;
            $condition['lc_status'] = "1";
            $productRow = Service_Product::getByField($productId,'product_id',"*");
            $warehouseArea = Service_WarehouseArea::getByCondition(array('l_pc_id'=>$productRow['pc_id'],'wa_type'=>'1'),"*");
            $condition['waCodeArr'] = array();
            if(!empty($warehouseArea)){
                foreach($warehouseArea as $key=>$value){
                    $condition['waCodeArr'][] = $value['wa_code'];
                }
            }
            $condition['notwaCodeArr'] = array();
            $inventoryBatch = Service_InventoryBatch::getByCondition(array('product_id'=>$productId),"*");
            $condition['lcCodeArr'] = array();
            if(!empty($inventoryBatch)){
                foreach($inventoryBatch as $k=>$v){
                    $condition['lcCodeArr'][] = $v['lc_code'];
                }
            }
            $count =$locationObj->getByCondition($condition, 'count(*)');
            $return['total'] = $count;
            if ($count) {
                $rows =$locationObj->getByCondition($condition,"*", $pageSize, $page);
                $return['data'] = $rows;
                $return['state'] = 1;
                $return['warehouse'] = $wh;
                $return['message'] = "";
            }
        }
        die(Zend_Json::encode($return));

    }

    public function submitPutawayAction()
    {
        $return = array(
            'state' => 0,
            'message' => '',
            'error' => array(array('errorCode' => '50000', 'errorMsg' => 'Fail.'))
        );

        if ($this->_request->isPost()) {
            $params = $this->_request->getParams();
            if (!empty($params['lcCode']) && isset($params['lcCode'])) {
                foreach ($params['lcCode'] as $key => $val) {
                    $putaway[] = array(
                        'pd_id' => $key,
                        'lc_code' => $val,
                        'product_barcode' => isset($params['product_barcode'][$key])?$params['product_barcode'][$key]:'',
                    );
                }
               // print_r($putaway);exit;
                unset($params);

                $sum=0;
                $putawayObj = new Service_PutawayProcess();
                $return = $putawayObj->submit($putaway);
                if ($return['state']==1) {
                    foreach ($putaway as $key => $value) {
                        
                    $putd=Service_PutawayDetail::getByField($value['pd_id'],'pd_id');
                    $pd=Service_PutawayDetail::getByCondition(array('qc_code'=>$putd['qc_code'],'pd_type'=>2),'*');
                    $qc_code=$putd['qc_code'];
                   //print_r($pd);exit;
                    Service_Box::update(array('box_status'=>0,'product_barcode'=>'','product_id'=>'','box_quantity'=>'','receiving_code'=>''),$putd['box_code'],'box_code');
                       Service_PutawayDetail::update(array('box_code'=>''),$putd['pd_id'],'pd_id');
                    foreach ($pd as $k => $v) {
                            if ($v['pd_status']=='0') {$sum=1;}
                        }
                        
                    } 
                   // print_r($sum);exit;
                    if ($sum==0) {
                        Service_QualityControl::update(array('qc_status'=>2),$qc_code,'qc_code');
                    }
    
                }
              
            }
        }
        die(Zend_Json::encode($return));
    }

    public function getPutawayByJsonAction()
    {
        $return = array(
            "state" => 0,
            "data" => array(),
            "message" => "No Data"
        );
        if ($this->_request->isPost()) {
            $operationCode = $this->_request->getParam('operationCode', '');
            $operationType = $this->_request->getParam('operationType', '');
            $stats = true;
            $condition = array();
            //$warehouseId = Service_User::getUserWarehouseId();
			$userAuth = new Zend_Session_Namespace('userAuthorization');			
            $condition['warehouse_id'] = $userAuth->warehouseId;			
			
            $condition['pd_status'] = '0';
            switch ($operationType) {
                case '0':
                    $condition['qc_code'] = $operationCode;
                    break;
                case '1':
                    $condition['receiving_code'] = $operationCode;
                    break;
                case '2':
                    $condition['putaway_code'] = $operationCode;
                    break;
                case '3':
                    $condition['box_code'] = $operationCode;
                    break;
                default:
                    $stats = false;
                    break;
            }
             //print_r($condition);exit;
            if ($condition['qc_code']) {
                $qc_code=$this->serviceClass->getByCondition($condition, '*');
             // print_r($qc_code);exit;
                if(!empty($qc_code)){
                    foreach($qc_code as $key=>$val){
                        if ($val['pd_type']=='2') {
                            $return = array(
                                "state" => 0,
                                "message" => "该质检单为分箱上架，请选择分箱单号"
                            );
                             die(Zend_Json::encode($return));
                             exit;
                        }
                    }
                }
                
            }
            if ($stats) {
                $showFields = array(
                    'pd_id',
                    'receiving_code',
                    'qc_code',
                    'box_code',
                    'putaway_code',
                    'product_id',
                    'product_barcode',
                    'pd_quantity',
                    'pd_status',
                    'product_id',
                    'warehouse_id',
                    // 'pd_add_time',
                );
                $showFields = $this->serviceClass->getFieldsAlias($showFields);
                $data = $this->serviceClass->getByCondition($condition, $showFields);
                //echo '<pre>', print_r($data, TRUE), '</pre>';//exit();
                
                if (!empty($data)) {
                    if (1 == $operationType) { // 收货单搜索拦截
                        $receiving = Service_Receiving::getByField($operationCode, 'receiving_code');

                        if ($receiving && 4 === (int) $receiving['receiving_type']) {
                            exit(Zend_Json::encode(array(
                                'state' => 0,
                                'data' => array(),
                                'total' => 0,
                                'msg' => '收货单[' . $operationCode . ']为理货类型，不能在此上架',
                            )));
                        }
                    }

                    $category = Common_DataCache::getProductCategory();
                    $productObj = new Service_Product();
                    foreach ($data as $key => $val) {
                        $productRow = $productObj->getByField($val['E8'], 'product_id', array('product_title', 'pc_id'));
                        $data[$key]['product'] = $productRow;
                        $data[$key]['category'] = isset($category[$productRow['pc_id']]) ? $category[$productRow['pc_id']]['pc_name_en'] : '';
                    }
                    $return = array(
                        "state" => 1,
                        "data" => $data,
                        "message" => "Success"
                    );
                }
            }
        }
        die(Zend_Json::encode($return));
    }
}

