<?php
class Warehouse_BoxController extends Ec_Controller_Action
{
    public function preDispatch()
    {
        $this->tplDirectory = "warehouse/views/box/";
        $this->serviceClass = new Service_Box();
		$userAuth = new Zend_Session_Namespace('userAuthorization');
		$this->warehouse_id = $userAuth->warehouseId;
    }

    public function listAction()
    {
        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();

            $condition = $this->serviceClass->getMatchFields($params);
			
			$condition['warehouse_id'] = $this->warehouse_id;
			$condition['customer_code'] = $this->_request->getParam('customer_code', '');
            $count = $this->serviceClass->getByCondition($condition, 'count(*)');
            $return['total'] = $count;
            if ($count) {
                $showFields=array(
                    
                'box_code',
                'qc_code',
                'lc_code',
                'warehouse_id',
                'receiving_code',
                'product_barcode',
                'box_quantity',
                'box_status',
                'box_type',
                'box_update_time',
                'box_id',
                'customer_code'
                );
                $showFields = $this->serviceClass->getFieldsAlias($showFields);
                $rows = $this->serviceClass->getByCondition($condition,$showFields, $pageSize, $page, array('box_id desc'));
                $return['data'] = $rows;
                $return['state'] = 1;
                $return['message'] = "";
            }
            $return['kvStatus'] = array(0=>'空', 1=>'占用', 2=>'锁');
            $return['kvType'] = array(0=>'大', 1=>'中', 2=>'小');
            $return['kvWarehouse'] = Common_DataCache::getWarehouseSimple();
            die(Zend_Json::encode($return));
        }
        $this->view->kvStatus = array(0=>'空', 1=>'占用', 2=>'锁');
        $this->view->kvType = array(0=>'大', 1=>'中', 2=>'小');
        echo Ec::renderTpl($this->tplDirectory . "box_index.tpl", 'layout');
    }

    public function editAction()
    {
        $return = array(
            'state' => 0,
            'message' => '',
            'errorMessage'=>array('Fail.')
        );

        if ($this->_request->isPost()) {
            $params = $this->_request->getParams();
            $row = array(
                
              'box_id'=>'',
              'box_code'=>'',
              'box_status'=>'',
              'box_type'=>'',              
            );
            $row=$this->serviceClass->getMatchEditFields($params,$row);
            $paramId = $row['box_id'];
            if (!empty($row['box_id'])) {
                unset($row['box_id']);
            }
            $errorArr = $this->serviceClass->validator($row);

            if (!empty($errorArr)) {
                $return = array(
                    'state' => 0,
                    'message'=>'',
                    'errorMessage' => $errorArr
                );
                die(Zend_Json::encode($return));
            }

            if (!empty($paramId)) {
            	$row['box_update_time'] = date('Y-m-d H:i:s');
                $result = $this->serviceClass->update($row, $paramId);
            } else {
            	$row['warehouse_id'] = Service_User::getUserWarehouseId();
                $result = $this->serviceClass->add($row);
            }
            if ($result) {
                $return['state'] = 1;
                $return['message'] = array('Success.');
            }

        }
        die(Zend_Json::encode($return));
    }

    public function getByJsonAction()
    {
        $result = array('state' => 0, 'message' => 'Fail', 'data' => array());
        $paramId = $this->_request->getParam('paramId', '');
        if (!empty($paramId) && $rows = $this->serviceClass->getByField($paramId, 'box_id')) {
            $rows=$this->serviceClass->getVirtualFields($rows);
            $result = array('state' => 1, 'message' => '', 'data' => $rows);
        }
        die(Zend_Json::encode($result));
    }

    public function deleteAction()
    {
        $result = array(
            "state" => 0,
            "message" => "Fail."
        );
        if ($this->_request->isPost()) {
            $paramId = $this->_request->getPost('paramId');
            if (!empty($paramId)) {
                if ($this->serviceClass->delete($paramId)) {
                    $result['state'] = 1;
                    $result['message'] = 'Success.';
                }
            }
        }
        die(Zend_Json::encode($result));
    }

    public function checkAction(){
        $box_code = trim($this->_request->getParam("box_code",""));
        $receiving_code = $this->_request->getParam("receiving_code","");
        $box = Service_Box::getByField($box_code,'box_code',"*");
        $return = array('ask'=>'1',"message"=>'');
        if(empty($box)){
            $return['ask'] = "0";
            $return['message'] = "箱子不存在";
            die(Zend_Json::encode($return));
        }
        if($box['box_status']=="2"){
            $return['ask'] = "0";
            $return['message'] = "箱子已锁";
            die(Zend_Json::encode($return));
        }
        if($box['warehouse_id']!=$this->warehouse_id){
            $return['ask'] = "0";
            $return['message'] = "箱子不属于当前仓";
            die(Zend_Json::encode($return));
        }
        if($box['box_status']=="1"&&$box['receiving_code']!=$receiving_code){
            $return['ask'] = "0";
            $return['message'] = "箱子已被".$box['receiving_code']."占用";
            die(Zend_Json::encode($return));
        }
        if($box['box_status']=="1"){
            $putawayDetail = Service_PutawayDetail::getByCondition(array('receiving_code'=>$box['receiving_code'],'product_id'=>$box['product_id'],'pd_status'=>'0','box_code'=>$box['box_code']),"*");
            $box['production_time'] = $putawayDetail[0]['production_time'];
        }
        $return['data'] = $box;
        die(Zend_Json::encode($return));
    }
    public function uploadTemplateDownloadAction(){
        $path=APPLICATION_PATH."/../data/xls".'/boxUploadTemplate.xlsx';
        Common_Common::downloadFile($path);  
    }
    /*
     * 批量导入箱子
     * $returnMsg
     */
    public function uploadBoxAction() {
        ini_set('memory_limit', '1024M');
        $uploadFieldName = 'uploadfilename';
        $returnMsg = array('ask' => 0, 'error' => array(), 'message' => '', 'data' => array());
         $db = Common_Common::getAdapter();
         $db->beginTransaction();
        try {
            $return = Process_Box::upload($uploadFieldName);
            if (isset($return['ask'])) {
                $returnMsg['ask'] = $return['ask'];
                $returnMsg['error'] = array($return['message']);
                exit(Zend_Json::encode($returnMsg));
            }
            $dealData = Process_Box::dealAndValiData($return);
            $warehouseId = Service_User::getUserWarehouseId();
            $addTime = date('Y-m-d H:i:s');
            //dealData status 1错误，2，添加成功；
            foreach ($dealData as $key => $val) {
                  $dealData[$key]['status']=1;
                if (empty($val['message'])) {
                    $addRow = array(
                        'box_code' => $val['boxCode'],
                        'warehouse_id' => $warehouseId,
                        'box_type' => $val['boxType'],
                        'box_add_time' => $addTime,
                    );
                    $lastId=  Service_Box::addQuery($addRow);
                    if($lastId){
                          $dealData[$key]['message'] ='添加成功';
                         $dealData[$key]['status']=2;
                        
                    }else{
                        $dealData[$key]['message'] ='添加失败';
                    }
                }
            }
            $returnMsg['data'] = $dealData;
            $returnMsg['ask']=1;
            $db->commit();
        } catch (Exception $e) {
            $returnMsg['error'] = array($e->getMessage());
              $db->rollBack();
        }
        exit(Zend_Json::encode($returnMsg));
    }
	public function printAction(){
		$printId=$this->_request->getParam('printId','');
		$boxList=array();
		try{
			if(empty($printId)){
				throw new Exception('请选择箱子');
			}
			$printIdList=explode(",",$printId);
			foreach($printIdList as $key=>$boxId){
				$box=$this->serviceClass->getByField($boxId,'box_id','*');
				$item=array(
					'box_code'=>$box['box_code'],
				);
				$printNumber=$this->_request->getParam('print_number'.$box['box_id']);
				for($i=1;$i<=$printNumber;$i++){
					$boxList[]=$item;
				}
			}
			if(empty($boxList)){	
				throw new Eception('请选择箱子');
			}
			$this->view->boxList=$boxList;
			echo  Ec::renderTpl($this->tplDirectory . "box-print.tpl", 'layout');
		}catch(Exception $e){
			$this->view->message=$e->getMessage();
			echo  Ec::renderTpl($this->tplDirectory . "box-print.tpl", 'layout');
		}
	}

}