<?php

class Sinistro2_TransmissaolaudosController extends Agro_Controller_Proposta {
	protected $_paginator = false;
	public $wsdl;
	public $propostas_erros = array();
	public $propostas_enviadas = array();

	public function getModel() {
		return new Sinistro2_Model_TransmissaoLaudos();
	}

	public function init() {
	    ini_set('memory_limit','1024M');
		$this->view->title = 'Laudos » Transmissão';

		require_once(APPLICATION_PATH . "/../library/Agro/nusoap/nusoap.php");
		$this->wsdl = "http://ws.nobre.com.br/sinistro.asmx?WSDL";
		$this->client = new nusoap_client($this->wsdl);
	}

	/**
	 * Monta a tela de pesquisa de propostas
	 *
	 */
	public function indexAction() {
		$this->view->form = new Sinistro2_Form_TransmissaoLaudosSearch();
	}

	public function getFilter() {
		$where = array();

		if ($this->getRequest()->getParam('id_safra')) {
			$where[] = array(
				'field' => 'pr.id_safra',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('id_safra')
			);
		}
		if ($this->getRequest()->getParam('tp_laudo')) {
			$where[] = array(
				'field' => 'v_laudos_transmissao_preliminar_final.tp_vistoria',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('tp_laudo')
			);
		}
		if ($this->getRequest()->getParam('id_produto')) {
			$where[] = array(
				'field' => 'p.id_produto',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('id_produto')
			);
		}
		if ($this->getRequest()->getParam('vl_pesquisar_por')) {
			$field = "v_laudos_transmissao_preliminar_final.".$this->getRequest()->getParam('pesquisar_por');
			$value = $this->getRequest()->getParam('vl_pesquisar_por');
			$operator = '=';

			$where[] = array (
				'field' => $field,
				'operator' => $operator,
				'value' => $value
			);
		}
		return $where;
	}

	public function transmitirAction(){
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();

		$result = array("status"=>true, "dados"=>"", "message"=>"");
		$arquivo_OK   = time()."_TRANSMISSAO_LAUDOS_OK.txt";
		$arquivo_ERRO = time()."_TRANSMISSAO_LAUDOS_ERRO.txt";

	    $LaudoFinal      = new Sinistro2_Model_LaudosFinais();
	    $LaudoPreliminar = new Sinistro2_Model_LaudosPreliminares();

		$ListVistorias = $this->getRequest()->getParam("id_vistoria");

		if ($this->getRequest()->getParam("id_vistoria")){
			foreach($ListVistorias as $chave => $vistoria){

			    $arVistoria = explode("_", $vistoria);
			    $id_vistoria = $arVistoria[0];
			    $tp_vistoria = $arVistoria[1];

			    if($tp_vistoria == 'Final'){
			        $id_laudo = $LaudoFinal->getIdLaudoFinalByVistoria($id_vistoria);
                    $xml = $this->montaXMLTransmissaoLaudoFinal($id_laudo,$id_vistoria);
			    }
			    if($tp_vistoria == 'Preliminar'){
			        $id_laudo = $LaudoPreliminar->getIdLaudoPreliminarByVistoria ($id_vistoria);
			        $xml = $this->montaXMLTransmissaoLaudoPreliminar($id_laudo);
			    }

				$soapaction = "http://ws.nobre.com.br/AvisarSinistroSeguroAgricola";
				$mysoapmsg = $this->client->serializeEnvelope($xml);
				$response = $this->client->send( $mysoapmsg, $soapaction );

				if($response['AvisarSinistroSeguroAgricolaResult']['avisoSinistro']['Codigo']){
					//$id_processo_seguradora = $response['AvisarSinistroSeguroAgricolaResult']['avisoSinistro']['Codigo'];

				    if($tp_vistoria == 'Final'){
				        $LaudoFinal->update(array('fl_transmitido_seguradora' => true), "id = $id_laudo");
				    }
				    if($tp_vistoria == 'Preliminar'){
				        $LaudoPreliminar->update(array('fl_transmitido_seguradora' => true), "id = $id_laudo");
				    }
					$this->geraSalvaXml($id_laudo, $arquivo_OK, $id_laudo.chr(13).chr(10));
					$result['arquivo_ok']   = $arquivo_OK;
				} else {
					$this->propostas_erros[] = $id_proposta;
					$msg = "Aviso: ".$aviso."<br>".chr(13).chr(10).$response[faultcode]."<br>".chr(13).chr(10).$response[faultstring]."<br>".chr(13).chr(10).$response[detail]."<br>".chr(13).chr(10);
					//$msg = '<pre>'.print_r($response, true).'</pre>';
					$this->geraSalvaXml($aviso, $arquivo_ERRO, $msg);
					$this->geraSalvaXml($aviso, $aviso."_aviso.xml", $this->client->request.chr(13).chr(10).chr(13).chr(10));

					$result['arquivo_erro'] = $arquivo_ERRO;
				}
			}
			$result['status'] = true;
			$result['message'] = "Processamento concluído com sucesso.";
		} else {
			$result['status'] = false;
			$result['message'] = "Marque ao menos uma vistoria.";
		}
		$this->getResponse()->setBody(Zend_Json::encode($result));
	}

	public function montaXMLTransmissaoLaudoFinal($id_laudo,$id_vistoria) {

	    $LaudoFinal   = new Sinistro2_Model_LaudosFinais();
	    $LaudoFinalIS = new Sinistro2_Model_LaudosFinaisItensSegurados();

	    //Recupera Laudos por Item
	    $rsLaudo = $LaudoFinal->getItensLaudoFinal($id_laudo);

	    //Recupera data do laudo
	    $rsDtLaudo = $LaudoFinalIS->getMenorDtVistoria($id_laudo);

		$xml ='
		  <AvisarSinistroSeguroAgricola xmlns="http://ws.nobre.com.br/">
		    <laudoAgricola xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
		    	<codigo>'.$id_laudo.'</codigo>
				<data>'.$rsDtLaudo[dt_vistoria].'</data>
				<tipo>Final</tipo>
			';

		return $xml;
	}

	public function marcapropostasAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();

		$Adapter = new Zend_File_Transfer_Adapter_Http();
		$Adapter->setDestination(APPLICATION_PATH.'/upload_files/temp/');

		$file = $Adapter->getFileInfo();
		if(!$Adapter->receive($file['propostas']['name'])){
			$result['status'] = false;
		} else {
			$dados = file_get_contents(APPLICATION_PATH.'/upload_files/temp/' . $file['propostas']['name']);
			$dados = str_replace("\r\n", ",", $dados);
			$result['propostas'] = $dados;
			$result['status'] = true;
		}
		$this->getResponse()->setBody(Zend_Json::encode($result));
	}

	public function geraSalvaXml($idAviso, $nomeArquivo, $msg) {
		$file = fopen(APPLICATION_PATH."/upload_files/xml_transmissao_error/{$nomeArquivo}", "a+");
	    fwrite($file, $msg);
	    fclose($file);
	}

	public function formataData( $dtData ){
	 	$arData = explode( "-", $dtData );

		$ano = substr( $dtData, 0, 4 );
		$mes = substr( $dtData, 5, 2 );
		$dia = substr( $dtData, 8, 2 );
	    $dtDataFormatada = $ano.'-'.$mes.'-'.$dia;
	    return $dtDataFormatada;
	}
}