<?php
use Mpdf\Mpdf;

/**
 * Classe que manipulará Avisos de sinistro
 */
class Sinistro2_AvisosinistroController extends Agro_Controller_Action {

	public function init() {
		$this->view->title = 'Sinistro » Avisos » Gerência';
		$this->session = new Zend_Session_Namespace('pesquisa_avisos');
		require_once(APPLICATION_PATH . "/../library/Agro/nusoap/nusoap.php");
       
	}

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

	public function getForm() {
		return new Sinistro2_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 Sinistro2_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 ($this->getRequest()->getParam('check_estados')) {
                $filter['field'] = 'id_estado';
                $filter['operator'] = 'in';
                $filter['value'] = "(" . implode(', ', $this->getRequest()->getParam('check_estados')) . ")";
                $where[] = $filter;
            }

            if ($this->getRequest()->getParam('check_municipios')) {
                $filter['field'] = 'id_municipio';
                $filter['operator'] = 'in';
                $filter['value'] = "(" . implode(', ', $this->getRequest()->getParam('check_municipios')) . ")";
                $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' || $user->tp_usuario == 'M'){
			$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');

        $params = $this->getRequest()->getParams();
        $user = Zend_Auth::getInstance()->getIdentity();
        $id = !Agro_Util::filterVariable($params['id']) ? 0 : (int)$params['id'];
        $idProposta = !Agro_Util::filterVariable($params['idProposta']) ? 0 : (int)$params['idProposta'];

        $this->view->adminView = $user->tp_usuario === 'F';

        $modelAvisosSinistro = new Sinistro2_Model_AvisosSinistro();
        $modelProposta = new Sinistro2_Model_Propostas();
        $modelVistoriaPrevia = new Seguro_Model_VistoriaPreviaEmpresa();
        $modelProcesso = new Sinistro2_Model_Processos();
        $modelAtendimento = new Atendimento_Model_Proposta();
        $propostaCobertura = new Seguro_Model_PropostasCoberturas();
        $modelPropostaSeguro = new Seguro_Model_Propostas();
        $modelLaudosPerito = new Sinistro2_Model_LaudosPerito();

        if ($user->tp_usuario == 'V' || $user->tp_usuario == 'M') {
            $modelAvisosSinistro->setAvisoVisto($id);
        }

        $dados = array();

        //dados básicos para a view
        $dados['id_proposta'] = $params['idProposta'];
        $dados['id_aviso'] = $params['id'];
        $dados['module'] = 'sinistro2';
        $this->view->form = new Sinistro2_Form_AceitacaoAviso();

        $this->view->title = 'Sinistro » Avisos » Visualizar';
        $this->view->showPrint = true;
        $this->view->date = new Zend_Date();
        $this->view->dateFormat = 'dd/MM/Y';

        //FLAG de edição
        $dados['edit'] = $params['edit'];

        //controla o envio ou a recusa do aviso
        if ($params['status_aviso'] == 'enviado') {
            $this->enviarAviso();
        } elseif ($params['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 {
                $this->view->showMessage($this->getHtmlFormError($this->view->form->getMessages()), 'error');
            }
        }

        //seta valores no form
        $this->view->form->id_proposta->setValue($idProposta);
        $this->view->form->id_aviso->setValue($id);

        //Verifica se foi realizada vistoria previa
        $dados['ds_empresa_previa'] = $modelAvisosSinistro->getEmpresaPrevia($idProposta);

        //dados comuns à view
        $dados['aviso'] = $modelAvisosSinistro->fetchRow($modelAvisosSinistro->getAdapter()->quoteInto('id = ?', $id));
        $this->view->data = $modelAvisosSinistro->loadAvisoSinistro($id);

        if ($this->view->data['id_proposta_vistoria'] > 0) {
            $dados['previas'] = $modelVistoriaPrevia->countLaudos($idProposta);
        }

        $proposta = $modelProposta->find($idProposta)->current();
        $dados['proposta'] = $proposta;
        $dados['vigencia'] = $proposta->getVigenciaOriginal();
        $dados['produto'] = $proposta->produto();
        $dados['proponente'] = $proposta->proponente();
        $dados['propriedade'] = $proposta->propriedade();
        $dados['atributos'] = $proposta->atributos_rn('UNIDADE_SEGURADA');
        $dados['beneficiarios'] = $proposta->beneficiarios();
        $dados['coberturasAdicionais'] = $proposta->coberturas_contratadas('adicional');
        $dados['coberturaPrincipal'] = $proposta->coberturas_contratadas('principal');
        $dados['corretor'] = $proposta->corretor();
        $dados['observacoes'] = $proposta->observacoes();
        $dados['observacoes_adicionais'] = $proposta->observacoes_arquivos_geral(true);
        $dados['carencia'] = $proposta->carencia();
        $dados['croquis'] = $proposta->croquis();
        $dados['producaoGarantida'] = $proposta->atributos('PROPRIEDADE', 'PROD_PRODUCAO_GARANTIDA');
        $dados['pessoa_autorizada'] = $proposta->pessoa_autorizada();
        $dados['id_proposta_exibicao'] = ($proposta->versao_endosso(false) > 0) ? $proposta->id_proposta_mae($idProposta) : $idProposta;

        $this->view->proposta = $proposta;
        $this->view->dados = $dados;

        //Verifica se os Itens Segurados devem ser ocultados em virtude de endosso
        $ocultarItensSegurados = $proposta->ocultarItensSegurados();
        if ($ocultarItensSegurados) {
            $this->view->informacoesAdicionais = $modelAtendimento->getObservacoesProposta($idProposta);
        } else {
            $this->view->informacoesAdicionais = $modelAtendimento->getInfoAdicionais($idProposta);
        }

        //Identifica se já existe um processo relacionado à proposta do aviso
        $processo = $modelProcesso->fetchRow('id_proposta = ' . $idProposta);
        if ($processo) {
            $processo = $processo->toArray();
            $this->view->form->id_processo->setValue($processo['id']);

            // Definindo valor default para combo de empresas
            $processoEmpresa = $modelProcesso->getEmpresaVistoriadora($processo['id']);
            if ($processoEmpresa) {
                $this->view->idEmpresaProcesso = $processoEmpresa['id'];
                $this->view->form->empresas->setValue($processoEmpresa['id']);
            }

            $this->view->data['dsNomeEmpresaVistoriadora'] = $processoEmpresa['ds_nome_fantasia'];
            $this->view->data['id_processo'] = $processo['id'];
        } else {
            /*
             * Verifica se já existe Processo de Sinistro para alguma outra proposta do segurado e em caso
             * positivo sugere que o novo processo seja encaminhado para a mesma empresa do existente
             */
            $empresa = $modelAvisosSinistro->getVistoriadoraByCpfCnpjSeguradoSafra(
                $dados['proponente']['cpf_cnpj'],
                $dados['produto']['id_safra']
            );

            if ($empresa) {
                $this->view->idEmpresaProcesso = $empresa->id;
                $this->view->form->empresas->setValue($empresa->id);
                $this->view->vistoriadoraByCpfCnpjNome = $empresa->ds_nome_fantasia;
            }

            $this->view->form->id_processo->setValue(null);
        }

        if ($this->view->data['ds_chave_status'] == 'PENDENTE') {
            list($dtAviso) = explode(' ', $this->view->data['dt_sinistro']);
            $this->view->data['arAvisosExistentes'] = $modelAvisosSinistro->getAvisosByPropostaDataAviso(
                $idProposta,
                $id,
                $dtAviso
            );
        }

        //informações de coberturas e evento
        $this->listChaveCoberturas = $propostaCobertura->getChaveCoberturasByProposta($idProposta);

        $evento['ds_nome_evento'] = $this->view->data['eventos']['ds_nome_evento'];
        $evento['id'] = $this->view->data['eventos']['id_evento'];

        $this->view->evento = $evento;

        foreach ($dados['coberturasAdicionais'] as $cobertura) {
            $id_coberturas[] = $cobertura['id'];
        }

        //Pega o arquivo (planilha) do laudo de preenchimento
        $RowLaudos = $modelLaudosPerito->getArquivoPreenchimentoLaudo(
            $dados['produto'],
            $evento['id'],
            $dados['coberturaPrincipal'],
            $id_coberturas
        );

        foreach ($RowLaudos as $id_laudos) {
            $arquivoLaudo = $modelLaudosPerito->fetchAll("id = " . $id_laudos['id_laudo'] . " AND id_safra = " . $dados['produto']['id_safra'] . " AND fl_ativo = 't'");

            if ($arquivoLaudo['tipo']->tipo == 'Laudo Final') {
                $this->view->linkLF .= $arquivoLaudo['chave']->chave . "<a title='Clique aqui para fazer o download do arquivo' href='/agronet/file/view/path/planilhas_laudos_finais/name/" . $arquivoLaudo['arquivo']->arquivo . "' target='_blank'>
					<img src='/resources/imagens/mini/download.png' border='0'></a>";
            } elseif ($arquivoLaudo['tipo']->tipo == 'Laudo Preliminar') {
                $this->view->linkLP .= $arquivoLaudo['chave']->chave . "<a title='Clique aqui para fazer o download do arquivo' href='/agronet/file/view/path/planilhas_laudos_preliminares/name/" . $arquivoLaudo['arquivo']->arquivo . "' target='_blank'>
					<img src='/resources/imagens/mini/download.png' border='0'></a>";
            }
        }

        // Busca informacões sobre Vistoria Previa
        $arInfoVistoriaPrevia = (new Seguro_Model_VistoriaPreviaEmpresa())->getStatusAnaliseByProposta($idProposta);

        $model = (new Produto_Model_Safras())->getSafraModel($idProposta, "Lvp001");

        foreach ($arInfoVistoriaPrevia as $vistoria) {
            $arLaudo = (new $model())->getLaudo($vistoria['id_proposta_vistoria']);
            if ($arLaudo['id'] > 0) {
                $this->view->arInfoVistoriaPrevia[] = $arLaudo;
            }
        }

        $this->view->vistoriaLancadaDepoisDoAviso = false;

        if (!empty($arInfoVistoriaPrevia)) {
            $this->view->vistoriaLancadaDepoisDoAviso = $arInfoVistoriaPrevia[0]['dt_criacao'] > $dados['aviso']->dt_sinistro;
        }

        //informações de endosso
        $this->view->endossos = $proposta->buscaPropostasEndosso();

        $propostaSeguro = $modelPropostaSeguro->find($idProposta)->current();
        $this->view->possuiEndosso = $propostaSeguro->possuiEndosso(true);

        //tarefa 1914
        $proposta = new Seguro_Model_Propostas();
        $rowProposta = $proposta->getRow($this->getRequest()->getParam('idProposta'));
        $idProduto = $rowProposta->id_produto;

        $rowProduto = (new Produto_Model_Produtos())->getRow($idProduto);
        $idProdutoGeral = $rowProduto->id_produto_geral;

        $rowProdGeral = (new Produto_Model_ProdutosGeral())->getRow($idProdutoGeral);
        $idCultura = $rowProdGeral->id_cultura;

        $rowCultura = (new Produto_Model_Culturas())->getRow($idCultura);

        if ($rowCultura->ds_chave_cultura == 'TOMATE') {
            $this->view->questionario = (new Seguro_Model_PropostasQuestionarios())->getResposta(
                $this->getRequest()->getParam('idProposta'),
                "QUEST_PENCAS_HASTE"
            );
        }
    }

	public function enviarAviso($dados = '')
    {
        $db = Agro_Db_Table_Abstract::getDefaultAdapter();
        $db->beginTransaction();

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

        $avisoSinistro = new Sinistro2_Model_AvisosSinistro();

        $idAviso = $dados['id_aviso'];
        $idEmpresa = $dados['id_empresa'];
        $idProposta = !Agro_Util::filterVariable($dados['id_proposta']) ? 0 : (int)$dados['id_proposta'];
        $idProcesso = $dados['id_processo'];

        $dadosAviso = $avisoSinistro->getAvisoSinistro($idAviso);
        $dtSinistro = new Zend_Date($dadosAviso['dt_sinistro']);
        $data = $this->getRequest()->getParams();
        $post = $this->getRequest()->getParams();

        $hasVistoriaPendente = false;

        try {
            /*
             * RELACIONA AS VISTORIAS PENDENTES COM A EMPRESA SELECIONADA
             */
            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");

            // LOGA A TROCA DE STATUS
            $log = (new Sinistro2_Model_AvisosLogMudancaStatus())->createRow();
            $log->id_aviso = $idAviso;
            $log->id_status_antigo = $dadosAviso['id_status'];
            $log->id_status_novo = $data['id_status'];
            $log->ds_motivo = 'Aviso aceito';
            $log->save();

            /*
             * FAZ O RELACIONAMENTO DA EMPRESA DE VISTORIA COM O PROPONENTE
             */
            $modelProposta = new Seguro_Model_Propostas();
            $proposta = $modelProposta->find($idProposta)->current();
            $proponente = $proposta->proponente();
            $rowProduto = (new Produto_Model_Produtos())->get((int)$proposta['id_produto']);
            $modelProponentesRecomendacao = new Seguro_Model_ProponentesRecomendacao();
            $modelProponentesRecomendacao->save([
                'id_proponente' => $proponente['id_proponente'],
                'id_empresa' => $idEmpresa,
                'id_safra' => $rowProduto['id_safra'],
                'tp_epoca_cultivo' => $rowProduto['tp_epoca_cultivo'],
            ]);

            /*
             * REABRE O PROCESSO (se for o caso) - ALTERA O STATUS PARA ABERTO_REGULACAO
             */
            $modelProcesso = new Sinistro2_Model_Processos();
            $processo = $modelProcesso->find($idProcesso)->current();
            $dsChaveProcesso = $modelProcesso->getChaveStatus($idProcesso);
            $processo->id_status = Agro_Util::status("ABERTO_REGULACAO", "SP");
            $processo->save();

            if (
                $dsChaveProcesso == 'ABERTO_LIQUIDACAO'
                || $dsChaveProcesso == 'CANCELADO'
                || $dsChaveProcesso == 'FECHADO'
                || $dsChaveProcesso == 'LIQUIDADO_MANUALMENTE'
            ) {
                $modelProcessoObs = new Sinistro2_Model_ProcessosObservacoes();
                $processoObs = $modelProcessoObs->createRow();
                $processoObs->id_processo = $processo->id;
                $processoObs->ds_observacao = "Processo <b>REATIVADO</b>. <b>Motivo: </b>";
                $processoObs->ds_observacao .= str_ireplace("\n", "<br>", "Novo aviso de sinistro");
                $processoObs->save();
            }

            /*
             * RELACIONA O PROCESSO DE SINISTRO COM A EMPRESA SELECIONADA
             */
            $processoEmpresa = new Sinistro2_Model_ProcessosEmpresas();
            $idEmpresaAtual = $processoEmpresa->getEmpresaByProcesso($idProcesso);

            if ($idEmpresaAtual > 0 && $idEmpresaAtual <> $idEmpresa) {
                /*
                 * Seta vistorias pendentes da empresa atual como canceladas
                 */
                $vistoriaEmpresa = new Sistema_Model_VistoriasEmpresas();

                $arLaudosPreliminaresPendentes = $vistoriaEmpresa->getVistoriaPreliminarPendente($idProcesso);
                $arLaudosFinaisPendentes = $vistoriaEmpresa->getVistoriaFinalPendente($idProcesso);
                $arAgendamentosPendentes = $vistoriaEmpresa->getVistoriaAgendamentoPendente($idProcesso);

                if (count($arLaudosPreliminaresPendentes) > 0) {
                    foreach ($arLaudosPreliminaresPendentes as $preliminarPendente) {
                        (new Sinistro2_Model_LaudosPreliminares())->update(
                            array('id_status' => 206), "id = '" . $preliminarPendente['id_laudo_preliminar'] . "'"
                        );
                    }
                }

                if (count($arLaudosFinaisPendentes) > 0) {
                    foreach ($arLaudosFinaisPendentes as $finaisPendente) {
                        (new Sinistro2_Model_LaudosFinais())->update(
                            array('id_status' => 207), "id = '" . $finaisPendente['id_laudo_final'] . "'"
                        );
                    }
                }

                if (count($arAgendamentosPendentes) > 0) {
                    foreach ($arAgendamentosPendentes as $agendamentosPendente) {
                        $vistoriaEmpresa->update(
                            array('id_empresa' => $idEmpresa),
                            "id_vistoria = '" . $agendamentosPendente['id_vistoria'] . "'"
                        );
                    }
                }
            }

            /*
             * RELACIONA O PROCESSO DE SINISTRO À EMPRESA SELECIONADA
             */
            $processoEmpresa->setEmpresaByProcesso($idProcesso, $idEmpresa);

            /*
             * RELACIONA AVISO DE SINISTRO COM VISTORIAS
            */
            $arrayCoberturasAviso = $avisoSinistro->getCoberturasByAviso($idProposta, $idAviso);
            if (count($arrayCoberturasAviso) > 0) {

                $vistoriaCobertura = new Sistema_Model_VistoriasCoberturas();
                $vistoriaAviso = new Sinistro2_Model_VistoriasAvisos();

                $flAgendamentoPreliminar = true;
                $flAgendamentoFinal = true;
                $coberturaVistoriaPrevia = false;

                foreach ($arrayCoberturasAviso as $item) {
                    $idCobertura = $item['id_cobertura'];
                    $flVistoriaPreliminar = $item['fl_vistoria_preliminar'];

                    if ($item['fl_vistoria_previa']) {
                        $coberturaVistoriaPrevia = true;
                    }

                    if ($flVistoriaPreliminar) {
                        $rs = $vistoriaCobertura->getVistoriaPreliminarByCobertura(
                            $idProcesso,
                            $idCobertura,
                            $dtSinistro->toString('yyyy-MM-dd HH:mm')
                        );

                        if (!empty($rs)) {
                            foreach ($rs as $it) {
                                if ($it['dt_vistoria_laudo']) {
                                    $idVistoriaPreliminar = $it['id_vistoria'];

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

                                    $vistoriaAviso->save($item);

                                    $flAgendamentoPreliminar = false;
                                }
                            }
                        }

                        $rs = $vistoriaCobertura->getVistoriaByCoberturaComVistPreliminar(
                            $idProcesso,
                            $idCobertura,
                            $dtSinistro->toString('yyyy-MM-dd HH:mm')
                        );

                        if (!empty($rs)) {
                            foreach ($rs as $it) {
                                if ($it['dt_vistoria_laudo']) {
                                    $idVistoriaFinal = $it['id_vistoria'];

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

                                    $vistoriaAviso->save($item);

                                    $flAgendamentoFinal = false;
                                }
                            }
                        }
                    } 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->save($item);

                                $flAgendamentoFinal = false;
                            }
                        }
                    }
                }

                /*
                 * Em caso de replantio e tendo necessidade de aviso prévio na cobertura, cria um aviso prévio para
                 * a empresa relacionada
                 */
                if ($dadosAviso['fl_ocorrencia_replantio']) {
                    $modelVP = new Seguro_Model_VistoriaPrevia;
                    $idVistorias = $modelVP->getIdVistorias($idProposta);

                    $dados = array();

                    if ($idVistorias) {
                        foreach ($idVistorias as $idVistoria) {
                            $return = $modelVP->find($idVistoria)->current();

                            if (Agro_Util::status('TRANSMITIDA', 'VP') == $return->id_status ||
                                Agro_Util::status('AGUARDANDO_VISTORIA', 'VP') == $return->id_status ||
                                Agro_Util::status('ENC', 'VP') == $return->id_status) {
                                $dados['id_propostas'][] = array(
                                    'id_proposta' => $idProposta,
                                    'id_proposta_vistoria' => $return->id
                                );
                            }
                        }
                    } else {
                        $dados['id_propostas'][] = $idProposta;
                    }

                    if (count($dados['id_propostas']) > 1) {
                        $vistoriaMaisAtual = null;

                        foreach ($dados['id_propostas'] as $propostaVistoria) {
                            if (empty($vistoriaMaisAtual)) {
                                $vistoriaMaisAtual = $propostaVistoria;
                                continue;
                            }

                            if (
                                $propostaVistoria['id_proposta_vistoria'] > $vistoriaMaisAtual['id_proposta_vistoria']
                            ) {
                                $vistoriaMaisAtual = $propostaVistoria;
                            }
                        }

                        unset($dados['id_propostas']);
                        $dados['id_propostas'][] = $vistoriaMaisAtual;
                    }

                    $dados['id_empresa'] = $idEmpresa;
                    $dados['ds_motivo'] = 'Aviso de sinistro com cobertura adicional de replantio';
                    $dados['fl_vistoria_replantio'] = true;

                    $modelVP->save($dados, true);
                }
            }

