<?php
class Receiving_QualityControlController extends Ec_Controller_Action
{
    public function preDispatch()
    {
        $this->tplDirectory = "receiving/views/qc/";
        $this->serviceClass = new Service_QualityControl();
        $userAuth = new Zend_Session_Namespace('userAuthorization');
        $this->warehouse_id = $userAuth->warehouseId;
    }

    public function listAction()
    {
        $qcStatus=Service_QualityControlProcess::getStatus();
        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']:'';
            if(!empty($condition['dateFor'])){
                $condition['dateFor']=date('Y-m-d H:i:s',strtotime($condition['dateFor'].' 00:00:00'));
            }
            if(!empty($condition['dateTo'])){
                $condition['dateTo']=date('Y-m-d H:i:s',strtotime($condition['dateTo'].' 23:59:59'));
            }
            $condition['qc_model'] = "0";

            $count = $this->serviceClass->getByCondition($condition, 'count(*)');
            $return['total'] = $count;

            if ($count) {
                $showFields = array(

                    'qc_code',
                    'receiving_code',
                    'product_barcode',
                    'customer_code',
                    'qc_quantity',
                    'qc_received_quantity',
                    'qc_quantity_sellable',
                    'qc_quantity_unsellable',
                    'qc_status',
                    'qc_add_time',
                    'qc_id',
                    'qc_type',
                    'rd_id',
                    'qc_finish_time',
                    'product_id',
                );
                $showFields = $this->serviceClass->getFieldsAlias($showFields);
                $rows = $this->serviceClass->getByCondition($condition, $showFields, $pageSize, $page, array('qc_id desc'));
                $return['data'] = $rows;
                $return['state'] = 1;
                $return['status'] = $qcStatus;
                $return['message'] = "";
            }
            die(Zend_Json::encode($return));
        }
        //$this->view->qcStatus=$qcStatus;
        echo Ec::renderTpl($this->tplDirectory . "quality_control_index.tpl", 'layout');
    }
	/*免检单*/
    public function qcAction()
    {
        $qcCode = $this->_request->getParam('code','');
        $qcData=array();
        if(!empty($qcCode)){
            $qcObj= new Service_QualityControlProcess();
                $result=$qcObj->getQcOrder($qcCode);

                if($result['state']){
                    $qcData=$result['data'];
                    /*echo "<pre>";
                    print_r($qcData);
                    echo "</pre>";
                    exit;*/
                    $customerId=isset($qcData['order']['customer_id'])?$qcData['order']['customer_id']:'-1';

                    $category=Service_ProductCategoryEbay::getByCondition(array('pce_parent_id'=>1,'pce_status'=>1),array('pce_id','pce_ebay_cid','pce_title'));
                    $this->view->data=$qcData;
                    //'warehouse_id' => Service_User::getUserWarehouseId(),当前仓库
                    $this->view->package=Service_ProductPackage::getByCondition(array('pp_status'=>1,'warehouse_id' => Service_User::getUserWarehouseId(),'customer_id_arr'=>array(0,$customerId)),array('pp_id','pp_barcode','pp_name'));
                    $this->view->category=$category;
                    $condition = array(
                        'lc_status'=>'1',
                        'wa_type'=>'2',
                        'warehouse_id'=>$this->warehouse_id,
                        'pc_id'=>$qcData['order']['product']['pc_id']
                    );
                    $this->view->shelf = Service_Location::getLeftJoinWarehouseAreaByCondition($condition,"*");
                    /* 判断是否首次质检 */
                    /*$productQcCount = Service_QualityControl::getByCondition(array(
                      'product_id' => $qcData['order']['product_id'],
                      'no_draft' => TRUE, // 统计非草稿状态的所有质检单数量
                    ), 'count(*)');*/
                    $product = Service_Product::getByField($qcData['order']['product_id'],'product_id',"*");
                    
                    if (0 === (int) $product['product_receive_status']) {
                        if ($product['product_length']<=0) {
                            $product['product_length'] = 1;
                        }
                        if ($product['product_width']<=0) {
                            $product['product_width'] = 1;
                        }
                        if ($product['product_height']<=0) {
                            $product['product_height'] = 1;
                        }
                    }
                    
                    $this->view->isFirstQc = $product['product_receive_status']=="0" ? TRUE : FALSE;
                    $this->view->productData = $product;
                    if($qcData['order']['qc_model']=="1") {
                        $swoDetail = Service_SwapOrderDetail::getByField($qcData['order']['rd_id'],'swod_id',"*");
                        $this->view->swoDetail = $swoDetail;
                        $this->view->qcCategory = Service_QcCategory::getAll();
                    }
                    //$this->view->isFirstQc = $product['product_lenth']=="" ? "1.00" : $product['product_lenth'];
                    
                }

        }
        
        $defaultCategory = Service_ProductCategoryEbay::getByCondition(array('pce_title' => 'Antiques', 'pce_status' => 1));
        $this->view->defaultCategory = $defaultCategory ? $defaultCategory[0] : array();
        $this->view->warehouse = $warehouse = Service_Warehouse::getByField($this->warehouse_id,'warehouse_id',"*");
        echo Ec::renderTpl($this->tplDirectory . "qc_submit_detail.tpl", 'layout');
    }

    /*
     * @提交QC结果
     */
    public function submitAction()
    {
        $result = array(
            "state" => 0,
            'error'=>array(array('errorCode'=>'10002','errorMsg'=>Ec::Lang('paramsErrormsg'))),
            "message" => ""
        );
        if($this->_request->isPost()){
            $params= $this->_request->getParams();
          
            $sum=0;
            if(isset($params['xiangcode']) && !empty($params['xiangcode']) ){
                foreach($params['xiangcode'] as $key =>$val){
                    $params['boxArray'][]=array(
                        'box_code'=>$val,
                        'quantity'=>isset($params['fengxiangnumber'][$key])?$params['fengxiangnumber'][$key]:0,
                        'warehouse_id'=> $this->warehouse_id,
                    );
                    $sum+=$params['fengxiangnumber'][$key];
                }
                if($sum<$params['receivedQty']-$params['problemQty']){
                    $result['state']=1;
                    $result['message']='分箱产品总数量小于实收总数减不合格总数';
                    die(Zend_Json::encode($result));
                    exit;
                }
                if($sum>$params['receivedQty']-$params['problemQty']){
                    $result['state']=1;
                    $result['message']='分箱产品总数量大于实收总数减不合格总数';
                    die(Zend_Json::encode($result));
                    exit;
                }
                unset($params['xiangcode'],$params['fengxiangnumber']);
            }
            $qcId = $params['qcId'];
            $qcRow = Service_QualityControl::getByField($qcId,'qc_id',"*");
            if($qcRow['qc_model']=="1"){//易货单qc
                $qcObj = new Service_SwapOrderProcess();
                $result = $qcObj->qcSubmit($params);
            }else{
                $qcObj= new Service_QualityControlProcess();
                $result=$qcObj->submit($params);
            }
            unset($params);
        }
        die(Zend_Json::encode($result));
    }
    public function boxCloseAction()
    {
        $result = array(
            "state" => 0,
            'error'=>array(),
            'data'=>array(),
            "message" => ""
        );
        if($this->_request->isPost()){
            $params= $this->_request->getParams();
           // print_r($params);
            $sum=0;
            $product=Service_Product::getByField($params['product_barcode'],'product_barcode');
            $putawayRow = Service_Putaway::getByField($params['receiving_code'], 'receiving_code');
            $qc = Service_QualityControl::getByField($params['qcId'], 'qc_id');
            $putawayBoxRow = array(
                    'qc_code' => $qc['qc_code'],
                    'box_code' => trim($params['box_code']),
                    'product_barcode' => $params['product_barcode'],
                    'product_id' => $qc['product_id'],
                    'bb_quantity' => $params['box_quantity'],
                    'bb_status' => '1',//直接完成,避免上架时，又要更新
                    'bb_add_time' => date('Y-m-d H:i:s', time()),
                );
                Service_PutawayBox::add($putawayBoxRow);
            $update=array(
                'product_id'=>$product['product_id'],
                'product_barcode'=>$params['product_barcode'],
                'receiving_code'=>$params['receiving_code'],
                'box_status'=>2,
                'box_quantity'=>$params['box_quantity'],
                'box_update_time' => date('Y-m-d H:i:s', time())
                );
            $box=Service_Box::getByField($params['box_code'],'box_code');
            if(Service_Box::update($update,$box['box_id'])){
                 $result['state']=1;  

            }else{
                $result['state']=0; 
            }
            //print_r($params);exit;
            unset($params);
        }
        die(Zend_Json::encode($result));
    }
    /**
     * @提交QC未到货
     */
    public function stopAction()
    {
        $result = array(
            "state" => 0,
            'error'=>array(array('errorCode'=>'10002','errorMsg'=>Ec::Lang('paramsErrormsg'))),
            "message" => "Fail."
        );
        if($this->_request->isPost()){
            $qcId= $this->_request->getParam('qcId','');
            $remark= $this->_request->getParam('remark','');
            $params=array(
                'qcId'=>$qcId,
                'remark'=>$remark,
            );
            $qcObj= new Service_QualityControlProcess();
            $result=$qcObj->stopQcTransaction($params);
            unset($params);
        }
        die(Zend_Json::encode($result));
    }

    /**
     * @desc 获取Ebay分类
     */
    public function getCategoryListAction()
    {
        $result = array(
            "state" => 0,
            'data' => array(),
            "message" => "Fail."
        );

        if ($this->_request->isPost()) {
            $page = $this->_request->getParam('page', 1);
            $pageSize = $this->_request->getParam('pageSize', 20);

            $page = $page ? $page : 1;
            $pageSize = $pageSize ? $pageSize : 20;

            $params = $this->_request->getParams();

            /*$condition['pce_parent_id'] = isset($params['pce_parent_id']) ? $params['pce_parent_id'] : '';
            $condition['pce_level'] = isset($params['pce_level']) ? $params['pce_level'] : '';

            if (isset($params['search'])) {
                $page = $pageSize = 0;
            } else {
                if (isset($params['pce_level_c']) && $params['pce_level_c'] != '') {
                    $condition['pce_ebay_cid'] = $params['pce_level_c'];
                } elseif (isset($params['pce_level_b']) && $params['pce_level_b'] != '') {
                    $condition['pce_parent_id'] = $params['pce_level_b'];
                } else {
                    $condition['pce_parent_id'] = isset($params['pce_level_a']) ? $params['pce_level_a'] : '';
                }
            }
            $pceTitle = isset($params['pce_title']) ? $params['pce_title'] : '';

            $condition['pce_title_like'] = $pceTitle;
            $condition['pce_status'] = 1;*/
            $condition  = array();

            $count = Service_ProductCategory::getByCondition($condition, 'count(*)');
            $return['total'] = $count;
            if ($count) {
                $data = Service_ProductCategory::getByCondition($condition, '*', $pageSize, $page);
                $result = array(
                    "state" => 1,
                    'data' => $data,
                    'total' => $count,
                    "message" => 'Success'
                );
            }
        }
        die(Zend_Json::encode($result));
    }

    /**
     * @desc 打印产品条码
     * @param array
     */
    public function printLabelAction()
    {
        $productBarcode = $this->_request->getParam('productBarcode', "");
        $productCategoryId = $this->_request->getParam('productCategoryId', "");
        $customerCode = $this->_request->getParam('customerCode', "");
        $printQty = $this->_request->getParam('printQty', "1");
        $printType = $this->_request->getParam('printType', "5x2");
        if (!is_numeric($printQty) || $printQty < 1) {
            die('条码数量不能为空.');
        }
        if ($productCategoryId) {
            $pcRow = Service_ProductCategory::getByField($productCategoryId, 'pc_id');
        }
        $item = array(
            'product_barcode' => $productBarcode,
            'customer_code' => $customerCode,
            'pc_name_en' => isset($pcRow['pc_name_en']) ? $pcRow['pc_name_en'] : '',
        );
        for ($i = 0; $i < $printQty; $i++) {
            $productList[] = $item;
        }
        $this->view->productList = $productList;
        echo Ec::renderTpl("product/views/product/product-print.tpl", 'layout');
    }

    public function getLocationAction(){
        $params = $this->_request->getParams();
        $return = array(
            "state" => 0,
            "message" => "No Data",
            'data'=>''
        );
        $params['warehouse_id'] = $this->warehouse_id;
        $data = Service_Location::getLeftJoinWarehouseAreaByCondition($params,"*");
        if(count($data)>0){
            $return['state'] = "1";
            $return['data'] = $data;
        }
        die(json_encode($return));
    }

    /*获取QC单信息
     *@author Gilbert
     *@date 2015-08-25
     */
    public function getQcAction(){
        $code = $this->_request->getParam('code','');
        $operation = $this->_request->getParam('operation','');
        $return = array('state'=>0,'message'=>'');
        if(!$code){
            $return['message'] = '质检单号为空';
            die(json_encode($return));
        }
        $obj = new Service_QualityControl();
        $qcRow = Service_QualityControl::getByField($code,'qc_code');
        if($qcRow instanceof Zend_Db_Table_Row){
            $qcRow = $qcRow->toArray();
        }
        if(!$qcRow){
            $return['message'] = '质检单不存在';
            die(json_encode($return));
        }
        $data = array();
        switch($operation){
            case 1;//质检
                if($qcRow['qc_status']!=0){
                    $return['message'] = '质检单已质检';
                    die(json_encode($return));
                }
                //获取产品信息
                $product = Service_Product::getByField($qcRow['product_id'],'product_id');
                if($product instanceof Zend_Db_Table_Row){
                    $product = $product->toArray();
                }
                if(!$product){
                    $return['message'] = '质检单对应的产品不存在';
                    die(json_encode($return));
                }
                $data = array(
                    'qcCode'=>$qcRow['qc_code'],
                    'isFirstReceived'=>$product['product_receive_status']==0?1:0,
                    'barcodeType'=>$product['product_barcode_type'],
                    'product_weight'=>$product['product_weight'],
                    'product_length'=>$product['product_length']>0?$product['product_length']:1,
                    'product_width'=>$product['product_width']>0?$product['product_width']:1,
                    'product_height'=>$product['product_height']>0?$product['product_height']:1,
                );
                break;
            case 2://分箱
                if($qcRow['qc_status']!=1){
                    $return['message'] = '质检单不是完成质检状态';
                    die(json_encode($return));
                }
                $putAwayDetail = Service_PutawayDetail::getByCondition(array('receiving_code'=>$qcRow['receiving_code'],'product_id'=>$qcRow['product_id']));
                $flag = false;
                foreach($putAwayDetail as $value){
                    if($value['box_code']){
                        $flag = true;
                        //如果存在箱号，说明是做过分箱的，就算QC有产品上架也可以继续分箱
                        break;
                    }
                }
                if(!$flag){
                    //先检查是否上架了
                    $rows = Service_InventoryBatch::getByCondition(array('receiving_code'=>$qcRow['receiving_code'],'product_id'=>$qcRow['product_id']));
                    //如果上架了 就不能再分箱
                    if($rows){
                        $return['message'] = '质检单已有产品上架了，不能再进行分箱';
                        die(json_encode($return));
                    }
                }
                //获取待分箱数量
                $obj = new Service_QualityControlProcess();
                $result = $obj->getQtyPendedToDivide($code);
                if($result['passed_qty']==0 && $result['defective_qty']==0){
                    $return['message'] = '质检单已完成分箱';
                    die(json_encode($return));
                }
                $data = array('passed_qty'=>$result['passed_qty'],'defective_qty'=>$result['defective_qty']);
                break;
            case 3://上架
                if($qcRow['qc_status']!=1){
                    $return['message'] = '质检单不是完成质检状态';
                    die(json_encode($return));
                }
                $data = array('passed_qty'=>$qcRow['qc_quantity_sellable'],'defective_qty'=>$qcRow['qc_quantity_unsellable']);
                break;
            default:
                $return['message'] = '系统中不存在你当前所选的操作';
                die(json_encode($return));
                break;
        }
        if($qcRow['qc_model']=="1"){
            $data['qc_model'] = "1";
            $data['swoDetail'] = Service_SwapOrderDetail::getByField($qcRow['rd_id'],"swod_id","*");
        }
        $return['state'] = 1;
        $return['message'] = 'Success';
        $return['data'] = $data;
        die(json_encode($return));
    }
}