<?php
class Receiving_ReceivedController extends Ec_Controller_Action
{
    public function preDispatch()
    {
        $this->tplDirectory = "receiving/views/default/";
        $this->serviceClass = new Service_Receiving();
        $userAuth = new Zend_Session_Namespace('userAuthorization');
        $this->warehouse_id = $userAuth->warehouseId;
        $this->user_id = $userAuth->userId;
    }

    public function listAction()
    {
        $this->view->receivedType = Common_Type::receivedType('auto');
        echo Ec::renderTpl($this->tplDirectory . "received_index.tpl", 'layout');
    }

    public function getReceivingAction()
    {
        $return = array(
            "state" => 0,
            "data" => array(),
            "message" => "No Data",
            'is_delivery'=>'0',
        );
        if ($this->_request->isPost()) {
            $operationCode = $this->_request->getParam('operationCode', '');
            $operationType = $this->_request->getParam('operationType', '');
            $customerCode = $this->_request->getParam('customerCode', '');
            $stats = false;
            $condition = array();
            switch ($operationType) {
                case '1':
                    $asnRow = $this->serviceClass->getByField($operationCode, 'receiving_code', array('receiving_id','receiving_code','receiving_status', 'warehouse_id',
                        'receive_model_type','receiving_type','customer_code','receiving_code','is_delivery'));
					//if (!empty($asnRow) && $asnRow['warehouse_id'] == $this->_userAuth->warehouseId) {
                    if (!empty($asnRow) && $asnRow['warehouse_id'] == $this->_userAuth->warehouseId) {
                        $stats = true;
                        $condition['receiving_id'] = $asnRow['receiving_id'];
                        if(!in_array($asnRow['receiving_status'],array('5','6'))){
                            $stats = false;
                            $status=Service_ReceivingProcess::getStatus();
                            $return['message']= '收货单状态为：'.$status[$asnRow['receiving_status']].' 不允许操作收货.';
                        }
                        if($asnRow['receive_model_type']=="1"){
                            $stats = false;
                            $return['message'] = "收货单是集货模式不允许在此收货!";
                        }
                        $return['asnRow'] = $asnRow;
                    }
                    if($stats&&$asnRow['receiving_status']=="5"){
                        $ASNLog = array(
                            'receiving_id'=>$asnRow['receiving_id'],
                            'receiving_code' => $asnRow['receiving_code'],
                            'user_id'=>$this->user_id,
                            'customer_code' => $asnRow['customer_code'],
                            'rl_note' => "收货中",
                            'rl_status_from' => $asnRow['receiving_status'],
                            'rl_status_to' => "6",
                            'rl_add_time'=>date("Y-m-d H:i:s"),
                            'rl_ip'=>Common_Common::getIP()
                        );
                        //print_r($ASNLog);
                        Service_ReceivingLog::add($ASNLog);
                    }
                    $return['receivedMethod'] = "ASN";

                    break;
                case '2':
                    if (empty($customerCode)) {
                        $return['message'] =" 客户代码不能为空.";
                        break;
                    }
                    $asnRow = $this->serviceClass->getByCondition(array('reference_no' => $operationCode, 'customer_code' => $customerCode, 'warehouse_id' => $this->_userAuth->warehouseId), array('receiving_id', 'warehouse_id','receive_model_type','is_delivery'));

                    if (!empty($asnRow)) {
                        $stats = true;
                        $condition['receiving_id'] = $asnRow[0]['receiving_id'];
                        $return['asnRow'] = $asnRow;
                    }
                    if(!empty($asnRow)&&$asnRow[0]['receive_model_type']=="1"){
                        $stats = false;
                        $return['message'] = "收货单是集货模式不允许在此收货!";
                    }
                    break;
                case '3':
                    $condition['product_barcode'] = $operationCode;
                    $stats = true;
                    break;
                default:
                    break;
            }
            if ($stats) {
                $showFields = array(
                    'rd_id',
                    'receiving_code',
                    'rd_status',
                    'product_barcode',
                    'product_id',
                    'rd_receiving_qty',
                    'rd_received_qty',
                    'rd_note',
                );
				
                $detailObj = new Service_ReceivingDetail();
                $showFields = $detailObj->getFieldsAlias($showFields);
                $rows = $detailObj->getByCondition($condition, $showFields, 0, 0, array('product_barcode asc'));
                if (!empty($rows)) {
                    $language = Ec::getLang(1);
                    $detailStatus = Service_ReceivingProcess::getDetailStatus();
                    $dataLsit = array();
                    foreach ($rows as $key => $val) {
                        $receivingCode = isset($val['E2'])?$val['E2']:$val['receiving_code'];
                        $asn = Service_Receiving::getByField($receivingCode,"receiving_code","*");

                        if($return['is_delivery']=="0"&&$asn['is_delivery']=="1"){
                            $return['is_delivery'] = "1";
                        }
                        if($asn['receive_model_type']=="1") {continue;}

                        $productRow = Service_Product::getByField($val['E5'], 'product_id');
                        $rows[$key]['E01'] = isset($productRow['product_title' . $language]) ? $productRow['product_title' . $language] : '';
                        $rows[$key]['E04'] = isset($detailStatus[$val['E4']]) ? $detailStatus[$val['E4']] : '';
                        if($val['E4']=="1"||$val['E4']=="2"){
                            $rows[$key]['E004'] = "1";
                        }else{
                            $rows[$key]['E004'] = "0";
                        }
                        //$rows[$key]['E004'] = $val['E4'] == '2' ? 1 : 0;
                        $dataLsit[] = $rows[$key];
                    }
                    if(!empty($dataLsit)){
                        $return['data'] = $dataLsit;
                        $return['state'] = 1;
                        $return['message'] = "";
                    }else{
                        $return['message'] = "No Data";
                    }
                }
            }
        }
        die(Zend_Json::encode($return));
    }
	/*收货*/
    public function submitReceivedAction()
    {
        $return = array(
            "state" => 0,
            "error" => '',
            "message" => 'error',
        );
        $rdArr = $this->_request->getParam('rdIds');
        $weight = $this->_request->getParam('weight','');
        $weight = trim($weight);
        if(!empty($rdArr) && is_array($rdArr)){
          $obj= new Service_ReceivingProcess();
            $return= $obj->submitReceived($rdArr,$weight);
            if(!empty($return['qcParam'])){
                $return['message'] =Ec::Lang('operationSuccess');
                foreach($return['qcParam'] as $params){
                    $qcObj= new Service_QualityControlProcess();
                    $ret = $qcObj->submit($params);
                    if($ret['state']!="1"){
                        $message = "";
                        foreach($ret['error'] as $k=>$v){
                            $message.=$v['errorMsg'].";";
                        }
                        //throw new Exception("已经收过货的产品[".$product['product_barcode']."]自动质检失败:".$message);
                        $return['message'] .= "已经收过货的产品[".$params['productBarcode']."]自动质检失败:".$message."\n";
                    }
                }
            }
        }
        die(Zend_Json::encode($return));

    }

    /*
     * @收货完成,打印Qc单据
     */
    public function printQcListAction()
    {
        $qcCode = $this->_request->getParam('code',array());
        $qcData=array();
        if(!empty($qcCode) && is_array($qcCode) ){
          $qcObj= new Service_QualityControlProcess();
            foreach($qcCode as $key =>$val){
                $result=$qcObj->getQcOrder($val);
                if($result['state']){
                    $qcData[]=$result['data'];
                }
            }
        }else{
            $arr = explode(",",$qcCode);
            $qcObj= new Service_QualityControlProcess();
            foreach($arr as $k=>$val){
                if($val!=""){
                    $result=$qcObj->getQcOrder($val);
                    if($result['state']){
                        $qcData[]=$result['data'];
                    }
                }
            }
          
        }
        foreach($qcData as &$data){
             if($data['order']['qc_model']=="1") {
                        $swoDetail = Service_SwapOrderDetail::getByField($data['order']['rd_id'],'swod_id',"*");
                       $data['swoDetail'] = $swoDetail;
                       
            }
        }
     
          $this->view->data=$qcData;
        $this->view->qcCategory = Service_QcCategory::getAll();
        echo Ec::renderTpl($this->tplDirectory . "print_qc_list.tpl", 'layout');
    }


}