<?php
class Custom_JibaoController extends Ec_Controller_Action
{
    public function preDispatch()
    {
        $this->tplDirectory = "custom/views/customs/";
        $this->serviceClass = new Service_ApiJibaoFormid();
    }

    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);
            if($params['FORM_ID']!=''){
            	$condition['FORM_ID'] = $params['FORM_ID'];
            }
            if($params['OWNER_CODE']!=''){
            	$condition['OWNER_CODE'] = $params['OWNER_CODE'];
            }
            if($params['OWNER_NAME_LIKE']!=''){
                $condition['OWNER_NAME_LIKE'] = $params['OWNER_NAME_LIKE'];
            }
            if($params['CreateTime_Start']!=''){
                $condition['CreateTime_Start'] = $params['CreateTime_Start'];
            }
            if($params['CreateTime_end']!=''){
                $condition['CreateTime_end'] = $params['CreateTime_end'];
            }
            //$condition['status'] = '1';
            $condition['status_arr'] = array(1,2);
            /* print_r($params);
            print_r($condition); */
            unset($params);
            $count = $this->serviceClass->getJibaoByCondition($condition, 'count(*)');

            $return['total'] = $count;
            //print_r($condition);exit;
            if ($count) {
                /* $showFields=array(
                    
                'form_type',
                'form_type_name',
                'ft_id',
                );
                $showFields = $this->serviceClass->getFieldsAlias($showFields); */
                $rows = $this->serviceClass->getJibaoByCondition($condition,'*', $pageSize, $page, array('ajh_id desc'));
                $return['data'] = $rows;
                $return['state'] = 1;
                $return['message'] = "";
            }
            die(Zend_Json::encode($return));
        }
        echo Ec::renderTpl($this->tplDirectory . "jibao_index.tpl", 'layout');
    }

    public function getByJsonAction()
    {
        $result = array('state' => 0, 'message' => 'Fail', 'data' => array());
        $paramId = $this->_request->getParam('paramId', '');
        if (!empty($paramId) && $rows = $this->serviceClass->getByField($paramId, 'ft_id')) {
            $rows=$this->serviceClass->getVirtualFields($rows);
            $result = array('state' => 1, 'message' => '', 'data' => $rows);
        }
        die(Zend_Json::encode($result));
    }

    
    /**
     * @author william-fan
     * @todo 生成集报数据
     */
    public function createJibaoAction(){
    	set_time_limit(600);
        ini_set('memory_limit', '2048M');
    	header("Content-type:text/html;charset=utf-8");
    	$jibao_id = $this->_request->getParam('jibao_id');
    	$jibao_id = trim($jibao_id);
    	$jibaoInfo = Service_ApiJibaoFormid::getByField($jibao_id,'FORM_ID');
        $customerCode = $this->_request->getParam("customer_code");
    	
    	$recreate = $this->_request->getParam('recreate','0'); //是否重新生成
    	if($recreate=='0'){
    		if($jibaoInfo['jibao_path_hz']!='' && $jibaoInfo['jibao_path_zk']!=''){
    			echo "该集报已经生成";
    			exit;
    		}
    	}
    	$jibaoObj = new Service_JibaoProcess();
    	$getTmpResult = $jibaoObj->getJibaoTmp($jibao_id);
    	/* echo "<pre>";
    	print_r($getTmpResult); */
    	if($getTmpResult['ask']=='1'){
    		//生成了集报单号了
    		$jibaoInfo = Service_ApiJibaoHeader::getByField($jibao_id,'FORM_ID');
    		if(empty($jibaoInfo)){
    			echo "集报单$jibao_id在系统无集报表头数据";
    		}else{
            
    			if($jibaoInfo['TRADE_CO']!=''){
    				$customerCondition = array(
    						'trade_co'=>$jibaoInfo['TRADE_CO'],
                            'customer_code'=>$customerCode,
    				);
    				$customers = Service_Customer::getByCondition($customerCondition,'*');
    				switch(count($customers)){
    					case '0':
    						echo "客户[".$customerCode."]不存在经营代码[{$jibaoInfo['TRADE_CO']}]";
    						break;
    					case '1':
    						$jibaoResult = $jibaoObj->getAvg($jibao_id,$customerCode);
    						//print_r($jibaoResult);
    						if($jibaoResult['ask']=='1'){
    							$jibaoResult2=$jibaoObj->jibaoResultProcess($jibao_id,$jibaoResult,$customerCode);
								echo $jibaoResult2['message'];
    						}else{
    							echo $jibaoResult['message'];
    						}
    						break;
    					default:
    						echo "客户代码[".$customerCode."]与经营代码{$jibaoInfo['TRADE_CO']}的组合不唯一";
    				}
    			}else{
    				echo "集报单经营单位为空";	
    			}
    		}
    	}else{
    		echo $getTmpResult['message'];
    	}
    }
    /**
     * @author william-fan
     * @todo 用于下载集报数据
     */
    public function downJibaoAction(){
    	$jibao_id = $this->_request->getParam('jibao_id');
    	$jibao_id = trim($jibao_id);
    	$type = $this->_request->getParam('type','1');
    	
    	$jibaoInfo = Service_ApiJibaoFormid::getByField($jibao_id,'FORM_ID');
    	
    	if($jibaoInfo['jibao_path_hz']=='' || $jibaoInfo['jibao_path_zk']==''){
    		echo "集报数据不存在";
    		exit;
    	}
    	
    	if($type=='1'){
    		$fileName = $jibao_id."汇总.csv";
            if(file_exists($jibaoInfo['jibao_path_hz'])){
                $csvContent = file_get_contents($jibaoInfo['jibao_path_hz']);
            }else{
                $fileArr = explode("/",$jibaoInfo['jibao_path_hz']);
                $jibaoObj = new Service_JibaoProcess();
                $jibaoResult = $jibaoObj->getAvg($jibao_id,$fileArr[10]);
                $jibaoResult = $jibaoResult['data']; //汇总数据
                $csvContent = "";
                foreach($jibaoResult as $key=>$value){
                    foreach($value as $key1=>$value1){
                        if($key1=="国家"){
                            $csvContent.=$key1."\r\n";
                        }else{
                            $csvContent.=$key1.",";
                        }
                    }
                    break;
                }

                foreach($jibaoResult as $key=>$value){
                    foreach($value as $key1=>$value1){
                        //print_r($key1);
                        if($key1=="国家"){
                            /*$value1=str_replace("\r",'\r\n',$value1);
                            $value1=str_replace("\n",'\r\n',$value1);*/
                            $value1 = str_replace("\"","\"\"",$value1);
                            $csvContent.="\"".$value1."\""."\r\n";
                        }else{
                            /*$value1=str_replace("\r",'\r\n',$value1);
                            $value1=str_replace("\n",'\r\n',$value1);*/
                            $value1 = str_replace("\"","\"\"",$value1);
                            $csvContent.="\"".$value1."\",";
                        }
                    }
                }
                $csvContent=iconv('UTF-8','GBK//IGNORE',$csvContent);
            }
    	}else{
    		$fileName = $jibao_id."展开.csv";
    		$csvContent = file_get_contents($jibaoInfo['jibao_path_zk']);
            $fileArr = explode("/",$jibaoInfo['jibao_path_hz']);
            $jibaoObj = new Service_JibaoProcess();
            $jibaoResult = $jibaoObj->getAvg($jibao_id,$fileArr[9]);
            $jibaoResultzk = $jibaoResult['datazk']; //汇总数据
            $csvContent = "";
            foreach($jibaoResultzk as $key=>$value){
                foreach($value as $key1=>$value1){
                    if($key1=="国家"){
                        $csvContent.=$key1."\r\n";
                    }else{
                        $csvContent.=$key1.",";
                    }
                }
                break;
            }

            foreach($jibaoResultzk as $key=>$value){
                foreach($value as $key1=>$value1){
                    //print_r($key1);
                    if($key1=="国家"){
                        /*$value1=str_replace("\r",'\r\n',$value1);
                        $value1=str_replace("\n",'\r\n',$value1);*/
                        $value1 = str_replace("\"","\"\"",$value1);
                        $csvContent.="\"".$value1."\""."\r\n";
                    }else{
                        /*$value1=str_replace("\r",'\r\n',$value1);
                        $value1=str_replace("\n",'\r\n',$value1);*/
                        $value1 = str_replace("\"","\"\"",$value1);
                        $csvContent.="\"".$value1."\",";
                    }
                }
            }
            $csvContent=iconv('UTF-8','GBK//IGNORE',$csvContent);
    	}
    	
    	
    	header("Content-Type: application/vnd.ms-excel; charset=GB2312");
    	header("Pragma: public");
    	header("Expires: 0");
    	header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    	header("Content-Type: application/force-download");
    	header("Content-Type: application/octet-stream");
    	header("Content-Type: application/download");
    	header("Content-Disposition: attachment;filename=$fileName");
    	header("Content-Transfer-Encoding: binary ");
    	//$csvContent = iconv("utf-8","gb2312",$csvContent);
    	echo $csvContent;
    	
    }

  /**
   * 下载明细4表
   */
  public function downloadAllJibaoAction() {
    $jibaoId = trim($this->getRequest()->getParam('id', ''));

    if (empty($jibaoId)) {
      exit('No Data ...');
    }

    $jibaoDetail       = Service_ApiJibaoGatherDetails::getByCondition(array(
      'FORM_ID' => $jibaoId,
    ));
    $jibaoDetailBefore = Service_ApiJibaoGatherDetailsBefore::getByCondition(array(
      'jibao_id' => $jibaoId,
    ));
    $jibaoDetailAfter  = Service_ApiJibaoGatherDetailsAfter::getByCondition(array(
      'jibao_id' => $jibaoId,
    ));

    if (empty($jibaoDetail) || empty($jibaoDetailBefore) || empty($jibaoDetailAfter)) {
      exit('No Data ...');
    }

    $jibaoHeader = Service_ApiJibaoHeader::getByField((int) $jibaoDetail[0]['ajh_id'], 'ajh_id');

    if (empty($jibaoHeader)) {
      exit('No Data ...');
    }

    require_once APPLICATION_PATH . '/../libs/PHPExcel.php';
    require_once APPLICATION_PATH . '/../libs/PHPExcel/IOFactory.php';

    set_time_limit(0);
    ini_set('memory_limit', '2048M');

    $objPe     = new PHPExcel();
    $objWriter = PHPExcel_IOFactory::createWriter($objPe, 'Excel2007');
    $objSheet  = $objPe->setActiveSheetIndex(0);
    $column    = 0;

    $objPe->getActiveSheet()->setTitle('api_jibao_header');
    $objPe->getActiveSheet()->getTabColor()->setARGB('FF191970');
    $objPe->addSheet(new PHPExcel_Worksheet($objPe, 'api_jibao_gather_details'));
    $objPe->addSheet(new PHPExcel_Worksheet($objPe, 'api_jibao_gather_details_before'));
    $objPe->addSheet(new PHPExcel_Worksheet($objPe, 'api_jibao_gather_details_after'));

    // First Worksheet #191970
    foreach ($jibaoHeader as $key => $value) {
      $objSheet->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($column))->setAutoSize(TRUE);
      $objSheet->setCellValue(PHPExcel_Cell::stringFromColumnIndex($column) . '1', $key);
      $objSheet->setCellValueExplicit(PHPExcel_Cell::stringFromColumnIndex($column) . '2', $value, PHPExcel_Cell_DataType::TYPE_STRING);
      ++$column;
    }

    // Second Worksheet #8b008b
    $column   = 0;
    $objSheet = $objPe->setActiveSheetIndex(1);
    $objPe->getActiveSheet()->getTabColor()->setARGB('FF8B008B');

    foreach ($jibaoDetail[0] as $key => $value) {
      $objSheet->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($column))->setAutoSize(TRUE);
      $objSheet->setCellValue(PHPExcel_Cell::stringFromColumnIndex($column) . '1', $key);
      ++$column;
    }

    $column = 0;

    foreach ($jibaoDetail as $key => $item) {
      foreach ($item as $value) {
        $objSheet->setCellValueExplicit(PHPExcel_Cell::stringFromColumnIndex($column) . ($key + 2), $value, PHPExcel_Cell_DataType::TYPE_STRING);
        ++$column;
      }

      $column = 0;
    }

    // Third Worksheet #006400
    $column   = 0;
    $objSheet = $objPe->setActiveSheetIndex(2);
    $objPe->getActiveSheet()->getTabColor()->setARGB('FF006400');

    foreach ($jibaoDetailBefore[0] as $key => $value) {
      $objSheet->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($column))->setAutoSize(TRUE);
      $objSheet->setCellValue(PHPExcel_Cell::stringFromColumnIndex($column) . '1', $key);
      ++$column;
    }

    $column = 0;

    foreach ($jibaoDetailBefore as $key => $item) {
      foreach ($item as $value) {
        $objSheet->setCellValueExplicit(PHPExcel_Cell::stringFromColumnIndex($column) . ($key + 2), $value, PHPExcel_Cell_DataType::TYPE_STRING);
        ++$column;
      }

      $column = 0;
    }

    // Fourth Worksheet #d2691e
    $column   = 0;
    $objSheet = $objPe->setActiveSheetIndex(3);
    $objPe->getActiveSheet()->getTabColor()->setARGB('FFD2691E');

    foreach ($jibaoDetailAfter[0] as $key => $value) {
      $objSheet->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($column))->setAutoSize(TRUE);
      $objSheet->setCellValue(PHPExcel_Cell::stringFromColumnIndex($column) . '1', $key);
      ++$column;
    }

    $column = 0;

    foreach ($jibaoDetailAfter as $key => $item) {
      foreach ($item as $value) {
        $objSheet->setCellValueExplicit(PHPExcel_Cell::stringFromColumnIndex($column) . ($key + 2), $value, PHPExcel_Cell_DataType::TYPE_STRING);
        ++$column;
      }

      $column = 0;
    }

    // 默认激活第1个工作表
    $objPe->setActiveSheetIndex(0);

    header('pragma: public');
    header('expires: 0');
    header('accept-ranges: bytes');
    header('cache-control: must-revalidate');
    header('content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8');
    header('content-disposition: attachment; filename=jibao-detail-4-table-' . date('YmdHis') . '.xlsx');
    $objWriter->save('php://output');
  }

    public function batchExportAction(){
        $ajhId = $this->_request->getParam("FORMID","");
        $filename = date('YmdHi')."集报.zip";
        $filename = iconv("UTF-8","GBK",$filename);
        // 生成文件
        $zip = new ZipArchive();
        if ($zip->open($filename,ZIPARCHIVE::CREATE ) !== TRUE) {
            header("Content-type: text/html; charset=utf-8");
            exit('无法打开文件，或者文件创建失败' );
        }
        foreach($ajhId as $ajf_id){
            $jibaoInfo = Service_ApiJibaoFormid::getByField($ajf_id,'FORM_ID');
            $jibao_id = $jibaoInfo['FORM_ID'];
            if($jibaoInfo['jibao_path_hz']=='' || $jibaoInfo['jibao_path_zk']==''){
                header("Content-type: text/html; charset=utf-8");
                echo "集报数据不存在";
                exit;
            }
            $fileName1 = $jibao_id."汇总.csv";
            if(file_exists($jibaoInfo['jibao_path_hz'])){
                //$csvContent = file_get_contents($jibaoInfo['jibao_path_hz']);
                $zip->addFile($jibaoInfo['jibao_path_hz'],$fileName1);
            }else{
                $fp= fopen($jibaoInfo['jibao_path_hz'],"w");
                fclose($fp);
                $fileArr = explode("/",$jibaoInfo['jibao_path_hz']);
                $jibaoObj = new Service_JibaoProcess();
                $jibaoResult = $jibaoObj->getAvg($jibao_id,$fileArr[10]);
                $jibaoResult = $jibaoResult['data']; //汇总数据
                $csvContent = "";
                foreach($jibaoResult as $key=>$value){
                    foreach($value as $key1=>$value1){
                        if($key1=="country"){
                            $csvContent.=$key1."\r\n";
                        }else{
                            $csvContent.=$key1.",";
                        }
                    }
                    break;
                }

                foreach($jibaoResult as $key=>$value){
                    foreach($value as $key1=>$value1){
                        if($key1=="country"){
                            $value1 = str_replace("\"","\"\"",$value1);
                            $csvContent.="\"".$value1."\""."\r\n";
                        }else{
                            $value1 = str_replace("\"","\"\"",$value1);
                            $csvContent.="\"".$value1."\",";
                        }
                    }
                }
                $csvContent=iconv('UTF-8','GBK//IGNORE',$csvContent);
                file_put_contents($jibaoInfo['jibao_path_hz'],$csvContent);
                $zip->addFile($jibaoInfo['jibao_path_hz'],$fileName1);
            }
            $fileName2 = $jibao_id."展开.csv";
            if(file_exists($jibaoInfo['jibao_path_zk'])){
                $zip->addFile($jibaoInfo['jibao_path_zk'],$fileName2);
            }else{
                $csvContent = file_get_contents($jibaoInfo['jibao_path_zk']);
                $fileArr = explode("/",$jibaoInfo['jibao_path_hz']);
                $jibaoObj = new Service_JibaoProcess();
                $jibaoResult = $jibaoObj->getAvg($jibao_id,$fileArr[9]);
                $jibaoResultzk = $jibaoResult['datazk']; //汇总数据
                $csvContent = "";
                foreach($jibaoResultzk as $key=>$value){
                    foreach($value as $key1=>$value1){
                        if($key1=="country"){
                            $csvContent.=$key1."\r\n";
                        }else{
                            $csvContent.=$key1.",";
                        }
                    }
                    break;
                }

                foreach($jibaoResultzk as $key=>$value){
                    foreach($value as $key1=>$value1){
                        if($key1=="country"){
                            $value1 = str_replace("\"","\"\"",$value1);
                            $csvContent.="\"".$value1."\""."\r\n";
                        }else{
                            $value1 = str_replace("\"","\"\"",$value1);
                            $csvContent.="\"".$value1."\",";
                        }
                    }
                }
                $csvContent=iconv('UTF-8','GBK//IGNORE',$csvContent);
                file_put_contents($jibaoInfo['jibao_path_zk'],$csvContent);
                $zip->addFile($jibaoInfo['jibao_path_zk'],$fileName2);
            }
        }
        $zip->close();

        header ("Cache-Control: max-age=0");
        header ("Content-Description: File Transfer" );
        header ('Content-disposition: attachment; filename='.basename($filename)); //文件名
        header ("Content-Type: application/zip" );
        header ("Content-Transfer-Encoding: binary" );
        header ('Content-Length: ' . filesize($filename));
        @readfile($filename );//输出文件;

        //die($data);
    }

    public function batchExportHsAction(){
        //$ajhId = $this->_request->getParam("FORMID","");
        //$filename = date('YmdHi')."集报.zip";
        //$filename = iconv("UTF-8","GBK",$filename);
        $exportType = $this->_request->getParam("exportType","");
        require_once APPLICATION_PATH . '/../libs/PHPExcel.php';
        require_once APPLICATION_PATH . '/../libs/PHPExcel/IOFactory.php';
        $table = new PHPExcel();
        $table->getDefaultStyle()->getFont()->setName('宋体');
        $table->setActiveSheetIndex(0);
        $table->setActiveSheetIndex(0)->setTitle("导出报关单号");
        $objActSheet=$table->setActiveSheetIndex(0);

        $objActSheet->getColumnDimension('A')->setWidth(15);
        $objActSheet->getColumnDimension('B')->setWidth(20);
        $objActSheet->setCellValue('A1','集报单号');
        $objActSheet->setCellValue('B1','报关单号');
        $index = 2;
        if($exportType==1){
            $ajhId = $this->_request->getParam("FORMID","");
            foreach($ajhId as $id){
                $apijibaoheader = Service_ApiJibaoHeader::getByField($id,"FORM_ID","*");
                $objActSheet->setCellValue('A'.$index,$id);
                $objActSheet->setCellValue('B'.$index,$apijibaoheader['RELATIVE_FORM_ID']);
                $index++;
            }
            //var_dump($ajhId);
            //exit;
        }else{
            $params = $this->_request->getParams();
            $condition = array();
            $condition['status_arr'] = array(1,2);
            if($params['FORM_ID']!=''){
                $condition['FORM_ID'] = $params['FORM_ID'];
            }
            if($params['OWNER_CODE']!=''){
                $condition['OWNER_CODE'] = $params['OWNER_CODE'];
            }
            if($params['OWNER_NAME_LIKE']!=''){
                $condition['OWNER_NAME_LIKE'] = $params['OWNER_NAME_LIKE'];
            }
            if($params['CreateTime_Start']!=''){
                $condition['CreateTime_Start'] = $params['CreateTime_Start'];
            }
            if($params['CreateTime_end']!=''){
                $condition['CreateTime_end'] = $params['CreateTime_end'];
            }
            $rows = $this->serviceClass->getJibaoByCondition($condition,'*');
            foreach($rows as $key=>$row){
                //$apijibaoheader = Service_ApiJibaoHeader::getByField($id,"FORM_ID","*");
                $objActSheet->setCellValue('A'.$index,$row['FORM_ID']);
                $objActSheet->setCellValue('B'.$index,$row['RELATIVE_FORM_ID']);
                $index++;
            }
        }
        $objWriter = PHPExcel_IOFactory::createWriter($table, 'Excel2007');
        header( "Pragma: public" );
        header( "Expires: 0" );
        header("Accept-Ranges: bytes");
        header('cache-control:must-revalidate');
        header("Content-Disposition: attachment; filename=FORMID".date("YmdHis").".xlsx");
        header("Content-Type:APPLICATION/OCTET-STREAM;charset=utf-8");
        $objWriter->save('php://output');
    }

}