<?
/**
 * Classe que manipulará Avisos de sinistro
 */
class Sinistro_AvisosinistroController extends Agro_Controller_Action {

	public function init() {
		$this->view->title = 'Sinistro » Avisos » Gerência';
		$this->session = new Zend_Session_Namespace('pesquisa_avisos');
	}

	public function getModel() {
		return new Sinistro_Model_AvisosSinistro();
	}

	public function getForm() {
		return new Sinistro_Form_PesquisaAviso();
	}

	/**
	 * Envia avisos de sinistro
	 */
	public function envioAction(){
	}

	public function indexAction() {
		$Funcionarios = new Sistema_Model_Funcionarios();
		$Session = new Zend_Session_Namespace('filtro');

		$this->view->title .= " » 	Listagem";

		$params = $Session->{$this->getRequest()->getModuleName()}->{$this->getRequest()->getControllerName()};

		$Form = $this->getForm();
		if ($params) {
			$Form->populate($params);
		}

		$FormPesquisa = new Seguro_Form_PesquisaProposta();
		$FormPesquisa->addOptions(array('id'=>'Número de Aviso'));

		$this->view->form = $Form;
		$this->view->formPesquisaProposta = $FormPesquisa;

		if ($this->getRequest()->getParam('avisoProcessado')) {
			$this->view->showMessage(MSG_SUCESS, 'success');
		}
	}

	public function getFilter() {
		$where = array();
		$filter = array();

		$User = Zend_Auth::getInstance()->getIdentity();

		if ($this->getRequest()->getParam('tipo_pesquisa') && $this->getRequest()->getParam('valor_pesquisa') 
			&& ($this->getRequest()->getParam('tipo_pesquisa') == "id_proposta" || $this->getRequest()->getParam('tipo_pesquisa') == "nr_apolice")) {

			$filter['field'] = $this->getRequest()->getParam('tipo_pesquisa');

			if ($filter['field'] == "id_proposta"){
				$ModelProposta = new Seguro_Model_Propostas();
				$endosso = $ModelProposta->fetchRow($ModelProposta->getAdapter()->quoteInto('id = ?',$this->getRequest()->getParam('valor_pesquisa')))->toArray();

				$filter['field'] = 'id_endosso';
				$filter['operator'] = '=';
				$filter['value'] = $endosso['id_endosso'];

			} else{
				$filter['operator'] = '=';
				$filter['value'] = trim($this->getRequest()->getParam('valor_pesquisa'));
			}
			$where[] = $filter;
			
			if ($this->getRequest()->getParam('id_status')) {
				$filter['field'] = 'id_status';
				$filter['operator'] = '=';
				$filter['value'] = $this->getRequest()->getParam('id_status');
				$where[] = $filter;
			}			
			
		}else{

			if ($this->getRequest()->getParam('tipo_pesquisa') && $this->getRequest()->getParam('valor_pesquisa')) {
				$filter['field'] = $this->getRequest()->getParam('tipo_pesquisa');
	
		        if(is_numeric($this->getRequest()->getParam('valor_pesquisa'))){
					$filter['operator'] = '=';
					$filter['value'] = $this->getRequest()->getParam('valor_pesquisa');
	
				} else{
					$filter['operator'] = 'ilike';
					$filter['value'] = '%'.$this->getRequest()->getParam('valor_pesquisa').'%';
				}
	
				$where[] = $filter;
			}

			if ($this->getRequest()->getParam('safras')) {
				$filter['field'] = 'id_safra';
				$filter['operator'] = '>=';
				$filter['value'] = $this->getRequest()->getParam('safras');
				$where[] = $filter;
			} elseif ($this->getRequest()->getParam('id_safra')) {
			    if($this->getRequest()->getParam('id_safra') != 'TODAS'){
	    			$filter['field'] = 'id_safra';
	    			$filter['operator'] = '=';
	    			$filter['value'] = $this->getRequest()->getParam('id_safra');
	    			$where[] = $filter;
			    }
			}
	
			if ($this->getRequest()->getParam('id_status')) {
				$filter['field'] = 'id_status';
				$filter['operator'] = '=';
				$filter['value'] = $this->getRequest()->getParam('id_status');
				$where[] = $filter;
			}
	
			if ($this->getRequest()->getParam('id_produto')) {
				$filter['field'] = 'id_produto';
				$filter['operator'] = '=';
				$filter['value'] = $this->getRequest()->getParam('id_produto');
				$where[] = $filter;
			}
			if ($this->getRequest()->getParam('cpf_cnpj')) {
				$filter['field'] = 'cpf_cnpj';
				$filter['operator'] = '=';
				$filter['value'] = $this->getRequest()->getParam('cpf_cnpj');
				$where[] = $filter;
			}
	
			if ($this->getRequest()->getParam('id_municipio')) {
				$filter['field'] = 'id_municipio';
				$filter['operator'] = '=';
				$filter['value'] = $this->getRequest()->getParam('id_municipio');
				$where[] = $filter;
			}
	
			if ($this->getRequest()->getParam('id_evento')) {
			    $filter['field'] = 'id';
			    $filter['operator'] = 'in';
			    $filter['value'] = "(select id_aviso from sinistro.avisos_eventos where id_evento=".$this->getRequest()->getParam('id_evento').")";
			    $where[] = $filter;
			}
	
			if ($this->getRequest()->getParam('fl_pasta_aberta')) {
				switch($this->getRequest()->getParam('fl_pasta_aberta')){
					case 1:
						$where[] = "fl_pasta_aberta = true";
						break;
					case 2:
						$where[] = "fl_pasta_aberta = false";
						break;
				}
			}
	
		    if ($this->getRequest()->getParam('id_estado')) {
	            $filter['field'] = 'id_estado';
	            $filter['operator'] = '=';
	            $filter['value'] = $this->getRequest()->getParam('id_estado');
	            $where[] = $filter;
	        }
	
		    if ($this->getRequest()->getParam('ds_endereco')) {
	            $filter['field'] = 'ds_endereco';
	            $filter['operator'] = 'like';
	            $filter['value'] = '%'.$this->getRequest()->getParam('ds_endereco').'%';
	            $where[] = $filter;
	        }
	
			if ($this->getRequest()->getParam('dt_criacao_inicial') && $this->getRequest()->getParam('dt_criacao_final')) {
				$ModelAve = new Sinistro_Model_AvisosEncerramento();
				$Avisos = $ModelAve->fetchAll("dt_criacao between '".Agro_Util::formatDate($this->getRequest()->getParam('dt_criacao_inicial'), "yyyy-MM-dd")." 00:00:00' and '".Agro_Util::formatDate($this->getRequest()->getParam('dt_criacao_final'), "yyyy-MM-dd")." 23:59:59'");
	
				$id_proposta = array();
	
				if ($Avisos->count()){
					foreach ($Avisos as $aviso){
						$id_proposta[] = $aviso->id_proposta;
					}
	
				} else {
					$id_proposta[] = "-1";
				}
	
				$id_proposta = array_unique($id_proposta);
	
				$filter['field'] = 'id_proposta';
	            $filter['operator'] = 'in';
	            $filter['value'] = "(".implode(", ", $id_proposta).")";
	            $where[] = $filter;
	
			}
	
			if ($this->getRequest()->getParam('avisos_novos') != "") {
	
				$filter['field'] = 'fl_novo';
				$filter['operator'] = '=';
				$filter['value'] = $this->getRequest()->getParam('avisos_novos');
				$where[] = $filter;
			}
		
		}
		
		if($User->tp_usuario == 'C') {
			$Corretores = new Sistema_Model_Corretores();
			$Corretor = $Corretores->findByUser($User->id);

			$filter['field'] = 'id_corretor';
			$filter['operator'] = '=';
			$filter['value'] = $Corretor->id;
			$where[] = $filter;
			
		} elseif($User->tp_usuario == 'P') {
			$filter['field'] = 'id_usuario_criacao';
			$filter['operator'] = '=';
			$filter['value'] = $User->id;
			$where[] = $filter;
		
		} elseif($User->tp_usuario == 'V'){
		 	$filter['field'] = 'id_empresa_processo_sinistro';
			$filter['operator'] = '=';
			$filter['value'] = $User->id_empresa;
			$where[] = $filter;
		}

		return $where;
	}