            /*
             * 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();
            $opcoesAgendamento = $modelAgendamento->verificaOpcoesAgendamento($idAviso);

            foreach ($opcoesAgendamento as $arOpcoesAgendamento) {
                //INSERE AGENDAMENTO PARA VISTORIA PRELIMINAR
                if ($arOpcoesAgendamento['fl_vistoria_preliminar'] == true && $flAgendamentoPreliminar == true) {
                    $dataAgendamento['ds_tipo'] = 'PRELIMINAR';
                    $dataAgendamento['id_cobertura'] = $arOpcoesAgendamento['id_cobertura'];
                    $dataAgendamento['id_processo'] = $idProcesso;
                    $dataAgendamento['id_empresa'] = $post['id_empresa'];

                    $modelAgendamento->abreAgendamento($dataAgendamento, $idAviso);
                }

                //INSERE AGENDAMENTO PARA VISTORIA FINAL
                if ($arOpcoesAgendamento['fl_vistoria_final'] == true && $flAgendamentoFinal == true) {
                    $dataAgendamento['ds_tipo'] = 'FINAL';
                    $dataAgendamento['id_cobertura'] = $arOpcoesAgendamento['id_cobertura'];
                    $dataAgendamento['id_processo'] = $idProcesso;
                    $dataAgendamento['id_empresa'] = $post['id_empresa'];

                    $modelAgendamento->abreAgendamento($dataAgendamento, $idAviso);
                }
            }

            /*
             * COMUNICA DIRETORIA VIA EMAIL SOBRE AVISOS ACEITO PARA PROPOSTAS COM LMGA > 1MILHÃO
            */
            if ($dadosAviso['vl_lmga'] > 1000000) {
                $this->sendMailAceitacaoAvisoLMGA($idAviso);
            }

