<?php
class Service_TallyProcess extends Common_Service
{
	protected $_QcCode = null;
	protected $_QcOrder = null;

	protected $_errorArr = array();
	protected $_params = array();
	protected $_date = '';
	
	private function setData($params = array())
	{
		$keys = array(
				'productBarcode' => '',
				'qcId' => 0,
				'product' => array(),
				'boxArray' =>array(),
		);
		foreach ($keys as $key => $val) {
			$this->_params[$key] = isset($params[$key]) ? $params[$key] : $val;
		}
		$this->_userId = Service_User::getUserId();
		$this->_warehouseId = Service_User::getUserWarehouseId();

		$this->_QcOrder = Service_QualityControl::getByField($this->_params['qcId'], 'qc_id');
	}
	
	private function valid()
	{
		//当收货数量为0时,应当处理未到货

		$boxArr = $this->_params['boxArray'];
		$boxCodeArr=array();
		//print_r($boxArr);
		if(!empty($boxArr)){
			//校验
			$boxQty=0;
			foreach($boxArr as $key=>$val){
				$boxCode=$val['box_code'];
				if(empty($boxCode)){
					$this->_errorArr[] = array('errorCode' => '10014', 'errorMsg'=>"分箱".($key+1)."必填");
				}else{
					//var_dump(preg_match('/^BOX/i', $val['box_code']));
					//var_dump($val['box_code']);
					if(preg_match('/^BOX/i', $val['box_code'])===false){
						$this->_errorArr[] = array('errorCode' => '10014', 'errorMsg'=>"分箱号:".$val['box_code']."必须以box开头");
					}else{
						
						$box = Service_Box::getByField($val['box_code'],'box_code');
						//var_dump($box);
						if(empty($box) ){
							$this->_errorArr[] = array('errorCode' => '10014', 'errorMsg'=>"分箱号:".$val['box_code']."系统不存在");
						}elseif($box['box_status']!='0'){
							$this->_errorArr[] = array('errorCode' => '10014', 'errorMsg'=>"分箱号:".$val['box_code']."不是空箱子");
						}
					}
					if(!in_array($val['box_code'],$boxCodeArr)){
						$boxCodeArr[]=$val['box_code'];
					}else{
						$this->_errorArr[] = array('errorCode' => '10014', 'errorMsg'=>"分箱号:".$val['box_code']."存在重复");
					}
					if(!empty($boxCode)){
						$checkbox = Service_PutawayBox::getByField($boxCode,'box_code');
						if(!empty($checkbox)){
							$this->_errorArr[] = array('errorCode' => '10014', 'errorMsg'=>"分箱号:".$val['box_code']."系统已存在");
						}
					}
					if(!is_numeric($val['quantity']) || $val['quantity']<1 || $val['quantity']=='' ){
						$this->_errorArr[] = array('errorCode' => '10015', 'errorMsg'=>"分箱号:".$val['box_code'].'数量必填');
					}else{
						$boxQty+=$val['quantity'];
					}
				}
			}
			
		}
	}
	
	public function submit($params = array())
	{
		$result = array(
				'state' => 0,
				'error' => array(),
				'message' => ''
		);
	
		$db = Service_QualityControl::getModelInstance()->getAdapter();
		$this->setData($params);
		
		$this->valid();
		if (!empty($this->_errorArr)) {
			$result['error'] = $this->_errorArr;
			return $result;
		}
		$db->beginTransaction();
		try {


			//$this->putaway();

			$this->putawaybox();
	
			//$db->rollBack();
			$db->commit();
			$result = array('state' => 1, 'message' => Ec::Lang('operationSuccess'));
			return $result;
		} catch (Exception $e) {
			$db->rollBack();
			$result['error'][] = array(
					'errorCode' => '50000',
					'errorMsg' => $e->getMessage()
			);
			return $result;
		}
	}
	public function  putawayBox()
	{
	   $boxArr = $this->_params['boxArray'];
        if (!empty($boxArr)) {
            foreach ($boxArr as $key => $val) {
                $putawayBoxRow = array(
                    'qc_code' => $this->_QcOrder['qc_code'],
                    'box_code' => strtoupper($val['box_code']),
                    'product_barcode' => $this->_QcOrder['product_barcode'],
                    'product_id' => $this->_QcOrder['product_id'],
                    'bb_quantity' => $val['quantity'],
                    'bb_status' => '1',//直接完成,避免上架时，又要更新
                    'bb_add_time' => date('Y-m-d H:i:s', time()),
                );
                //获取分箱 存在更新 不存在 插入
                $boxCondition = array(
                	'qc_code'=>$this->_QcOrder['qc_code'],
                	'box_code'=>$val['box_code'],
                	'product_barcode'=>$this->_QcOrder['product_barcode'],		
                );
                $boxInfo = Service_PutawayBox::getByCondition($boxCondition,'*','1','1');
                if(empty($boxInfo)){
                	Service_PutawayBox::add($putawayBoxRow);
                }else{
                	Service_PutawayBox::update($putawayBoxRow, $boxInfo[0]['box_id']);
                }
                //更新箱子为占用状态
                $boxRow = array(
                	'box_status'=>'1',
                	'box_update_time'=>date	
                );
                Service_box::update($boxRow, $val['box_code'],'box_code');
            }
        }
	}

}