    public function getmunicipiosavisosAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();

		$where = $this->getFilter();

        $AvisosSinistro = $this->getModel();
        $Municipios = $AvisosSinistro->getMunicipiosAvisos($where);

        $optionsMunicipios = array();
        if(count($Municipios) > 0) {
            foreach($Municipios as $Municipio) {
                $optionsMunicipios[$Municipio['id_municipio']] = $Municipio['ds_nome_municipio'];
            }
        }

		$this->getResponse()->setBody(Zend_Json::encode($optionsMunicipios));
    }

    public function getestadosavisosAction() {
        $this->getHelper('ViewRenderer')->setNoRender();
        $this->getHelper('layout')->disableLayout();

        $where = $this->getFilter();

        $AvisosSinistro = $this->getModel();
        $Estados = $AvisosSinistro->getEstadosAvisos($where);

        $optionsEstados = array();
        if(count($Estados) > 0) {
            foreach($Estados as $Estado) {
                $optionsEstados[$Estado['id_estado']] = $Estado['ds_sigla'];
            }
        }

        $this->getResponse()->setBody(Zend_Json::encode($optionsEstados));
    }

	public function viewAction() {
		$this->getHelper('layout')->setLayout('popup');

		$User = Zend_Auth::getInstance()->getIdentity();
		$ModelUsuarios = new Sistema_Model_Usuarios();

		if($User->tp_usuario == 'V'){
			$ModelAvisosSinistro = new Sinistro_Model_AvisosSinistro();
			$ModelAvisosSinistro->setAvisoVisto($this->getRequest()->getParam('id'));
		}

		$this->view->id_proposta = $this->getRequest()->getParam('idProposta');
		$this->view->id_aviso    = $this->getRequest()->getParam('id');
		$this->view->module      = 'sinistro';
		$this->view->form = new Sinistro_Form_AceitacaoAviso();

		if ($this->getRequest()->getParam('status_aviso') == 'enviado') {
		    $this->enviarAviso();
		} elseif ($this->getRequest()->getParam('status_aviso') == 'recusado') {
		    //Habilitar campos obrigatórios
		    $this->view->form->id_aviso->setRequired(true);
		    $this->view->form->id_tipo_recusa->setRequired(true);
		    if ($this->view->form->isValid($this->getRequest()->getPost())) {
		        $this->recusarAviso();
		    }else {
		        $Errors = $this->view->form->getMessages();
		        $this->view->showMessage($this->getHtmlFormError($Errors), 'error');
		    }
		}
		
		//tarefa 1914
		$Proposta = new Seguro_Model_Propostas();
		$RowProposta = $Proposta->getRow($this->getRequest()->getParam('idProposta'));
		$idProduto = $RowProposta->id_produto;
		
		$ModelProduto = new Produto_Model_Produtos();
		$RowProduto = $ModelProduto->getRow($idProduto);
		$idProdutoGeral = $RowProduto->id_produto_geral;
		
		$ModelProdutoGeral = new Produto_Model_ProdutosGeral();
		$RowProdGeral = $ModelProdutoGeral->getRow($idProdutoGeral);
		$idCultura = $RowProdGeral->id_cultura;
		
		$ModelCultura = new Produto_Model_Culturas();
		$RowCultura = $ModelCultura->getRow($idCultura);
		
		if($RowCultura->ds_chave_cultura == 'TOMATE')
		{
			$ModelQuestionario = new Seguro_Model_PropostasQuestionarios();
			$this->view->questionario = $ModelQuestionario->getResposta($this->getRequest()->getParam('idProposta'), "QUEST_PENCAS_HASTE");
		}
		//
		
		$this->view->form->id_proposta->setValue($this->view->id_proposta);
		$this->view->form->id_aviso->setValue($this->view->id_aviso);
	}

	public function enviarAviso($dados){

		if(!$dados){
			$dados = $this->getRequest()->getParams();
		}
		$AvisoSinistro = new Sinistro_Model_AvisosSinistro();

		$idAviso	= $dados['id_aviso'];

		$idEmpresa  = $dados['id_empresa'];
		$idProposta = $dados['id_proposta'];
		$idProcesso = $dados['id_processo'];

        $dadosAviso = $AvisoSinistro->getAvisoSinistro($idAviso);

        $dtSinistro = new Zend_Date($dadosAviso['dt_sinistro']);

		$data = $this->getRequest()->getParams();

		$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
		$Db->beginTransaction();

		$post = $this->getRequest()->getParams();

		$hasVistoriaPendente = false;
		try {
			if (is_array($post['vistorias_pendentes']) && count($post['vistorias_pendentes']) > 0){
				$hasVistoriaPendente = true;
				$VistoriaEmpresa = new Sistema_Model_VistoriasEmpresas();
				foreach ($post['vistorias_pendentes'] as $item) {
					if ($post['fl_vistoria_pendente-' . $item] == 'N') {
						$VistoriaEmpresa->delete($item);

						$data = array();
						$data['id_vistoria'] = $item;
						$data['id_empresa'] = $post['id_empresa'];
						$VistoriaEmpresa->insert($data);
					}
				}
			}

			// Altera o status do aviso para 'aceito'
			$data = array();
			$data['id_status'] = $AvisoSinistro->getIdStatus('ACEITO', 'SA');
			$data['dt_aceitacao'] = date('Y-m-d H:i:s');
			$AvisoSinistro->update($data, "id = $idAviso");

			// Busca dados do Proponente da Proposta
			$ModelProposta   = new Seguro_Model_Propostas();
			$ModelProponente = new Seguro_Model_Proponentes();
			$Proposta        = $ModelProposta->find($idProposta)->current();
			$Proponente      = $Proposta->proponente();

			$ModelProponente->update(array('id_empresa_vistoria' => $idEmpresa), "cpf_cnpj = '".$Proponente['cpf_cnpj']."'");

			if(!$idProcesso){
				$Processo = new Sinistro_Model_Processos();
				$data = array();
				$data['id_proposta'] = $idProposta;
				$data['id_status'] = $Processo->getIdStatus('ABERTO_REGULACAO', 'SP');

				$idProcesso = $Processo->insert($data);
				unset($data);

				$ProcessoEmpresa = new Sinistro_Model_ProcessosEmpresas();
				$data = array();
				$data['id_processo'] = $idProcesso;
				$data['id_empresa'] = $idEmpresa;

				$data['dt_alteracao'] = date('Y-m-d H:i:s');

				$ProcessoEmpresa->insert($data);

			}else{

                $Processo = new Sinistro_Model_Processos();
                $dsChaveProcesso = $Processo->getChaveStatus($idProcesso);

                if ($dsChaveProcesso == 'ABERTO_LIQUIDACAO' || $dsChaveProcesso == 'FECHADO' || $dsChaveProcesso == 'LIQUIDADO_MANUALMENTE') {

                    $data = array(
                        'id_status' => $Processo->getIdStatus('ABERTO_REGULACAO', 'SP')
                    );

                    $Processo->update($data, 'id = '.$idProcesso);
                }

				$ProcessoEmpresa = new Sinistro_Model_ProcessosEmpresas();
				$where = 'id_processo = ' . $idProcesso . ' and fl_ativo = true';
				$processoEmpresa = $ProcessoEmpresa->fetchRow($where);
				$processoEmpresa = $processoEmpresa->toArray();

				if($processoEmpresa){
					//if($processoEmpresa['id_empresa'] != $idEmpresa){
						$ProcessoEmpresa->update(
							array('fl_ativo'=>'false'),
							"id_processo = {$processoEmpresa['id_processo']} and
							id_empresa = {$processoEmpresa['id_empresa']}"
						);

						$data = array();
						$data['id_processo'] = $idProcesso;
						$data['id_empresa'] = $idEmpresa;

						$ProcessoEmpresa->insert($data);
					//}
				}else{
					$data = array();
					$data['id_processo'] = $idProcesso;
					$data['id_empresa'] = $idEmpresa;

					$ProcessoEmpresa->insert($data);
				}
			}
			
			/*
			 * CRIA AGENDAMENTO PARA O AVISO DE SINISTRO ACEITO, CASO NÃO HAJA AGENDAMENTO EM ABERTO PARA A COBERTURA EM QUESTÃO
			* DIRECIONA O AGENDAMENTO PARA VISTORIA PRELINAR OU FINAL DE ACORDO COM A CONFIGURACAO DO PRODUTO/COBERTURA
			*/
			$ModelAgendamento = new Sistema_Model_Agendamentos();
			$arOpcoesAgendamento = $ModelAgendamento->verificaOpcoesAgendamento($idAviso);
				
			//INSERE AGENDAMENTO PARA VISTORIA PRELIMINAR
			if($arOpcoesAgendamento['fl_vistoria_preliminar'] == true){
				$dataAgendamento['ds_tipo']      = 'PRELIMINAR';
				$dataAgendamento['id_cobertura'] = $arOpcoesAgendamento['id_cobertura'];
				$dataAgendamento['id_processo']  = $idProcesso;
				$dataAgendamento['id_empresa']   = $post['id_empresa'];
			
				$ModelAgendamento->abreAgendamento($dataAgendamento);
			}
				
			//INSERE AGENDAMENTO PARA VISTORIA FINAL
			if($arOpcoesAgendamento['fl_vistoria_final'] == true){
				$dataAgendamento['ds_tipo']      = 'FINAL';
				$dataAgendamento['id_cobertura'] = $arOpcoesAgendamento['id_cobertura'];
				$dataAgendamento['id_processo']  = $idProcesso;
				$dataAgendamento['id_empresa']   = $post['id_empresa'];
			
				$ModelAgendamento->abreAgendamento($dataAgendamento);
			}
						
			$arrayCoberturasAviso = $AvisoSinistro->getCoberturasByAviso($idProposta, $idAviso);
			if (count($arrayCoberturasAviso) > 0) {

				$VistoriaCobertura = new Sistema_Model_VistoriasCoberturas();
                $VistoriaAviso = new Sinistro_Model_VistoriasAvisos();
				foreach ($arrayCoberturasAviso as $item) {
					$idCobertura = $item['id_cobertura'];
					$flVistoriaPreliminar = $item['fl_vistoria_preliminar'];

					if ($flVistoriaPreliminar) {

                        $rs = $VistoriaCobertura->getVistoriaPreliminarByCobertura($idProcesso, $idCobertura, $dtSinistro->toString('yyyy-MM-dd HH:mm'));
                        if (count($rs) > 0) {
                            foreach ($rs as $it) {
                                if ($it['dt_vistoria_laudo']) {
                                    $idVistoriaPreliminar = $it['id_vistoria'];

                                    $item = array();
                                    $item['id_vistoria'] = $idVistoriaPreliminar;
                                    $item['id_aviso'] = $idAviso;

                                    $VistoriaAviso->insert($item);
                                }
                            }
                        }

						$rs = $VistoriaCobertura->getVistoriaByCoberturaComVistPreliminar($idProcesso, $idCobertura,  $dtSinistro->toString('yyyy-MM-dd HH:mm'));
						if (count($rs) > 0) {
							foreach ($rs as $it) {
								if ($it['dt_vistoria_laudo']) {
									$idVistoriaFinal = $it['id_vistoria'];

									$item = array();
									$item['id_vistoria'] = $idVistoriaFinal;
									$item['id_aviso'] = $idAviso;

									$VistoriaAviso->insert($item);
								}
							}
						}
					} else {
						$rs = $VistoriaCobertura->getVistoriaByCoberturaSemVistPreliminar($idProcesso, $idCobertura, $dtSinistro->toString('yyyy-MM-dd HH:mm'));
						if ($rs) {
							if ($rs['dt_vistoria_laudo']) {
								$idVistoriaFinal = $rs['id_vistoria'];

								$item = array();
								$item['id_vistoria'] = $idVistoriaFinal;
								$item['id_aviso'] = $idAviso;

								$VistoriaAviso->insert($item);
							}
						}
					}
				}
			}

			//envia email para Diretoria quando a LMGA da proposta for maior que 1milhão
			if($dadosAviso['vl_lmga'] > 1000000){
				$this->sendMailAceitacaoAvisoLMGA($idAviso);
			}

			$this->sendMailAceitacaoAviso($idAviso);

			$data = null;
            $data['dt_alteracao'] = date('Y-m-d H:i:s');
			$Processo->update($data, 'id = '.$idProcesso);

			$Db->commit();

			if (!$hasVistoriaPendente) {
				$this->view->dadosGravados = 'S';
			}

		}catch(Exception $e){
			$Db->rollback();
			if (!$hasVistoriaPendente) {
				$this->view->dadosGravados = 'N';
			}
			echo $e->getMessage().'<br><pre>'.$e->getTraceAsString().'<pre>';
		}
	}

	public function recusarAviso(){
		$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
		$Db->beginTransaction();

		try{
			$ModelAvisoRecusa = new Sinistro_Model_AvisosRecusas();
			$ModelAvisoSinistro = new Sinistro_Model_AvisosSinistro();

			$params = $this->getRequest()->getParams();

			/*
			 * Atualiza aviso de sinistro
			 */
			$Aviso = $ModelAvisoSinistro->find($params["id_aviso"])->current();
			$Aviso->id_status = Agro_Util::status('RECUSADO', 'SA');
			$Aviso->save();

			/*
			 * Cria recusa do aviso
			 */
			$AvisoRecusa = $ModelAvisoRecusa->createRow();

			$AvisoRecusa->id_aviso = $params["id_aviso"];
			$AvisoRecusa->ds_motivo_recusa = $params["motivo_recusa"];
			$AvisoRecusa->id_tipo_recusa = $params["id_tipo_recusa"];
			$AvisoRecusa->save();

			$Mail = new Agro_Utils_Mail();
			$Mail->comunicaRecusaAviso($AvisoRecusa, $Aviso->proposta());

			$Db->commit();

			$this->view->dadosGravados = 'S';

		}catch (Exception $e){
			dump($e->getMessage());
			$Db->rollback();
			$this->view->dadosGravados = 'N';
		}

	}

	public function sendMailAceitacaoAviso($idAviso){

		$AvisoSinistro = new Sinistro_Model_AvisosSinistro();
		$aviso = $AvisoSinistro->getDadosEmailAviso($idAviso);

		if($aviso){

		    // Endereço de e-mail da empresa de vistoria
            $To = array($aviso['ds_email_vistoriadora']);

			$assunto = "AVISO DE SINISTRO ({$aviso['ds_nome_evento']}) - (Processo) - {$aviso['ds_nome_proponente']} - Proposta: {$aviso['id_proposta']} - {$aviso['ds_nome_produto']}\n";

			$content = "
				NOVO AVISO DE SINISTRO NR. {$aviso['id']} \n\n

				Processo de Sinistro Nro: {$aviso['id_processo']} \n\n

				Proposta Nro: {$aviso['id_proposta']} \n
				Nome do Segurado: {$aviso['ds_nome_proponente']} \n
				Produto: {$aviso['ds_nome_produto']} \n
				Evento: {$aviso['ds_nome_evento']} \n
				Localidade: {$aviso['ds_nome_municipio']} -  {$aviso['ds_sigla']}\n

				\n\n\n

				ATENÇÃO: esta é uma mensagem automática. Por favor, não responda. ";

			if(EMAIL_SINISTRO){
				$content .= "Se desejar entrar em contato, escreva para ".EMAIL_SINISTRO;
			}

			$content .= " \n\n
			Agrobrasil Operadora de Seguro Agrícola";

            try {
                $Mail = new Agro_Mail();
                $Mail->addTo($To);
                $Mail->setBody($content);
                $Mail->setSubject($assunto);
                $Mail->send();

                return true;
            } catch (Exception $e) {
                echo $e->getMessage();
                return false;
            }


		}else{
			return false;
		}
	}

	public function sendMailAceitacaoAvisoLMGA($idAviso){

		$AvisoSinistro = new Sinistro_Model_AvisosSinistro();
		$aviso = $AvisoSinistro->getDadosEmailAviso($idAviso);

		if($aviso){

			$To = array(
					'luana.beck@agrobrasilseguros.com.br',
					'tiago.zschornack@agrobrasilseguros.com.br',
					'randal.brandolt@agrobrasilseguros.com.br',
					'fabio.bertani@agrobrasilseguros.com.br',
					'julio.nakamura@agrobrasilseguros.com.br'
			);

			$assunto = "AVISO DE SINISTRO - LMGA > 1Milhão - (Segurado: {$aviso['ds_nome_proponente']} - Proposta: {$aviso['id_proposta']} - {$aviso['ds_nome_produto']}\n";

			$content  = "ALERTA: ACEITAÇÃO DE AVISO DE SINISTRO COM LMGA SUPERIOR A R$ 1.000.000,00 \n\n";
			$content .= "Aviso: {$aviso['id']} \n\n";
			$content .= "Processo: {$aviso['id_processo']} \n";
			$content .= "Proposta: {$aviso['id_proposta']} \n";
			$content .= "Segurado: {$aviso['ds_nome_proponente']} \n";
			$content .= "Produto: {$aviso['ds_nome_produto']} \n";
			$content .= "Evento: {$aviso['ds_nome_evento']} \n";
			$content .= "Localidade: {$aviso['ds_nome_municipio']}/{$aviso['ds_sigla']}";

			$content .= "\n\n\nATENÇÃO: esta é uma mensagem automática. Por favor, não responda. ";

			$content .= "\n\nAgrobrasil Operadora de Seguro Agrícola";

			try {
				$Mail = new Agro_Mail();
				$Mail->addTo($To);
				$Mail->setBody($content);
				$Mail->setSubject($assunto);
				$Mail->send();

				return true;
			} catch (Exception $e) {
				echo $e->getMessage();
				return false;
			}

		}else{
			return false;
		}
	}


	public function sendMailRecusaAviso($idAviso){
		$AvisoSinistro = new Sinistro_Model_AvisosSinistro();
		$aviso = $AvisoSinistro->getDadosEmailAviso($idAviso);

		if(is_array($aviso) && count($aviso) > 0){

			// Endereço de e-mail do corretor
			$To = array($aviso['ds_nome_corretor']=>$aviso['ds_email_corretor']);

			// Recupera os endereços de e-mail para os quais o alerta de aviso recusado deve ser enviado
			$Cc = array();
			$arEmailAlertaAvisoRecusado = explode('|',AR_EMAIL_ALERTA_AVISO_RECUSADO);
			foreach ($arEmailAlertaAvisoRecusado as $dsEmailAlertaAvisoRecusado) {
				list($nome, $email) = explode(':', $dsEmailAlertaAvisoRecusado);
				$Cc[$nome] = $email;
			}

			$assunto = "AVISO RECUSADO - {$aviso['ds_nome_proponente']} - Proposta: {$aviso['id_proposta']} - {$aviso['ds_nome_produto']}";

			$content = "AVISO DE SINISTRO RECUSADO\n\n";
			$content .= "Processo de Sinistro Nro: {$aviso['id_processo']}\n\n";
			$content .= "Proposta Nro: {$aviso['id_proposta']}\n";
			$content .= "Nome do Segurado: {$aviso['ds_nome_proponente']}\n";
			$content .= "Produto: {$aviso['ds_nome_produto']}\n\n";
			$content .= "Motivo da recusa: {$aviso['ds_motivo_recusa']}\n\n\n";
			$content .= "ATENÇÃO: esta é uma mensagem automática. Por favor, não responda.\n\n";

			$content .= "Se desejar entrar em contato, escreva para ".EMAIL_SINISTRO."\n\n";

			$content .= "\nAgrobrasil Operadora de Seguro Agrícola";

			try {
				$Mail = new Agro_Mail();
				$Mail->addTo($To);
				$Mail->addCc($Cc);
				$Mail->setBody($content);
				$Mail->setSubject($assunto);
				$Mail->send();

				return true;
			} catch (Exception $e) {
				return true;
			}

		}else{
			return false;
		}
	}

	public function salvavistoriaspendentesAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();

		$this->enviarAviso();

		$this->getResponse()->setBody(Zend_Json::encode(true));
	}

	public function getvistoriaspendentesAction() {
		$this->isAjax();

		$data = array();

		$idProcesso = $this->getRequest()->getParam('idProcesso');
		$idEmpresaProcesso = $this->getRequest()->getParam('idEmpresaProcesso');

		$VistoriaAviso = new Sinistro_Model_VistoriasAvisos();
		$vistorias = $VistoriaAviso->getVistoriasSemLaudo($idProcesso);

		if (count($vistorias)) {
			$data['hasVistoria'] = true;

			$Empresa = new Sistema_Model_Empresas();
			$rs = $Empresa->find($idEmpresaProcesso)->current();
			$data['dsNomeEmpresa'] = $rs['ds_nome_fantasia'];

			$data['vistorias'] = array();

			foreach ($vistorias as $item) {
				$data['vistorias'][$item['id_vistoria']]['avisos'] = $VistoriaAviso->getAvisos($item['id_vistoria']);
				$data['vistorias'][$item['id_vistoria']]['ds_tipo'] = $item['ds_tipo'];
			}
		} else {
			$data['hasVistoria'] = false;
		}

		$this->getResponse()->setBody(Zend_Json::encode($data));
	}

	public function motivocancelamentoAction(){
		$this->isAjax(true);
		$this->view->params = $this->getRequest()->getParams();
	 }

	public function cancelarAction(){
		$this->isAjax();

		$result = array("status"=>true, "message"=>"Aviso cancelado");

		Zend_Db_Table::getDefaultAdapter()->beginTransaction();

		try {
			$params = $this->getRequest()->getParams();

			$Model = new Sinistro_Model_AvisosSinistro();
			$ModelLog = new Sinistro_Model_AvisosLogMudancaStatus();
			$ModelProcesso = new Sinistro_Model_Processos();
			$ModelProcessoObs = new Sinistro_Model_ProcessosObservacoes();

			$Aviso = $Model->find($params["id_aviso"])->current();

			$Log = $ModelLog->createRow();
			$Log->id_aviso = $Aviso->id;
			$Log->id_status_antigo = $Aviso->id_status;
			$Aviso->id_status = Agro_Util::status("CANCELADO", "SA");
			$Log->id_status_novo = Agro_Util::status("CANCELADO", "SA");
			$Log->ds_motivo = $params["ds_motivo"];

			$Processo = $ModelProcesso->fetchRow("id_proposta=$Aviso->id_proposta");

			if ($Processo){
				$ProcessoObs = $ModelProcessoObs->createRow();
				$ProcessoObs->id_processo = $Processo->id;
				$ProcessoObs->ds_observacao = "Aviso n° <b>$Aviso->id</b> CANCELADO.<br><b>Motivo</b>: {$params["ds_motivo"]}";

				$ProcessoObs->save();
			}

			$Aviso->save();
			$Log->save();

			$Mail = new Agro_Utils_Mail();
			$Mail->comunicaCancelamentoAviso($Log, $Aviso->proposta());

			Zend_Db_Table::getDefaultAdapter()->commit();

		} catch (Exception $e) {
			Zend_Db_Table::getDefaultAdapter()->rollBack();
			$result["status"] = false;
			$result["message"] = "Não foi possível cancelar o aviso.<br>Erro: {$e->getMessage()}";
		}

		$this->getResponse()->setBody(Zend_Json::encode($result));
	}

	public function dispensarpreliminarAction(){
		$this->isAjax();

		$result = array("status"=>true, "message"=>"", "information"=>"");
		$params = $this->getRequest()->getParams();

		Zend_Db_Table::getDefaultAdapter()->beginTransaction();

		if ($params["id_aviso"]){
			try {

			    $Model = new Sinistro_Model_AvisosSinistro();
				$ModelProcesso = new Sinistro_Model_Processos();
				$ModelObs = new Sinistro_Model_ProcessosObservacoes();

				if (is_array($params["id_aviso"])){

					$avisos_utilizados = array();
					$avisos_dispensados = 0;

					foreach ($params["id_aviso"] as $id_aviso){
						$Aviso = $Model->find($id_aviso)->current();
						$Processo = $ModelProcesso->fetchRow("id_proposta = $Aviso->id_proposta");

						if ($Aviso->contarPreliminaresVinculadas() > 0 || $Aviso->contarFinaisVinculadas() > 0){
							$avisos_utilizados[] = $Aviso->id;

						} else if(!$Processo->id) {
						    $avisos_utilizados[] = $Aviso->id;

						} else {
							$Aviso->fl_dispensa_preliminar = $params["fl_dispensa_preliminar"];
							$Aviso->save();

							$Obs = $ModelObs->createRow();
							$Obs->id_processo = $Processo->id;
							$Obs->ds_observacao = ($params["fl_dispensa_preliminar"]? "<b>Dispensou</b> a" : "<b>Revogou a dispensa</b> da")." vistoria preliminar do aviso n° <b>$Aviso->id</b>.<br><b>Motivo</b>: ".$params["ds_motivo_dispensa"];
							$Obs->save();

							$avisos_dispensados+=1;
						}

						if (count($avisos_utilizados) > 0){
							$result["message"] = "Os avisos ".implode(", ", $avisos_utilizados)." não podem ter a preliminar dispensada pois já possuem vistoria vinculada ou não possuem processo de sinistro.";
						}
					}

					if ($avisos_dispensados > 0){
						Zend_Db_Table::getDefaultAdapter()->commit();
					} else {
						$result["status"] = false;
						Zend_Db_Table::getDefaultAdapter()->rollback();
					}

				} else {
					$Aviso = $Model->find($params["id_aviso"])->current();
					$Processo = $ModelProcesso->fetchRow("id_proposta=$Aviso->id_proposta");

					if ($Aviso->contarPreliminaresVinculadas() > 0 || $Aviso->contarFinaisVinculadas() > 0){
						$result["status"] = false;
						$result["message"] = "O aviso {$params["id_aviso"]} não pode ter a preliminar dispensada pois já possui vistoria vinculada";
						Zend_Db_Table::getDefaultAdapter()->rollback();

					} else {
						$Aviso->fl_dispensa_preliminar = $params["fl_dispensa_preliminar"];
						$Aviso->save();

						$Obs = $ModelObs->createRow();
						$Obs->id_processo = $Processo->id;
						$Obs->ds_observacao = ($params["fl_dispensa_preliminar"]? "<b>Dispensou</b> a" : "<b>Revogou a dispensa</b> da")." vistoria preliminar do aviso n° <b>$Aviso->id</b>.<br><b>Motivo</b>: ".$params["ds_motivo_dispensa"];
						$Obs->save();

						Zend_Db_Table::getDefaultAdapter()->commit();
					}
				}

			} catch (Exception $e) {
				Zend_Db_Table::getDefaultAdapter()->rollback();
				$result["status"] = false;
				$result["message"] = "Não foi possível executar a ação.<br>Erro: {$e->getMessage()}";
			}

		} else {
			$result["status"] = false;
			$result["message"] = "É necessário selecionar ao menos um aviso.";
		}

		$this->getResponse()->setBody(Zend_Json::encode($result));
	}

	public function pastaAction(){
		$this->isAjax();

		$params = $this->getRequest()->getParams();

		$result = array("status"=>true, "message"=>"", "img"=>"", "id_proposta"=>$params["id_proposta"]);

		Zend_Db_Table::getDefaultAdapter()->beginTransaction();

		try {
			$Model = new Sinistro_Model_Processos();

			$Processo = $Model->fetchRow("id_proposta={$params["id_proposta"]}");

			if ($Processo) {
				$Data = new Zend_Date();
	    		$User = Zend_Auth::getInstance()->getIdentity();

				$fl_pasta_aberta = $Processo->fl_pasta_aberta;

				$Processo->fl_pasta_aberta = ($fl_pasta_aberta ? 0 : 1);

				if ($fl_pasta_aberta){
					$Processo->dt_abertura_pasta = $Data->get(Zend_Date::W3C);
	    			$Processo->id_responsavel_abertura_pasta = $User->id;
				}

				$Processo->save();

				$result["img"] = ($Processo->fl_pasta_aberta ? "pasta_processo_1.png" : "pasta_processo_0.png");
				Zend_Db_Table::getDefaultAdapter()->commit();

			} else {
				Zend_Db_Table::getDefaultAdapter()->rollback();
				$result["status"] = false;
				$result["message"] = "Não há processo vinculado a esta proposta!";
			}

		} catch (Exception $e) {
			Zend_Db_Table::getDefaultAdapter()->rollback();
			$result = array("status"=>false, "message"=>"Não foi possível realizar a ação.<br>Erro: {$e->getMessage()}");
		}

		$this->getResponse()->setBody(Zend_Json::encode($result));
	}

    public function mostraretiquetasemitidasAction(){

    	$this->getHelper('layout')->disableLayout();

    	$ModelFerramentas = new Sinistro_Model_Ferramentas();
    	$params = $this->getRequest()->getParams();

		try {

		    if (is_array($params["id_aviso"]) && count($params["id_aviso"])) {
				$Model = new Sinistro_Model_AvisosSinistro();

				$propostas = array();
				foreach ($params["id_aviso"] as $key => $id_aviso){
					$propostas[$key] = $Model->getIdPropostaByIdAviso($id_aviso);
				}
		    }

	    	$this->view->propostas = $ModelFerramentas->mostrarEtiquetasEmitidas($propostas);

    	} catch (Exception $e) {
    		$this->view->propostas = false;
    		$this->view->erro = $e->getMessage();
    	}
    }

	public function desvinculavistoriaAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();

		$return = array("status"=>true, "message"=>"Aviso desvinculado com sucesso!");

		try {
			$params = $this->getRequest()->getParams();
			Zend_Db_Table::getDefaultAdapter()->query("delete from sinistro.vistorias_avisos where id_aviso = {$params["id_aviso"]} and id_vistoria = {$params["id_vistoria"]}");

		} catch (Exception $e) {
			$return = array("status"=>false, "message"=>"Não foi possível desvincular!<br>Erro:{$e->getMessage()}");
		}

		$this->getResponse()->setBody(Zend_Json::encode($return));
	}

	public function enviarempresasAction(){
		$this->isAjax();

		$ModelProcessos = new Sinistro_Model_Processos();
		$ModelAvisos = new Sinistro_Model_AvisosSinistro();

		$avisos = $this->getRequest()->getParam('avisos');
		$empresa = $this->getRequest()->getParam('id_empresa');

		foreach($avisos as $aviso){

			unset($dados);
			$dados = array();

			$proposta = $ModelAvisos->getIdPropostaByIdAviso($aviso);
			$processo = $ModelProcessos->getIdProcessoByProposta($proposta);

			$dados = array(
				'id_proposta' 	=> $proposta,
				'id_processo' 	=> $processo,
				'id_aviso' 		=> $aviso,
				'id_empresa' 	=> $empresa
			);

			$this->enviarAviso($dados);
		}
	}

	public function listAction(){

		$this->view->form = new Sinistro_Form_AceitacaoAviso();

		parent::listAction();
	}

	public function listavisosperitoAction(){

		parent::listAction();
	}

	public function encaminharresponsavelAction(){

		$this->isAjax();
		$params = $this->getRequest()->getParams();
		$ModelProcessos = new Sinistro_Model_Processos();
		$ModelAvisos = new Sinistro_Model_AvisosSinistro();

		try{

			foreach($params['avisos'] as $idAviso){

				$idProposta = $ModelAvisos->getIdPropostaByIdAviso($idAviso);
				$idProcesso = $ModelProcessos->getIdProcessoByProposta($idProposta);

				if($idProcesso){

					$processo = $ModelProcessos->find($idProcesso)->current();
					$processo['id_usuario_responsavel_liquidacao'] = $params['id_usuario'];
					$processo->save();

					$temProcesso = true;
					$return['status'] = 'true';
					$return['message'] = 'Responsável atribuído com sucesso!';

				}else{

					$semProcesso = true;
					$return['status'] = 'false';
					$return['message'] = 'Selecione apenas os avisos que possuem processo!';

				}
			}

			if($temProcesso && $semProcesso){
				$return['status'] = 'true';
				$return['message'] = 'Responsável atribuído com sucesso!<br>*atribuir responsável somente para avisos que possuam processos!';
			}

			$this->getResponse()->setBody(Zend_Json::encode($return));

		}catch (Exception $e){
			die($e);
		}
	}

    public function mailnewavisosAction() {
        $this->isAjax();
        $Aviso = new Sinistro_Model_AvisosSinistro();
        $this->getResponse()->setBody(Zend_Json::encode($Aviso->countNewAvisos()));
    }
}