            /*
             * ENVIA EMAIL PARA RESPONSAVEL PELO DPTO DO SINISTRO COMUNICANDO SOBRE A ACEITAÇÃO DE NOVO AVISO
             */
            Agro_Util::generateAtscript("sendmailaceitacaoaviso.php", array($idAviso));
            $db->commit();

            if (!$hasVistoriaPendente) {
                $this->view->dadosGravados = 'S';
            }
        } catch (Exception $e) {
            $db->rollback();
            if (!$hasVistoriaPendente) {
                $this->view->dadosGravados = 'N';
            }
            Agro_Util::zf_debug($e->getMessage());
        }
    }

	public function recusarAviso(){

		$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
		$Db->beginTransaction();
		
		$params = $this->getRequest()->getParams();

		try{
			$ModelAvisoRecusa   = new Sinistro2_Model_AvisosRecusas();
			$ModelAvisoSinistro = new Sinistro2_Model_AvisosSinistro();

			/*
			 * COMUNICA CANCELAMENTO À SEGURADORA
			 */
			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  = $this->montaXMLTransmissao($params["id_aviso"], $params['id_tipo_recusa']);

			$params = array('Servico' => 'InserirMovimentoSinistro', 'conteudoXML' => $mysoapmsg);

			$dtEnvio = date('Y-m-d H:i:s');
			$result = $client->call('ExecutarRow', array($params));
			$dtRetorno = date('Y-m-d H:i:s');
			
			$propostas = new Seguro_Model_Propostas();
			
			if ($client->getError()) {
			    $propostas->gravaLogTransmissao(
			        array(
			            'id_proposta'        => $this->getRequest()->getParam('idProposta'),
			            'ds_retorno'         => "Recusa de Aviso de Sinistro: ".$params['id_aviso']." - ".utf8_encode($client->getError()),
			            'fl_sucesso'         => 'f',
			            'ds_tipo_transmissao' => 'InserirMovimentoSinistro - Recusa de Aviso de Sinistro',
			            'ds_xml_transmissao' => $mysoapmsg,
						'dt_envio'           => $dtEnvio,
						'dt_retorno'         => $dtRetorno,
			        )
			    );
			    
			    echo '<script>alert("Atenção! Não foi possível transmitir a Recusa à Seguradora.\nFavor verificar logs de transmissão.");</script>';
			    $this->view->dadosGravados = 'N';
			} else {
			    $result_xml = simplexml_load_string(utf8_encode($result['ExecutarRowResult']), 'SimpleXMLElement', LIBXML_NOCDATA);

			    if ($result_xml->erro->attributes()->cd_retorno > 0) {
			        
			        $propostas->gravaLogTransmissao(
			            array(
			                'id_proposta'        => $this->getRequest()->getParam('idProposta'),
			                'ds_retorno'         => $result_xml->erro->attributes()->nm_retorno,
			                'fl_sucesso'         => 'f',
			                'ds_tipo_transmissao' => 'InserirMovimentoSinistro - Recusa de Aviso de Sinistro',
			                'ds_xml_transmissao' => $mysoapmsg,
							'dt_envio'           => $dtEnvio,
							'dt_retorno'         => $dtRetorno,
			            )
			        ); 
			        
			        echo '<script>alert("Atenção! Não foi possível transmitir a Recusa à Seguradora.\nFavor verificar logs de transmissão.");</script>';
			        $this->view->dadosGravados = 'N';
			    } else {
			        /*
			         * ATUALIZA STATUS DO AVISO DE SINISTRO
			         */
			        $Aviso = $ModelAvisoSinistro->find($this->getRequest()->getParam('id_aviso'))->current();
			        $Aviso->id_status = Agro_Util::status('RECUSADO', 'SA');
			        
			        $Aviso->save();
			        
			        /*
			         * SALVA MOTIVO DA RECUSA DO AVISO DE SINISTRO
			         */
			        $AvisoRecusa = $ModelAvisoRecusa->createRow();
			        $AvisoRecusa->id_aviso         = $this->getRequest()->getParam('id_aviso');
			        $AvisoRecusa->ds_motivo_recusa = $this->getRequest()->getParam('motivo_recusa');
			        $AvisoRecusa->id_tipo_recusa   = $this->getRequest()->getParam('id_tipo_recusa');
			        $AvisoRecusa->save();
			        
			        /*
			         * ALTERA O STATUS DO PROCESSO PARA CANCELADO SE ELE NÃO POSSUIR NENHUM AVISO DE SINISTRO ABERTO
			         */
			        if($params['id_processo']){
			            $modelProcesso    = new Sinistro2_Model_Processos();
			            $modelProcessoObs = new Sinistro2_Model_ProcessosObservacoes();
			            
			            $nrAvisosAbertos = $modelProcesso->getAvisosProcesso($this->getRequest()->getParam('idProposta'));
			            $Processo        = $modelProcesso->find($this->getRequest()->getParam('id_processo'))->current();
			            
			            if ($Processo && count($nrAvisosAbertos) == 0){
			                $Processo->id_status = Agro_Util::status("CANCELADO", "SP");
			                
			                $ProcessoObs = $modelProcessoObs->createRow();
			                $ProcessoObs->id_processo = $Processo->id;
			                $ProcessoObs->ds_observacao = "Processo <b>CANCELADO</b>. <b>Motivo: </b>No momento, não há avisos abertos para este Processo.";
			                
			                $Processo->save();
			                $ProcessoObs->save();
			            }
			        }
			        
			        $Mail = new Agro_Utils_Mail();
			        $Mail->comunicaRecusaAviso($AvisoRecusa, $Aviso->proposta());

			        $propostas->gravaLogTransmissao(
			            array(
			                'id_proposta'        => $this->getRequest()->getParam('idProposta'),
			                'ds_retorno'         => "Recusa de Aviso de Sinistro: ".$this->getRequest()->getParam('id_aviso'),
			                'fl_sucesso'         => 't',
			                'ds_tipo_transmissao' => 'InserirMovimentoSinistro - Recusa de Aviso de Sinistro',
			                'ds_xml_transmissao' => $mysoapmsg,
							'dt_envio'           => $dtEnvio,
							'dt_retorno'         => $dtRetorno,
			            )
			        );

                    (new Sinistro2_Service_AvisoSinistro())->enviarEmailRecusa(
                        (int)$this->getRequest()->getParam('id_aviso')
                    );
			        
			        echo '<script>alert("Recusa transmitida com sucesso à Seguradora.");</script>';
			        $this->view->dadosGravados = 'S';
 			     }
			}
			
			$Db->commit();
			
		} catch (Exception $e) {
			dump($e->getMessage());
			$Db->rollback();
			$this->view->dadosGravados = 'N';
		}
	}

	public function montaXMLTransmissao($id_aviso, $id_tipo_recusa) {
	    $Model          = $this->getModel();
	    $rsAviso        = $Model->getAvisoReserva($id_aviso);
	    $TipoRecusa     = new Atendimento_Model_TipoRecusaSinistro();
	    $modelPropostas = new Seguro_Model_Propostas();
	    
        if (!$rsAviso) {
            throw new Exception("Aviso de Sinistro (Nº ".$id_aviso.") não transmitido para a seguradora!");
        }

	    $proposta       = $modelPropostas->find($rsAviso['id_proposta'])->current();
	    $Proponente     = $proposta->proponente();
	    
	    $rsTipoRecusa = $TipoRecusa->getRecusaSinistroById($id_tipo_recusa);
	    	    
	    $ds_pessoa_sinistrada = str_replace("&", "e", $Proponente['ds_nome_proponente']);
	    $cpf_cnpj_sinistrada  = str_replace('.', '', str_replace('/', '', str_replace('-', '', $Proponente['cpf_cnpj'])));
	    if($Proponente['tp_pessoa'] == 'F') {
	        $tp_pessoa_sinistrada = 1;
	    } else {
	        $tp_pessoa_sinistrada = 2;
	    }
	    
	    $xml ="
		<i4proerp>
			<insereMovimentoSinistroRural>
				<insereMovimento>
					<apolice>".$proposta->nr_apolice."</apolice>
					<dtMovimento></dtMovimento>
					<endosso>".$proposta->ds_identificador_seguradora."</endosso>
					<sinistro>".$rsAviso['cd_identificador_seguradora']."</sinistro>
					<evento>10105</evento>
					<cobertura></cobertura>
					<valorOperacao></valorOperacao>
					<observacao>Encerramento Sinistro</observacao>
					<tipoMovimento>".$rsTipoRecusa['id_tipo_recusa_seguradora']."</tipoMovimento>
					<nomeFavorecido></nomeFavorecido>
					<tipoPessoaFavorecido></tipoPessoaFavorecido>
					<nrCnpjCpfFavorecido></nrCnpjCpfFavorecido>
					<dtNascimentoFavorecido></dtNascimentoFavorecido>
					<sexoFavorecido>1</sexoFavorecido>
					<nrDocumentoFavorecido></nrDocumentoFavorecido>
					<dtAgendamento></dtAgendamento>
					<nrCi></nrCi>
					<ajusta></ajusta>
					<descontaPremioPendente></descontaPremioPendente>
					<liberaConsistencias></liberaConsistencias>
					<tributaIndenizacao></tributaIndenizacao>
					<meioPagamento></meioPagamento>
					<nrBanco></nrBanco>
					<nrAgencia></nrAgencia>
					<nrDacAgencia></nrDacAgencia>
					<nrContaCorrente></nrContaCorrente>
					<nrDacContaCorrente></nrDacContaCorrente>
					<nrCheque></nrCheque>
					<nrEventoSequenciaEstorno></nrEventoSequenciaEstorno>
					<tipoDocumento></tipoDocumento>
					<serieDocumento></serieDocumento>
					<nrDocumento></nrDocumento>
					<dtNotaFiscal></dtNotaFiscal>
					<encerraSinistro>1</encerraSinistro>
				</insereMovimento>
			</insereMovimentoSinistroRural>
		</i4proerp>";
	    
	    return $xml;
	}
	
	public function sendMailAceitacaoAviso($idAviso){

		$AvisoSinistro = new Sinistro2_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_mae']} \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();
				Agro_Util::setNotificacao(
					"Erro ao enviar aviso de sinistro {$aviso['id']} ({$aviso['id_proposta_mae']})",
					$e,
					'tonismar.bernardo@agrobrasilseguros.com.br'
				);
                return false;
            }


		}else{
			return false;
		}
	}

	/**
	 * Função chamada via CURL para não travar o processo enquando os e-mail não são enviados
	 */
	public function sendmailaceitacaoavisoAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		$result = array('status' => false);

		if ($this->getRequest()->getParam('id_aviso')) {
			if ($this->getRequest()->getParam('tipo') == 'LMGA'){
				$result = $this->sendMailAceitacaoAvisoLMGA($this->getRequest()->getParam('id_aviso'));
			} else {
				$result = $this->sendMailAceitacaoAviso($this->getRequest()->getParam('id_aviso'));
			}
		}
		
		$this->getResponse()->setBody(Zend_Json::encode($result));
	}

	public function sendMailAceitacaoAvisoLMGA($idAviso){

		$AvisoSinistro = new Sinistro2_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',
              'marcelo.tonin@agrobrasilseguros.com.br',
              'diego.campos@agrobrasilseguros.com.br',
              'gabriel.gomes@agrobrasilseguros.com.br',
              'ivanir.ceolin@essor.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 Sinistro2_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->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();

		$data = array();

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

		$VistoriaAviso = new Sinistro2_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->form = new Sinistro2_Form_AceitacaoAviso();
		$this->view->params = $this->getRequest()->getParams();
	 }

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

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

		try {
			$params = $this->getRequest()->getParams();
			
			$Model = new Sinistro2_Model_AvisosSinistro();
			$ModelLog = new Sinistro2_Model_AvisosLogMudancaStatus();
			$modelProcesso = new Sinistro2_Model_Processos();
			$modelProcessoObs = new Sinistro2_Model_ProcessosObservacoes();

			$Aviso = $Model->find($params["id_aviso"])->current();
			
			/*
			 * COMUNICA CANCELAMENTO À SEGURADORA
			 */
			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  = $this->montaXMLTransmissao($params["id_aviso"], $params["id_tipo_recusa"]);
			
			$paramsWs = array('Servico' => 'InserirMovimentoSinistro', 'conteudoXML' => $mysoapmsg);
			
			$dtEnvio = date('Y-m-d H:i:s');
			$rs = $client->call('ExecutarRow', array($paramsWs));
			$dtRetorno = date('Y-m-d H:i:s');
			
			$propostas = new Seguro_Model_Propostas();
			if ($client->getError()) {
			    $propostas->gravaLogTransmissao(
			        array(
			            'id_proposta'        => $Aviso->id_proposta,
			            'ds_retorno'         => "Cancelamento de Aviso de Cancelamento: ".$params['id_aviso']." - ".utf8_encode($client->getError()),
			            'fl_sucesso'         => 'f',
			            'ds_tipo_transmissao' => 'InserirMovimentoSinistro - Recusa de Aviso de Sinistro',
			            'ds_xml_transmissao' => $mysoapmsg,
						'dt_envio'           => $dtEnvio,
						'dt_retorno'         => $dtRetorno,
			        )
			        );
			    
			    echo '<script>alert("Atenção! Não foi possível transmitir o Cancelamento à Seguradora.\nFavor verificar logs de transmissão.");</script>';
			    $this->view->dadosGravados = 'N';
			} else {
			    $result_xml = simplexml_load_string(utf8_encode($rs['ExecutarRowResult']), 'SimpleXMLElement', LIBXML_NOCDATA);

				if ($result_xml->erro->attributes()->cd_retorno > 0) {
			        
			        $propostas->gravaLogTransmissao(
			            array(
			                'id_proposta'        => $Aviso->id_proposta,
			                'ds_retorno'         => $result_xml->erro->attributes()->nm_retorno,
			                'fl_sucesso'         => 'f',
			                'ds_tipo_transmissao' => 'InserirMovimentoSinistro - Recusa de Aviso de Sinistro',
			                'ds_xml_transmissao' => $mysoapmsg,
							'dt_envio'           => $dtEnvio,
							'dt_retorno'         => $dtRetorno,
			            )
			            );
			        
			        echo '<script>alert("Atenção! Não foi possível transmitir o Cancelamento à Seguradora.\nFavor verificar logs de transmissão.");</script>';
			        $this->view->dadosGravados = 'N';
			    } else {

			        $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){
						if ($params["id_tipo_recusa"])  {
							$tipoRecusa = new Atendimento_Model_TipoRecusaSinistro();
							$tipoRecusaObj = $tipoRecusa->getRecusaSinistroById($params["id_tipo_recusa"]);
						}

						$motivo = $tipoRecusaObj['ds_tipo_recusa'] ? $tipoRecusaObj['ds_tipo_recusa'] : $params["ds_motivo"];
			            $ProcessoObs = $modelProcessoObs->createRow();
			            $ProcessoObs->id_processo = $Processo->id;
			            $ProcessoObs->ds_observacao = "Aviso n° <b>$Aviso->id</b> CANCELADO.<br><b>Motivo</b>: {$motivo}";
			            
			            $ProcessoObs->save();
			        }
			        
			        $Aviso->save();
			        $Log->save();
			        
			        $Mail = new Agro_Utils_Mail();
			        $Mail->comunicaCancelamentoAviso($Log, $Aviso->proposta(), $params["id_tipo_recusa"]);
			        
			        $propostas->gravaLogTransmissao(
			            array(
			                'id_proposta'        => $Aviso->id_proposta,
			                'ds_retorno'         => "Cancelamento de Aviso de Sinistro: ".$this->getRequest()->getParam('id_aviso'),
			                'fl_sucesso'         => 't',
			                'ds_tipo_transmissao' => 'InserirMovimentoSinistro - Cancelamento de Aviso de Sinistro',
			                'ds_xml_transmissao' => $mysoapmsg,
							'dt_envio'           => $dtEnvio,
							'dt_retorno'         => $dtRetorno,
			            )
			        );
			        
			        $result["status"] = true;
			        $result["message"] = "Aviso cancelado com sucesso.";
			        
			        $this->view->dadosGravados = 'S';
			    }
			}

			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" => "Operação realizada com sucesso.", "information" => "");
        $params = $this->getRequest()->getParams();

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

        if ($params["id_aviso"]) {
            try {
                $Model = new Sinistro2_Model_AvisosSinistro();
                $ModelAgendamento = new Sistema_Model_Agendamentos();
				$modelAvisosSinistro = new Sinistro2_Model_AvisosSinistro();

                $avisosDispensar = is_array($params["id_aviso"]) ? $params["id_aviso"] : [$params["id_aviso"]];
                $avisos_utilizados = array();
                $avisos_dispensados = 0;
                $temOutrosAvisos = false;

                foreach ($avisosDispensar as $id_aviso) {
                    $Aviso = $Model->find($id_aviso)->current();
                    $Processo = (new Sinistro2_Model_Processos())->fetchRow("id_proposta = $Aviso->id_proposta");
                    $vistoriasPreliminaresVinculadas = $Aviso->preliminaresVinculadas();
                    $vistoriasPreliminaresIndisponiveis = array_filter($vistoriasPreliminaresVinculadas, function($valor) {
                        return !in_array(
                          $valor['id_status'],
                          [
                            Sistema_Model_Status::LAUDOS_PRELIMINARES_PENDENTE_LAUDO_PRELIMINAR,
                            Sistema_Model_Status::LAUDOS_PRELIMINARES_PENDENTE_ENVIO
                          ]
                        );
                    });

                    if (!empty($vistoriasPreliminaresIndisponiveis)) {
                        $avisos_utilizados[] = $Aviso->id;
                    } else {
                        $modelVistoriasAvisos = new Sinistro2_Model_VistoriasAvisos();
                        $retornoOutrosAvisos = $modelVistoriasAvisos->temOutrosAvisosMesmaVistoriaPreliminarByAviso($id_aviso);
                        $observacao = "Vistoria Preliminar do Aviso <b>$Aviso->id</b>: DISPENSADA. <b>Motivo</b>: " . $params["ds_motivo_dispensa"];

                        if ($params["fl_dispensa_preliminar"] === '0') {
                            $observacao = "Vistoria Preliminar do Aviso <b>$Aviso->id</b>: CANCELAMENTO DA DISPENSA DE PRELIMINAR. <b>Motivo</b>: " . $params["ds_motivo_dispensa"];
                        }

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

						$modelAvisosSinistro->desvincularVistorias($Aviso->id);

                        if (!empty($retornoOutrosAvisos)) {
                            $temOutrosAvisos = true;
                            $idVistoria = $retornoOutrosAvisos[0]['id_vistoria'];
                            $tipoVistoria = $retornoOutrosAvisos[0]['id_tipo'];

                            if ((int) $tipoVistoria === Sistema_Model_TipoVistoria::FINAL) {
                                $ultimaAgendamento = $this->buscaUltimoAgendamento($Aviso, $Processo, false);

                                if (!empty($ultimaAgendamento) && (int) $ultimaAgendamento['id_status'] === Sistema_Model_Status::AGENDAMENTO_AGUARDANDO_DATA) {
                                    $rowAgendamento = $ModelAgendamento->getRow($ultimaAgendamento['id']);
                                    $rowAgendamento['id_status'] = Sistema_Model_Status::AGENDAMENTO_AGENDAMENTO_CANCELADO;
                                    $rowAgendamento->save();
                                }
                            }

                            $result['message'] = "Aviso desvinculado com sucesso!";
                        } else {
                            $temOutrosAvisos = false;
                            $idVistoria = !empty($vistoriasPreliminaresVinculadas) ? $vistoriasPreliminaresVinculadas[0]['id_vistoria'] : null;
                            $arAgendamento = $this->buscaUltimoAgendamento($Aviso, $Processo, $params["fl_dispensa_preliminar"] === '0', (int) $idVistoria);

                            if (!empty($arAgendamento)) {
                                $ModelAgendamento->save([
                                  'id'           => $arAgendamento['id'],
                                  'id_vistoria'  => $arAgendamento['id_vistoria'],
                                  'id_cobertura' => $arAgendamento['id_cobertura'],
                                  'id_processo'  => $arAgendamento['id_processo'],
                                  'id_tipo'      => Sistema_Model_TipoVistoria::PRELIMINAR,
                                  'id_status'    => $arAgendamento['id_status'],
                                ]);
                            }
                        }

                        $this->lancarObservacaoProcesso($Processo->id, $observacao);

                        $avisos_dispensados += 1;
                    }

                    if (count($avisos_utilizados) > 0) {
                        $result["message"] = "Os avisos " . implode(", ", $avisos_utilizados) . " não podem ter a preliminar dispensada por já estarem com a vistoria digitada.";

                        if (count($avisos_utilizados) === 1) {
                            $result["message"] = "O aviso " . implode(", ", $avisos_utilizados) . " não pode ter a preliminar dispensada por já estar com a vistoria digitada.";
                        }
                    }
                }

                if ($avisos_dispensados > 0) {
                    if (!$temOutrosAvisos) {
                        $result['message'] = "Operação realizada com sucesso.";
                    }
					
                    Zend_Db_Table::getDefaultAdapter()->commit();
                } else {
                    $result["status"] = false;
                    Zend_Db_Table::getDefaultAdapter()->rollback();
                }
            } 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 Sinistro2_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 Sinistro2_Model_Ferramentas();
        $params = $this->getRequest()->getParams();

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

            if (empty($params["id_aviso"])) {
                throw new Exception('Nenhum aviso foi selecionado.');
            }

            $Model = new Sinistro2_Model_AvisosSinistro();

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

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

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

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

	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();

			$ProcessoModel = new Sinistro2_Model_Processos();
			$idProcesso = $ProcessoModel->getProcessoByAviso((int) $params["id_aviso"]);
			$observacao = "Aviso " . $params["id_aviso"] . " foi desvinculado da vistoria " . $params["id_vistoria"] . ".";

			$this->lancarObservacaoProcesso($idProcesso, $observacao);
			$this->desvincularVistoria((int) $params["id_aviso"], (int) $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();
		$array_forward = array();
		$return['status'] = true;

		$modelProcessos = new Sinistro2_Model_Processos();
		$ModelAvisos = new Sinistro2_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
			);

			//só aceita encaminhar em lote caso não existe outra empresa vinculado ao processo da proposta.
			//Rúbia na solicitação 2992 pediu para esse tratamento ser desconsiderado )
			//Na solicitação 3858 Rúbia pediu novamente para esse tratamento ser considerado.
			if(!$ModelAvisos->checkEncaminhamentoEmpresaByProcesso($processo,$empresa)){
				$this->enviarAviso($dados);
			} else {
				if (!in_array($aviso, $array_forward)){
					array_push($array_forward, $aviso);
				}
			}
		}

		if (count($array_forward)>0) {
			$msg_forward = implode(',', $array_forward);
			$return['status'] = false;
			$return['avisos'] = $msg_forward;
		}

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

	public function listAction()
    {
        
        $this->getHelper('layout')->disableLayout();

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

        if (array_key_exists('show_paginacao', $this->getRequest()->getParams())) {
            $this->_paginator = $this->getRequest()->getParam('show_paginacao');
        }

        $where = $this->getFilterGerenciaAviso();
       
        $model = $this->getModel();
        $ordenacao = 'pp.id_proposta_mae desc, a.id desc';
    
        if ($this->getRequest()->getParam("o")) {
            $ordenacao = trim($this->getRequest()->getParam("o") .' '. $this->getRequest()->getParam("s"));
        }

        if ($this->getRequest()->getParam("s")) {
            $this->view->orderDirection = $this->getRequest()->getParam("s");
        }

        $rs = $model->listGerenciaAvisos($where, $ordenacao);
        
        
        if ($this->_paginator) {
            $recordsPerPage = ($this->recordsPerPage ? $this->recordsPerPage :  RECORDS_PER_PAGE);
            $this->view->paginator = $model->getPaginator($rs, $this->getRequest()->getParam('page'), $recordsPerPage, $this->_paginator);
        } else {
            $this->view->paginator = $model->getPaginator($rs, 1, null, false);
        }
	}

	public function listavisosperitoAction(){

		parent::listAction();
	}

	public function encaminharresponsavelAction(){

		$this->isAjax();
		$params = $this->getRequest()->getParams();
		$modelProcessos = new Sinistro2_Model_Processos();
		$ModelAvisos = new Sinistro2_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 Sinistro2_Model_AvisosSinistro();
		$this->getResponse()->setBody(Zend_Json::encode($Aviso->countNewAvisos()));
	}

	public function checkencaminhamentoempresaAction() {
		$this->isAjax();
		$result['status'] = false;

		$ModelAvisos = new Sinistro2_Model_AvisosSinistro();
		if($ModelAvisos->checkEncaminhamentoEmpresaByProcesso($this->getRequest()->getParam('id_processo'),$this->getRequest()->getParam('id_empresa'))){
			$result['status'] = true;
		}

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

    private function desvincularVistoria(int $idAviso, int $idVistoria)
    {
        $user = Zend_Auth::getInstance()->getIdentity();

        Zend_Db_Table::getDefaultAdapter()->query("delete from sinistro.vistorias_avisos where id_aviso = {$idAviso} and id_vistoria = {$idVistoria}");
        Zend_Db_Table::getDefaultAdapter()->query("insert into log.log_sinistro_processo (id_usuario_criacao, ds_log) values ({$user->id},'Aviso {$idAviso} foi desvinculado da vistoria {$idVistoria}')");
    }

    private function lancarObservacaoProcesso(int $idProcesso, string $observacao)
    {
        $modelProcessosObservacoes = new Sinistro2_Model_ProcessosObservacoes();
        $rowProcessosObservacoes = $modelProcessosObservacoes->createRow();
        $rowProcessosObservacoes->id_processo = $idProcesso;
        $rowProcessosObservacoes->ds_observacao = $observacao;
        $rowProcessosObservacoes->save();
    }

    public function getFilterGerenciaPastas()
    {

        $where = array();
        $filter = array();

        if ($this->getRequest()->getParam('tipo_pesquisa') && $this->getRequest()->getParam('valor_pesquisa')) {
            $filter['operator'] = '=';
            $filter['value'] = trim($this->getRequest()->getParam('valor_pesquisa'));

            switch ($this->getRequest()->getParam('tipo_pesquisa')) {
                case 'id_proposta':
                    $filter['field'] = 'a.id_proposta';
                    break;
                case 'nr_apolice':
                    $filter['field'] = 'pp.nr_apolice';
                    break;
                case 'ds_nome_proponente':
                    $filter['field'] = 'pppr.ds_nome_proponente';
                    $filter['operator'] = 'ilike';
                    $filter['value'] = "'%" . trim($this->getRequest()->getParam('valor_pesquisa')) . "%'";
                    break;
                case 'id':
                    $filter['field'] = 'a.id';
                    break;
            }

            $where[] = $filter;
        }

        if ($this->getRequest()->getParam('id_safra') && $this->getRequest()->getParam('id_safra') != 'TODAS') {
            $tipo_pesquisa = $this->getRequest()->getParam('tipo_pesquisa');
            if(strcmp($tipo_pesquisa, 'id_proposta') != 0){
                $filter['field'] = 'pd.id_safra';
                $filter['operator'] = '=';
                $filter['value'] = $this->getRequest()->getParam('id_safra');
                $where[] = $filter;
            }else if(!$this->getRequest()->getParam('valor_pesquisa')){
                $filter['field'] = 'pd.id_safra';
                $filter['operator'] = '=';
                $filter['value'] = $this->getRequest()->getParam('id_safra');
                $where[] = $filter;
            }

        }

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

        if ($this->getRequest()->getParam('fl_pasta_aberta')) {
            $filter['field'] = 'pc.fl_pasta_aberta';
            $filter['operator'] = '=';

            switch($this->getRequest()->getParam('fl_pasta_aberta')){
                case 1:
                    $filter['value'] = 'true';
                    break;
                case 2:
                    $filter['value'] = 'false';
                    break;
            }

            $where[] = $filter;
        }

        return $where;
    }

    public function indexpastasAction()
    {
       
        $this->view->title = 'Sinistro » Avisos » Gerência de Pastas';
        $this->view->form = new Sinistro2_Form_GerenciaPastas();

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

        $this->view->formPesquisaProposta = $FormPesquisa;
    }

    public function listpastasAction()
    {
        $this->view->title = 'Sinistro » Avisos » Gerência de Pastas';
        $this->getHelper('layout')->disableLayout();

        $this->view->form = new Sinistro2_Form_GerenciaPastas();
        if (array_key_exists('show_paginacao', $this->getRequest()->getParams())) {
            $this->_paginator = $this->getRequest()->getParam('show_paginacao');
        }

        $where = $this->getFilterGerenciaPastas();
        
        $model = new Sinistro2_Model_AvisosSinistro();
        $rs = $model->listGerenciaPastas($where);
       
        if ($this->_paginator) {
            $recordsPerPage = ($this->recordsPerPage ? $this->recordsPerPage :  RECORDS_PER_PAGE);
            $this->view->paginator = $model->getPaginator($rs, $this->getRequest()->getParam('page'), $recordsPerPage, $this->_paginator);
        } else {
            $this->view->paginator = $model->getPaginator($rs, 1, null, false);
        }
    }

    public function getFilterGerenciaAviso()
    {
        $where = array();
        $filter = array();
        $user = Zend_Auth::getInstance()->getIdentity();

        if ($this->getRequest()->getParam('tipo_pesquisa') && $this->getRequest()->getParam('valor_pesquisa')) {
            $filter['operator'] = '=';
            $filter['value'] = trim($this->getRequest()->getParam('valor_pesquisa'));

            switch ($this->getRequest()->getParam('tipo_pesquisa')) {
                case 'id_proposta':
                    $filter['field'] = 'spe.id_proposta';
                    break;
                case 'nr_apolice':
                    $filter['field'] = 'pp.nr_apolice';
                    break;
                case 'ds_nome_proponente':
                    $filter['field'] = 'pppr.ds_nome_proponente';
                    $filter['operator'] = 'ilike';
                    $filter['value'] = "'%" . trim($this->getRequest()->getParam('valor_pesquisa')) . "%'";
                    break;
                case 'id':
                    $filter['field'] = 'a.id';
                    break;
            }

            $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') && $this->getRequest()->getParam('id_safra') != 'TODAS') {
            $tipo_pesquisa = $this->getRequest()->getParam('tipo_pesquisa');
            if(strcmp($tipo_pesquisa, 'id_proposta') != 0 ){
                $filter['field'] = 'id_safra';
                $filter['operator'] = '=';
                $filter['value'] = $this->getRequest()->getParam('id_safra');
                $where[] = $filter;
            }elseif(!$this->getRequest()->getParam('valor_pesquisa')){
                $filter['field'] = 'id_safra';
                $filter['operator'] = '=';
                $filter['value'] = $this->getRequest()->getParam('id_safra');
                $where[] = $filter;
            }
        }

        if ($this->getRequest()->getParam('id_status')) {
            $filter['field'] = 'a.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('id_evento')) {
            $filter['field'] = 'a.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('check_estados')) {
            $filter['field'] = 'id_estado';
            $filter['operator'] = 'in';
            $filter['value'] = "(" . implode(', ', $this->getRequest()->getParam('check_estados')) . ")";
            $where[] = $filter;
        }

        if ($this->getRequest()->getParam('check_municipios')) {
            $filter['field'] = 'ppr.id_municipio';
            $filter['operator'] = 'in';
            $filter['value'] = "(" . implode(', ', $this->getRequest()->getParam('check_municipios')) . ")";
            $where[] = $filter;
        }

        if ($user->tp_usuario == 'C') {
            $filter['field'] = 'spc.id_usuario';
            $filter['operator'] = '=';
            $filter['value'] = $user->id;
            $where[] = $filter;

        } elseif ($user->tp_usuario == 'P') {
            $filter['field'] = 'pp.id_usuario_criacao';
            $filter['operator'] = '=';
            $filter['value'] = $user->id;
            $where[] = $filter;

        } elseif ($user->tp_usuario == 'V' || $user->tp_usuario == 'M') {
            $filter['field'] = 'ppe.id_empresa';
            $filter['operator'] = '=';
            $filter['value'] = $user->id_empresa;
            $where[] = $filter;
        }

        /**
         * Não devem ser apresentados registros com status "Pendente - em análise" para o vistoriador, mesmo sendo um
         * aviso já vinculado a empresa dele
         */
        if (Sistema_Model_Usuarios::isTipoUsuarioVistoriador(Zend_Auth::getInstance()->getIdentity()->tp_usuario)) {
            $filter['field'] = 'a.id_status';
            $filter['operator'] = '<>';
            $filter['value'] = Sinistro2_Model_AvisosSinistro::ID_STATUS_SA_PENDENTE;
            $where[] = $filter;
        }

        return $where;
    }

    private function buscaUltimoAgendamento(Sinistro2_Model_Row_AvisoSinistro $aviso, Sinistro2_Model_Row_Processo $processo, $cancelamentoDispensaPreliminar, int $idVistoria = null)
    {
        $arCobertura = $this->getModel()->getCoberturasByAviso($aviso->id_proposta, $aviso->id);

        $id_cobertura_preliminar = null;
        foreach ($arCobertura as $key => $value) {
            if ($value['fl_vistoria_preliminar'] == true) {
                $id_cobertura_preliminar = $value['id_cobertura'];
                break;
            }
        }

        if (!empty($idVistoria)) {
            $arAgendamento = (new Sistema_Model_Agendamentos())->getAgendamentoByVistoria($idVistoria);
        } else {
            $arAgendamento = (new Sistema_Model_Agendamentos())->buscaUltimoAgendamentoPreliminar(
              $processo->id, $id_cobertura_preliminar, $cancelamentoDispensaPreliminar
            );
        }

        if ($arAgendamento['id_status'] === Sistema_Model_Status::AGENDAMENTO_AGENDAMENTO_CANCELADO && !$cancelamentoDispensaPreliminar) {
            return null;
        }

        if ($arAgendamento['id_status'] === Sistema_Model_Status::AGENDAMENTO_AGENDADO && empty($idVistoria)) {
            return null;
        }

        if (!empty($arAgendamento)) {
            $arAgendamento['id_processo'] = $processo->id;
            $arAgendamento['id_cobertura'] = $id_cobertura_preliminar;
            $arAgendamento['id_status'] = !$cancelamentoDispensaPreliminar ? Sistema_Model_Status::AGENDAMENTO_AGENDAMENTO_CANCELADO : Sistema_Model_Status::AGENDAMENTO_AGUARDANDO_DATA;
        }

        return $arAgendamento;
    }

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

        $retorno = ['erro' => false, 'mensagem' => ''];
        $dateTime = (new DateTimeImmutable())->modify('-1 days');

        if (!empty($this->getRequest()->getParam('data_sinistro'))) {
            $dateTime = (new DateTimeImmutable($this->getRequest()->getParam('data_sinistro')));
        }

        $row = $this->getModel()->getAvisosResumoDiario($dateTime)->toArray();
        $totalizadorAvisos = 0;

        try {
            $content = "<table border='1'>";
            $content .= "  <thead>";
            $content .= "    <tr>";
            $content .= "      <th>UF</th>";
            $content .= "      <th>Cultura</th>";
            $content .= "      <th>Produto</th>";
            $content .= "      <th>Evento</th>";
            $content .= "      <th>Total de Avisos</th>";
            $content .= "    </tr>";
            $content .= "  </thead>";

            foreach ($row as $dados) {
                $content .= "  <tbody>";
                $content .= "    <tr>";
                $content .= "      <td>{$dados['uf']}</td>";
                $content .= "      <td>{$dados['cultura']}</td>";
                $content .= "      <td>{$dados['produto']}</td>";
                $content .= "      <td>{$dados['evento']}</td>";
                $content .= "      <td align='center'>{$dados['total']}</td>";
                $content .= "    </tr>";
                $content .= "  </tbody>";

                $totalizadorAvisos += (int) $dados['total'];
            }

            $content .= "</table>";

            $content .= "<br><br>Total de avisos: {$totalizadorAvisos}<br>";
            $content .= "<br><br>ATENÇÃO: esta é uma mensagem automática. Por favor, não responda.<br>";
            $content .= '<div style="width: 100%; bottom: 0; text-align: center; border-top: dotted 1px; padding: 10px 0px 10px 0px">';
            $content .= 'AgroBrasil Operadora de Seguro Agrícola<br>';
            $content .= '<a href="http://www.agrobrasilseguros.com.br" target="_blank" style="margin-bottom: 10px;">www.agrobrasilseguros.com.br</a>';

            $mail = new Agro_Mail();
            $mail->addTo('tiago.zschornack@agrobrasilseguros.com.br');
            $mail->setBodyHtml($content);
            $mail->setSubject("AVISOS DE SINISTRO - Resumo Diário: {$dateTime->format('d/m/Y')}");
            $mail->send();
        } catch (Exception $e) {
            $retorno['erro'] = true;
            $retorno['mensagem'] = 'Erro ao enviar o e-mail.';
        }

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

    public function informacoesemailseguradoAction()
    {
        $this->getHelper('layout')->disableLayout();

        $informacoes = (new Sinistro2_Service_AvisoEmailSegurado())->buscarInformacoesEmailSegurado(
            (int)$this->getRequest()->getParam('id_aviso')
        );

        $this->view->informacoes = $informacoes instanceof Zend_Db_Table_Row ? $informacoes->toArray() : null;
    }
}
