<?php
class Outside_PackController extends Ec_Controller_Action{
	public function preDispatch()
	{
		$this->tplDirectory = "outside/views/pack/";
		$this->serviceClass = new Service_Pack();
	}
	/**
	 * @author william-fan
	 * @todo 用于袋子列表
	 */
	public function listAction(){
		$shipMethods = Service_ReceivingBatch::getShipMethod();
		$this->view->shippingMethod = $shipMethods;
		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);
			if($params['dateFor']!=''){
				$condition['add_time_start'] = $params['dateFor'];
			}
			if($params['dateTo']!=''){
				$condition['add_time_end'] = $params['dateTo'];
			}
			$order_code = trim($params['order_code']);
			if(!empty($order_code)){
				$logistic_order = Service_LogisticsOrder::getByField($order_code,'logistics_code');
				if(empty($logistic_order)){
					$logistic_order= Service_LogisticsOrder::getByField($order_code,'ref_tracking_number');
					if(!empty($logistic_order)){
						$scanTracking = '1'; //扫描的是运单号
					}
				}
				$logistics_code = $logistic_order['logistics_code'];
				if(!empty($logistic_order)){
					$packageOrdersCondition = array('orders_code'=>$logistics_code);
					$packageOrders = Service_PackOrder::getByCondition($packageOrdersCondition,array('pack_code'));
					if(!empty($packageOrders)){
						$packcodeArr = array();
						foreach($packageOrders as $key=>$value){
							$packcodeArr[] = $value['pack_code'];
						}
						$condition['pack_code_arr'] = $packcodeArr;
					}
				}else{
            		$nopack = '1';
            	}
			}
			if(isset($nopack) && $nopack=='1'){
				$count = 0;
			}else{
				$count = $this->serviceClass->getByCondition($condition, 'count(*)');
			}
			$return['total'] = $count;
			if ($count) {
				$showFields=array(
						'pack_id',
						'pack_code',
						'warehouse_id',
						'status',
						'add_time',
						'update_time',
						'sm_code',
				);
				$showFields = $this->serviceClass->getFieldsAlias($showFields);
				$rows = $this->serviceClass->getByCondition($condition,$showFields, $pageSize, $page, array('pack_id desc'));
				/* foreach($rows as $key=>$value){
					$user=Service_User::getByField($value['E11']);
					$rows[$key]['user_name'] = $user['user_code'];
				} */
				$return['status'] = $this->serviceClass->getStatus();
				$return['warehouse'] = Common_DataCache::getWarehouseSimple();
				$return['data'] = $rows;
				$return['state'] = 1;
				$return['message'] = "";
			}
			die(Zend_Json::encode($return));
		}
		$status=$this->serviceClass->getStatus();
		$this->view->status = $status;
		echo Ec::renderTpl($this->tplDirectory . "pack_index.tpl", 'layout');
	}
	/**
	 * @author william-fan
	 * @todo 用于运单装袋
	 */
	public function packAction(){
		$this->view->ob_no = '';
		$this->view->sm_code = '';
		$this->view->order_num = 0;
		//$this->view->total_weight = 0;
		$ob_no = trim($this->_request->getParam('ob_no'));
		if($ob_no) {
			$row = Service_Pack::getByField($ob_no, 'pack_code');
			if($row && $row['ob_status']==0) {
				$this->view->sm_code = $row['sm_code'];
				$this->view->ob_no = $ob_no;
				
				$data = Service_PackOrder::getByField($ob_no, 'pack_code', 'count(*) as num');				
				$this->view->order_num = $data['num'];
			}
		}
		//运单的运输方式
		$shipMethods = Service_ReceivingBatch::getShipMethod();
		$this->view->shippingMethod = $shipMethods;
		echo Ec::renderTpl($this->tplDirectory . "delivery.tpl", 'layout');
	}
	/**
	 * @author william-fan
	 * @todo 用于运单扫描
	 */
	public function scanAction(){
		$response = array('state'=>0, 'message'=>'');
		$sm_code = trim($this->_request->getParam('sm_code'));
		$ob_no = trim($this->_request->getParam('ob_no'));
		$tracking_number = trim($this->_request->getParam('ship_code'));
		if(empty($sm_code)) exit(Zend_Json::encode(array('state'=>0, 'message'=>'请选择运输方式')));
		$aShipMethod = Service_ShippingMethod::getByField($sm_code, 'sm_code');
		if(empty($aShipMethod)) exit(Zend_Json::encode(array('state'=>0, 'message'=>'找不到运输方式')));
		if(empty($ob_no)) exit(Zend_Json::encode(array('state'=>0, 'message'=>'请输入包袋号')));
		if(empty($tracking_number)) exit(Zend_Json::encode(array('state'=>0, 'message'=>'请输入服务商单号')));
		$ordersRow = Service_LogisticsOrder::getByField($tracking_number, 'ref_tracking_number');
		if(empty($ordersRow)) exit(Zend_Json::encode(array('state'=>0, 'message'=>'输入的服务商单号不存在')));
		$order_code = $ordersRow['logistics_code'];
		$o_weight = 0;
		
		if(intval($ordersRow['lo_status'])!==4) {
			exit(Zend_Json::encode(array('state'=>0, 'message'=>"运单{$ordersRow['ref_tracking_number']}不是收货完成，不能装袋")));
		}
		$session = new Zend_Session_Namespace('userAuthorization');
		$user=$session->user;
		$userId = $user['user_id'];

		$warehouseId = $session->warehouseId;
		//包袋验证
		$packageBag = Service_Pack::getByField($ob_no, 'pack_code');
		if($packageBag) {
			if(intval($packageBag['status'])!==0)
				exit(Zend_Json::encode(array('state'=>0, 'message'=>'包袋号不是草稿状态')));
			else if($packageBag['sm_code'] != $ordersRow['sm_code'])
				exit(Zend_Json::encode(array('state'=>0, 'message'=>'订单和包袋的运输方式不一致')));
		} else {
			if($sm_code != $ordersRow['sm_code'])
				exit(Zend_Json::encode(array('state'=>0, 'message'=>'订单和包袋的运输方式不一致')));
			$packRow = array(
				'pack_code'=>$ob_no,
				'warehouse_id'=>$warehouseId,
				'status'=>'0',
				'add_time'=>date('Y-m-d H:i:s',time()),
				'sm_code'=>$sm_code,
			);
			$obResult = Service_Pack::add($packRow);
			if(!$obResult) {
				$packLogRow = array(
					'pack_code'=>$ob_no,
					'from_status'=>'0',
					'to_status'=>'0',
					'content'=>'扫描运单,创建袋子',
					'operator'=>$userId,
					'add_time'=>$this->_date,
				);
				exit(Zend_Json::encode(array('state'=>0, 'message'=>'创建新包袋失败，请再试一次')));
			}
		}
		
		//处理
		$soProcess = new Service_LogisticPackProcess();
		$result = $soProcess->scanPack($order_code, $ob_no);
		//print_r($result);
		if($result['state'] === 1) {
			$detail['E2'] = $order_code;
			$detail['E3'] = $ordersRow['ref_tracking_number'];
			$user = Service_User::getLoginUser();
			$detail['E4'] = $user['user_name'];
			$detail['E5'] = date('Y-m-d H:i:s');
			$response['detail'] = $detail;
			$response['state'] = 1;
		} else $response['message'] = $result['error'];
		exit(Zend_Json::encode($response));
	}
	/**
	 * @author william-fan
	 * @todo 完成装袋
	 */
	public function finishBagAction(){
		$response = array('state'=>0, 'message'=>'');
		$ob_no = trim($this->_request->getParam('ob_no'));
		if(empty($ob_no)) exit(Zend_Json::encode(array('state'=>0, 'message'=>'请输入包袋号')));
		$package = Service_Pack::getByField($ob_no, 'pack_code');
		if(empty($package)) return '输入的包袋号不存在';
		if(intval($package['status'])!==0){
			$response['message'] = '包袋不是草稿状态，无法完成装袋';
			exit(Zend_Json::encode($response));
		}
		//处理
		$soProcess = new Service_LogisticPackProcess();
		$result = $soProcess->finishBag($package);
		if($result === true) $response['state'] = 1;
		else $response['message'] = $result;
		exit(Zend_Json::encode($response));
	}
	
}