<?php


class Agro_Webservice {
	
	public function init() {
		require_once(APPLICATION_PATH . "/../library/Agro/nusoap/nusoap.php");
	}	
		
	static function transmitirSinistroEssor($aviso, $cobertura, $arquivo_OK=false, $arquivo_ERRO=false){
	
		require_once(APPLICATION_PATH . "/../library/Agro/nusoap/nusoap.php");
		
		$Processos = new Sinistro2_Model_Processos();
		$Avisos    = new Sinistro2_Model_AvisosSinistro();
		$Propostas = new Seguro_Model_Propostas();
		$Model     = new Sinistro2_Model_TransmissaoAvisosEssor();
	
		switch ($cobertura){
			case 'GRANIZO':                                $idCobertura = 1; break;
			case 'GEADA':                                  $idCobertura = 3; break;
			case 'PRODUÇÃO MÍNIMA':                        $idCobertura = 15; break;
			case 'QUEDA DE PARREIRAL':                     $idCobertura = 11; break;
			case 'MULTIRISCO':                             $idCobertura = 18; break;
			case 'BAIXA DE ÍNDICE DE PRODUÇÃO FORRAGEIRA': $idCobertura = 42; break;
			default:                                       $idCobertura = 1;
		}
	
		if ($cobertura == 'COB_MULTIRISCO_II') {
			$cobertura = 'MULTIRISCO II';
		}
		if ($cobertura == 'COB_MULTIRISCO') {
			$cobertura = 'MULTIRISCO';
		}
		
		$idProcesso = $Processos->getProcessoByAviso($aviso);
		$idProposta = $Avisos->getIdPropostaByIdAviso($aviso);
	
		if (APPLICATION_ENV != 'production') {
			$client = new nusoap_client(WSDL_DEV, true, false, false, false, false, 3600, 3600);
		} else {
			$client = new nusoap_client(WSDL_PROD, true, false, false, false, false, 3600, 3600);
		}
	
		$mysoapmsg = $Model->montaXMLTransmissao($aviso, $cobertura);
	
		$params = array('Servico' => 'InserirAvisoSinistro', 'conteudoXML' => $mysoapmsg['xml']);
		$result = $client->call('ExecutarRow', array($params));
	
		if ($client->getError()) {
			$return['status'] = false;
			$return['message'] = "Erro ao enviar Aviso de Sinistro. (conexão)";
	
			$Propostas->gravaLogTransmissao(
					array(
							'id_proposta'        => $idProposta,
							'ds_retorno'         => "Aviso de Sinistro: ".$aviso." - cobertura: ".$cobertura." - ".utf8_encode($client->getError()),
							'fl_sucesso'         => 'f',
							'ds_tipo_transmissao' => 'InserirAvisoSinistro',
							'ds_xml_transmissao' => $mysoapmsg['xml']
					)
			);
			if($arquivo_ERRO){
				Agro_Util::geraSalvaXmlSinistro($idProposta, $arquivo_ERRO, $aviso." - ".$client->getError().chr(13).chr(10));
			}
	
		} else {
			$result_xml = simplexml_load_string(utf8_encode($result['ExecutarRowResult']), 'SimpleXMLElement', LIBXML_NOCDATA);
	
			if(($result_xml->nm_erro) || ($result_xml->erro->attributes()->nm_retorno)){
				$Propostas->gravaLogTransmissao(
						array(
								'id_proposta'        => $idProposta,
								'ds_retorno'         => "Aviso de Sinistro: ".$aviso." - cobertura: ".$cobertura." - ".($result_xml->nm_erro != '' ? $result_xml->nm_erro : $result_xml->erro->attributes()->nm_retorno),
								'fl_sucesso'         => 'f',
								'ds_tipo_transmissao' => 'InserirAvisoSinistro',
								'ds_xml_transmissao' => $mysoapmsg['xml']
						)
				);
				if($arquivo_ERRO){
					Agro_Util::geraSalvaXmlSinistro($idProposta, $arquivo_ERRO, $aviso." - cobertura: ".$cobertura." - ".$result_xml->nm_erro);
				}
			} else {
				if($result_xml->numeroSinistro){
	
					$Processos->update(array('id_processo_seguradora' => $idProcesso), "id = $idProcesso");
					$Avisos->update(array('fl_transmissao_seguradora' => true), "id = $aviso");
	
					$Propostas->gravaLogTransmissao(
							array(
									'id_proposta'        => $idProposta,
									'ds_retorno'         => "Aviso de Sinistro: ".$aviso." - cobertura: ".$cobertura,
									'fl_sucesso'         => 't',
									'ds_tipo_transmissao' => 'InserirAvisoSinistro',
									'ds_xml_transmissao' => $mysoapmsg['xml']
							)
					);
	
					//Registra o código do aviso de sinistro na Seguradora para a Cobertura informada
					$AvisosTransmissao = new Sinistro2_Model_AvisosTransmissaoSeguradora();
					$Row = $AvisosTransmissao->getRow();
					$Row->id_aviso     = $aviso;
					$Row->id_cobertura = $idCobertura;
					$Row->vl_reserva   = $mysoapmsg['vl_reserva'];
					$Row->cd_identificador_seguradora = $result_xml->numeroSinistro;
					$Row->save();
					
					if($arquivo_OK){
						Agro_Util::geraSalvaXmlSinistro($aviso, $arquivo_OK, $aviso." - ".$result_xml->numeroSinistro.chr(13).chr(10));
					}
				} else {
					$Propostas->gravaLogTransmissao(
							array(
									'id_proposta'        => $idProposta,
									'ds_retorno'         => "Aviso de Sinistro: ".$aviso." - cobertura: ".$cobertura,
									'fl_sucesso'         => 'f',
									'ds_tipo_transmissao' => 'InserirAvisoSinistro',
									'ds_xml_transmissao' => $mysoapmsg['xml']
							)
					);

					if($arquivo_ERRO){
						Agro_Util::geraSalvaXmlSinistro($idProposta, $arquivo_ERRO, $aviso." - cobertura: ".$cobertura." - ".$result_xml->nm_erro);
					}
				}
			}
		}
		
		if($arquivo_OK){
			return true;
		} else {
			return $result_xml->numeroSinistro;
		}
	}
}

?>