<?php

class Seguro_VistoriapreviaempresaController extends Agro_Controller_Action {
	protected $_paginator = false;
	//codigo da empresa vinculada ao usuario corrente, preenchido no init e utilizado no form para
	//o combo de vistoriadores
	public $id_empresa;

	public function init() {
		$this->view->title = 'Seguro » Vistoria Prévia » Listagem';

		$Model = new Sistema_Model_Empresas();
		$this->id_empresa = $Model->getIdEmpresaUsuarioCorrente();
	}

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

	public function getForm() {
		$Form = new Seguro_Form_VistoriaPreviaMultiSelect();
		return $Form;
	}

	public function indexAction() {
		//formulário do filtro
		$this->view->form = $this->getForm();

		$Module = $this->getRequest()->getModuleName();
		$Controller = $this->getRequest()->getControllerName();
		$Session = new Zend_Session_Namespace('filtro');
		$params = $Session->{$Module}->{$Controller};

		if (is_object($this->view->form) && $params) {
			$this->view->form->populate($params);
		}
	}

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

		if ($this->getRequest()->getParam('id')) {
			$Safra = new Produto_Model_Safras();
			$produto = $Safra->getComboProdutoSafraRequest($this->getRequest()->getParam('id'));

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

	public function changestatusanaliseAction(){
		$this->isAjax();
		$dados = $this->getRequest()->getParams();
		$Model = $this->getModel();

		try {
			$Model->saveStatusAnalise($dados);

			$result = "Status alterado com sucesso!";
		} catch (Zend_Exception $ze) {
			$result = $ze->getMessage();
		} catch (Exception $e) {
			$result = "Erro ao alterar status!";
		}

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

	public function agendamentovistoriadorAction(){
		$this->isAjax(true);
		$dados = $this->getRequest()->getParams();
		$Model = $this->getModel();

		$dados = $Model->getDadosAgendamentoVistoriador($dados['id_proposta_vistoria']);

		$Form = $this->getForm();
		$this->view->form = $Form;
		$Form->populate($dados);
		$this->view->dados = $dados;
	}

	public function salvaagendamentovistoriadorAction(){
		$this->isAjax();
		$Model = $this->getModel();
		$ModelItensSegurados = new Seguro_Model_ItensSegurados();
		$ModelComplementos = new Seguro_Model_ItensSeguradosComplementos();
		$dados = $this->getRequest()->getParams();
		$itemSemCoordenada = false;
		$idProposta = $dados['id_proposta'];
		$itens = $ModelItensSegurados->fetchItensProposta($idProposta);
		foreach($itens as $item){
			$complementos = $ModelComplementos->fetchAll(['id_item_segurado = '.$item['ID']])->toArray();
    		foreach ($complementos as $complemento) {
        		if (empty($complemento['ds_coordenadas_geograficas'])) {
            		$itemSemCoordenada = true;
            		break 2;
        		}
    		}
		}

		if($itemSemCoordenada){
			$Prioridade = new Atendimento_Model_Prioridade();
			$ModelChamado = new Atendimento_Model_Chamado();
			$TipoChamado = new Atendimento_Model_TipoChamado();
			$data = [
				'id_proposta' => $idProposta, 
				'id_tipo_chamado' => 68,
				'id_departamento' => 26, 
				'id_responsavel' => $TipoChamado->getIdResponsavel(68),
				'ds_descricao' => 'Proposta sem coordenada de item.', 
				'id_prioridade'=> $Prioridade->getIdPrioridade('NORMAL')
			];
			//Busca chamado com status 'Aberto (73)' ou 'Novo (58)'
			$jaPossuiChamadoAberto = $ModelChamado->getChamadosAbertos($idProposta, 'V');
			if(!($jaPossuiChamadoAberto)){
				$ModelChamado->save($data);
				
			}
			$result['status'] = 4;
			$result['mensagem'] = "Vistoria não agendada! Um chamado foi aberto, favor aguardar orientação.";
		}else{
        	$dataAgendamentoValida = (new Seguro_Service_VistoriaPrevia())->dataAgendamentoValida(
            	$dados['id_proposta'],
            	Agro_Utils_Date::create($dados['dt_agendamento'], Agro_Utils_Date::FORMAT_PT_BR)
        	);

			if (!$dataAgendamentoValida) {
            	$result['status'] = 4;
            	$result['mensagem'] = 'A data não pode ser inferior a data de transmissão da proposta ou a data de plantio';
            	$result['mensagem'] .= ' dos itens.';
        	} else {
            	$result = array();
            	if($Model->saveAgendamentoVistoriador($dados)) {
                	if($dados['dt_agendamento'] == ""){
                    	$result['status'] = 3;
                	}else{
                    	$result['status'] = 1;
                	}
            	} else {
                	$result['status'] = 0;
            	}
        	}
		}

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

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

		$Adapter = new Zend_File_Transfer_Adapter_Http();
		$Adapter->setDestination(APPLICATION_PATH.'/upload_files/temp/');
		$file = $Adapter->getFileInfo();
		if(!$Adapter->receive($file['propostas']['name'])){
			$result['status'] = false;
		} else {
			$dados = file_get_contents(APPLICATION_PATH.'/upload_files/temp/' . $file['propostas']['name']);
			$dados = str_replace("\r\n", ",", $dados);
			$result['propostas'] = $dados;
			$result['status'] = true;
		}
		$this->getResponse()->setBody(Zend_Json::encode($result));
	}

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

		$Model = $this->getModel();
		$dados = $this->getRequest()->getParams();
		$result = array();
		if($Model->saveAgendamento($dados)) {
			if($dados['dt_agendamento'] == ""){
				$result['status'] = 3;
			}else{
				$result['status'] = 1;
			}
		} else {
			$result['status'] = 0;
		}
		$this->getResponse()->setBody(Zend_Json::encode($result));
	}

	public function listAction() {
		$this->getHelper('layout')->disableLayout();
		$where = $this->getFilter();
		$Model = $this->getModel();

		$Module = $this->getRequest()->getModuleName();
		$Controller = $this->getRequest()->getControllerName();
		$Session = new Zend_Session_Namespace('filtro');
		$Session->{$Module}->{$Controller} = $this->getRequest()->getParams();

		// Habilita ou Desabilita a paginacao pelo combo na tela
		$this->_paginator = $this->getRequest()->getParam('show_paginacao');
		$recordsPerPage = ($this->recordsPerPage ? $this->recordsPerPage :  RECORDS_PER_PAGE);

		if ($this->getRequest()->getParam("o")) {
			$Model->_order = trim($this->getRequest()->getParam("o") .' '. $this->getRequest()->getParam("s"));
		}

		$this->view->form = $this->getForm();
		$Rs = $Model->fetchAllPaginator($where, $this->getRequest()->getParam('page'), $recordsPerPage, $this->_paginator);

		$this->view->paginator = $Rs;
	}

	public function vistoriasAction() {
		$result = array();
		$result['vistorias'] = null;

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

		if ($this->getRequest()->getParam('id_empresa')) {

			$Model = $this->getModel();

			$vistorias = $Model->getVistoriasMobile($this->getRequest()->getParam('id_empresa'));
			$result['vistorias'] = $vistorias;
		}

		$Model = new Seguro_Model_VistoriaPrevia();
		foreach($vistorias as $vistoria) {
			$Model->updateVistoriaMobile($vistoria['id']);
		}

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

	public function listalaudosAction()
    {
		$this->isAjax(true);

		$model = $this->getModel();
		$dados = $this->getRequest()->getParams();
        $idPropostaVistoria = !Agro_Util::filterVariable($dados['id_proposta_vistoria'])
            ? 0
            : (int)$dados['id_proposta_vistoria'];

		$this->view->schema = (new Produto_Model_Safras())->getSafraModel($dados['id_proposta']);
		$this->view->dados = $model->getDadosProposta($dados['id_proposta']);

		$this->view->laudo = $model->getLaudo($idPropostaVistoria, $dados['id_proposta']);
		$this->view->id_proposta_vistoria = $idPropostaVistoria;

		$this->view->status = (new Sistema_Model_Status())->getCombo('VP_ANALISE');
		$this->view->form = new Seguro_Form_VistoriaPreviaEmpresaArquivo();

		$arquivos = (new Seguro_Model_Vistoriapreviaempresaarquivos())->getArquivos($idPropostaVistoria);
		$this->view->arquivos = $arquivos;

	}


	public function salvaarquivoAction()
    {
        $this->isAjax();
        $dados = $this->getRequest()->getParams();

        $idProposta = !Agro_Util::filterVariable($dados['id_proposta'])
            ? 0
            : (int)$dados['id_proposta'];

        $idPropostaVistoria = !Agro_Util::filterVariable($dados['id_proposta_vistoria'])
            ? 0
            : (int)$dados['id_proposta_vistoria'];

        try {
            if (empty($dados['id_tipo_arquivo_hidden'])) {
                throw new Exception("Tipo de arquivo não informado.");
            }

            if (empty($_FILES['file']['name'][0])) {
                throw new Exception("Nenhum arquivo informado.");
            }

            if (
                !$this->validarQuantidadeArquivos(
                    $idPropostaVistoria,
                    $dados['id_tipo_arquivo_hidden'],
                    $dados['total_itens_laudo']
                )
            ) {
                throw new Exception("Número limite de upload de arquivos excedido.");
            }

            // Inicializa o Adaptador de transferencia de arquivos
            $adapter = new Zend_File_Transfer_Adapter_Http();
            $adapter->setDestination(APPLICATION_PATH . '/upload_files/laudoprevia/');
            $modelArquivos = new Seguro_Model_Vistoriapreviaempresaarquivos();

            if (
                count($_FILES['file']['name']) > 1
                && $dados['id_tipo_arquivo_hidden'] != Sistema_Model_TipoArquivoLaudoPrevia::TIPO_FOTO
            ) {
                $this->getResponse()->setBody("<script>alert('Erro! Envio multiplo de arquivos é permitido apenas para fotos!');window.top.window.stopUpload(0);</script>");
                return false;
            }

            $extensoes = ['pdf'];
            $mimeTypesValidos = ['application/pdf'];
            if (
                $dados['id_tipo_arquivo_hidden'] == Sistema_Model_TipoArquivoLaudoPrevia::TIPO_CROQUI
                || $dados['id_tipo_arquivo_hidden'] == Sistema_Model_TipoArquivoLaudoPrevia::TIPO_FOTO
            ) {
                $extensoes = ['bmp', 'jpeg', 'png', 'jpg'];
                $mimeTypesValidos = ['image/bmp', 'image/x-ms-bmp', 'image/jpeg', 'image/png', 'image/jpg'];
            }

            $adapter->addValidator('Extension', false, $extensoes);

            if (!$adapter->isValid()) {
                $extensoes = strtoupper(implode(", ", $extensoes));
                throw new Exception("Formato de arquivo inválido (formato(s) aceito(s): {$extensoes}).");
            }

            // Percorre todos os arquivos postados
            foreach ($adapter->getFileInfo() as $file) {
                if ($file['name'] == '') {
                    continue;
                }

                if ($file['size'] == '') {
                    $this->getResponse()->setBody("<script>alert('Erro! Arquivo excede tamanho limite!');window.top.window.stopUpload(0);</script>");
                    return false;
                }

                $mimetype = mime_content_type($file['tmp_name']);
                if (!in_array($mimetype, $mimeTypesValidos)) {
                    $extensoes = strtoupper(implode(", ", $extensoes));
                    throw new Exception("Tipo de arquivo inválido (Tipo(s) aceito(s): {$extensoes}).");
                }

                $idArquivo = $modelArquivos->getMaxArquivo($idPropostaVistoria);
                if (!$idArquivo) {
                    $numero = 1;
                } else {
                    $nomeArquivo = $modelArquivos->getNomeArquivo($idArquivo);
                    $nome = explode('_', $nomeArquivo);
                    $numero = explode('.', $nome[3]);
                    $numero = $numero[0] + 1;
                }

                $count = str_pad($numero, 3, '0', STR_PAD_LEFT);

                $id_vistoria = (new Seguro_Model_VistoriaPreviaEmpresa())->getIdVistoriaByIdPropostaVistoria(
                    $idPropostaVistoria
                );

                $newName = $idProposta . "_VP_" . $id_vistoria . "_" . $count . "." . end(explode(".", $file['name']));

                $arr['ds_nome_arquivo'] = $newName;
                $arr['id_proposta_vistoria'] = $idPropostaVistoria;
                $arr['id_tipo_arquivo_laudo_previa'] = $dados['id_tipo_arquivo_hidden'];
                $arr['fl_transmitido_seguradora'] = true;

                $caminhoArquivo = APPLICATION_PATH . '/upload_files/laudoprevia/' . $newName;
                if (!copy($file['tmp_name'], $caminhoArquivo)) {
                    throw new Exception("Não foi possível copiar o arquivo {$file['name']} para a pasta.");
                }

                if (!$modelArquivos->save($arr)) {
                    throw new Exception("Não foi possível salvar o arquivo {$file['name']}.");
                }
            }

            if (isset($dados['form_novo'])) {
                $this->getResponse()->setBody("<script>
					alert('Arquivo(s) cadastrado(s) com sucesso!');
					window.top.window.stopUpload(1);
					window.top.window.document.getElementById('formUploader').reset();
					window.top.window.document.getElementById('id_tipo_arquivo').value = '';
					window.parent.location.hash = 'tabs-documentos';
					window.parent.location.reload(true);
					</script>");
            } else {
                $this->getResponse()->setBody("<script>alert('Arquivo cadastrado com sucesso!');window.top.window.stopUpload(1); window.top.window.document.getElementById('formUploader').reset(); window.top.window.document.getElementById('id_tipo_arquivo').value = '';
					$.listaLaudos(" . $idProposta . ", " . $idPropostaVistoria . ");
					</script>");
            }
        } catch (Exception $e) {
            $this->getResponse()->setBody("
				<script>
					alert('{$e->getMessage()}');
					window.top.window.stopUpload(0);
					window.parent.location.hash = 'tabs-documentos';
					window.parent.location.reload(true);
				</script>
			");
        }
    }

	private function validarQuantidadeArquivos(int $idPropostaVistoria, int $tipoArquivo, int $totalItensLaudo): bool
	{
		if (Sistema_Model_Usuarios::usuarioLogadoFuncionarioAgro()) {
			return true;
		}

		$modelVistoriaPreviaEmpresaArquivos = new Seguro_Model_Vistoriapreviaempresaarquivos();
		$totalArquivosPorTipo = $modelVistoriaPreviaEmpresaArquivos->getCountArquivo($idPropostaVistoria, $tipoArquivo);
		switch ($tipoArquivo) {
			case Sistema_Model_TipoArquivoLaudoPrevia::TIPO_CROQUI:
			case Sistema_Model_TipoArquivoLaudoPrevia::TIPO_LAUDO:
				if ($totalArquivosPorTipo >= 2) {
					return false;
				}
				break;
			case Sistema_Model_TipoArquivoLaudoPrevia::TIPO_FOTO:
				$maxFotos = ($totalItensLaudo * 5) + 10;
				$totalArquivosPorTipo += count($_FILES['file']['name']);
				if ($totalArquivosPorTipo > $maxFotos) {
					return false;
				}
				break;
			
			default:
				if ($totalArquivosPorTipo >= 1) {
					return false;
				}
				break;
		}

		return true;
	}

	public function deletearquivoAction() {

		$this->isAjax();

		$Model = new Seguro_Model_Vistoriapreviaempresaarquivos();
		$modelVistoriaPreviaEmpresa = new Seguro_Model_VistoriaPreviaEmpresa();
		$modelVistoriaPreviaHistorico = new Seguro_Model_VistoriaPreviaHistorico();
		
		$result = array();
		$idArquivo = $this->getRequest()->getParam('id');
		
		try {
			$idPropostaVistoria = $Model->getIdPropostaVistoria($idArquivo);
            $rowArquivo = $Model->find($idArquivo)->current();
            $nomeArquivo = $rowArquivo['ds_nome_arquivo'];

			if ($Model->delete($idArquivo)) {
                $caminhoArquivoCompleto = PATH_LAUDOS . '/' . basename($nomeArquivo);
                if (file_exists($caminhoArquivoCompleto)) {
                    unlink($caminhoArquivoCompleto);
                }

				$result = MSG_SUCCESS;
			} else {
				$result = MSG_ERROR;
			}

			if (empty($idPropostaVistoria)) {
				throw new \Exception('Vistoria não encontrada.');
			}

			$arquivos = $Model->getArquivosFoto($idPropostaVistoria);
			$vistoriaPrevia = $modelVistoriaPreviaEmpresa
				->find($idPropostaVistoria)
				->current();
				
			// Já recebeu JSON enviado via tablet (necessário para saber se todos arquivos já foram recebidos)
			if ($vistoriaPrevia['fl_transmitido_tablet']) {
				$totalArquivos = $totalArquivosRecebidos = 0;
				
				foreach ($arquivos as $arquivo) {
					if ($arquivo['id_tipo_arquivo_laudo_previa'] == 3 && $arquivo['fl_transmitido_seguradora']) {
						if (file_exists(APPLICATION_PATH . '/upload_files/laudoprevia/' . $arquivo['ds_nome_arquivo'])) {
							++$totalArquivosRecebidos;
						}
					}
		
					++$totalArquivos;
				}

				if ($totalArquivos === $totalArquivosRecebidos && $totalArquivos > 0) {
					$modelVistoriaPreviaEmpresa->update(
						['id_status' => Sistema_Model_Status::VP_TRANSMITIDA],
						'id = '. $idPropostaVistoria
					);

					// Atualiza status para TRANSMITIDA caso tenha recebido todos arquivos
					if (!$modelVistoriaPreviaHistorico->todosArquivosFotoTransferidos($idPropostaVistoria)) {
						$idEmpresa = (new Sistema_Model_VistoriasEmpresas())
							->getEmpresaByVistoria((int) $vistoriaPrevia['id_vistoria']);

						$modelVistoriaPreviaHistorico->insert(
							[
								'id_status' => Sistema_Model_Status::VP_TRANSMITIDA,
								'id_proposta_vistoria' => $idPropostaVistoria,
								'id_status_analise' => $vistoriaPrevia['id_status_analise'],
								'id_empresa' => $idEmpresa,
								'ds_motivo' => 'Todos arquivos foto recebidos.'
							]
						);
					}
				}
			}
			
		} catch (Exception $e) {

			$result = $this->view->escape(MSG_DELETE_FK_ERROR);
		}

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

	public function arquivoAction()
    {
        $this->isAjax(true);

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

        $dados = $this->getRequest()->getParams();
        $idPropostaVistoria = !Agro_Util::filterVariable($dados['id_proposta_vistoria'])
            ? 0
            : (int)$dados['id_proposta_vistoria'];

        $arquivos = (new Seguro_Model_Vistoriapreviaempresaarquivos())->getArquivos($idPropostaVistoria);
        $this->view->arquivos = $arquivos;

        $dadosProposta = $this->getModel()->getDadosProposta($dados['id_proposta']);
        $this->view->dados = array_merge($dadosProposta, $dados);

        $this->view->id_proposta_vistoria = $idPropostaVistoria;
    }


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

		$dados = $this->getRequest()->getParams();
		$Model = $this->getModel();
		$error = false;
        $dados['ds_descricao'] = !empty($dados['ds_descricao_previa']) && empty($dados['ds_descricao']) ? $dados['ds_descricao_previa'] : $dados['ds_descricao'];

		//se o status é pendência de corretor ou perito, cria um chamado
		if($dados['id_status_analise'] == 171 || $dados['id_status_analise'] == 172 || $dados['id_status_analise'] == 177){

			$TipoChamado = new Atendimento_Model_TipoChamado();
			$Prioridade = new Atendimento_Model_Prioridade();
			$Chamado = new Atendimento_Model_Chamado();

            if($dados['id_status_analise'] == 171){
                $pendencia = (new Atendimento_Model_Pendencia())->getPendencias($dados['id_pendencia'])->current()->ds_nome_pendencia;
            }
            
			$dadosChamado = array(
				'id_tipo_chamado' => $TipoChamado->getIdTipoChamado('PENDENCIA_LAUDO_PREVIA'),
				'id_prioridade' => $Prioridade->getIdPrioridade('NORMAL'),
				'id_departamento' => 26,
				'id_proposta' => $dados['id_proposta'],
				'ds_descricao' => "\n\nPendência Vistoria Prévia pelos seguintes motivos:\n\n".($pendencia ? "$pendencia\n\n" : '') . $dados['ds_descricao'] . "\n\n",
        		'fl_necessario_endosso' => $dados['fl_necessario_endosso'],
				'analise_previa' => true,
				'dt_prazo_retorno' => $dados['dt_prazo_retorno']
			);

			try{

				$idChamado = $Chamado->save($dadosChamado);
				$ChamadoDestinatario = new Atendimento_Model_ChamadoDestinatario();

				switch ($dados['id_status_analise']){
					case 171: //pendência de perito
					case 177: //pendência de perito corretor
						$tipo_destinatario = 'V';
						break;
					case 172: //pendência de corretor
						$tipo_destinatario = 'C';
						break;
				}

				//relaciona com a empresa de vistoria prévia
				$ModelVistoriaPrevia = new Seguro_Model_VistoriaPreviaEmpresa();
				$idEmpresa = (empty($dados['id_empresa'])) ? $ModelVistoriaPrevia->getIdEmpresaByProposta($dados['id_proposta']) : $dados['id_empresa'];

				$ChamadoDestinatario->save(array('id_chamado' => $idChamado, 'ds_tipo_destinatario' => $tipo_destinatario, 'id_empresa' => $idEmpresa));

				$dados['id_proposta_vistoria'] = $dados['id_proposta_vistoria'];
				$Model->saveStatusAnalise($dados);

				if ($dados['id_status_analise'] == 172 && $dados['ds_descricao']) {
                    //busca a proposta row
                    $Propostas = new Seguro_Model_Propostas();
                    $Proposta = $Propostas->get($dados['id_proposta']);

                    $motivo = $dados['ds_descricao'];
                    if (!empty($dados['dt_prazo_retorno'])) {
                    	$motivo .= "  Prazo para retorno: {$dados['dt_prazo_retorno']}.";
                    }

                    //imagem da assinatura
                    $mail = new Agro_Mail();
                    $filename = RESOURCES . "/imagens/assinatura_email_tecnica.png";
                    $at = $mail->createAttachment(file_get_contents($filename));
                    $at->type = Agro_Util::getMimeType($filename);
                    $at->disposition = Zend_Mime::DISPOSITION_INLINE;
                    $at->encoding = Zend_Mime::ENCODING_BASE64;
                    $at->id = 'cid_' . md5_file($filename);

                    $subject = "Alerta de Pendência por Vistoria: Proposta {$Proposta->doc()} / {$Proposta->ds_nome_proponente}";


                    $body = "<p style=\"margin-bottom: 15px\">Prezado Corretor, </p>
    
<p style=\"margin - bottom: 15px\">
Informamos que a proposta <b>{$Proposta->doc()}</b> em nome de <b>{$Proposta->ds_nome_proponente}</b> possui uma ou mais pendências, conforme constatado em Vistoria a campo pelo motivo abaixo:
</p>

<p style=\"margin-bottom: 15px\">
Motivo: <b>{$motivo}</b>
</p>

<p style=\"margin - bottom: 15px\">
Para evitar prejuízos ao Segurado, é imprescindível regularizar a proposta dentro do prazo.
Para tanto, acesse o módulo de chamados no sistema.
</p>

<p style=\"margin-bottom: 15px\">
Acesse o sistema Agronet 2.0 através do endereço: <a href=\"http://agronet.agrobrasilseguros.com.br/\">http://agronet.agrobrasilseguros.com.br/</a>
</p>

<p style=\"margin-bottom: 45px\">
ATENÇÃO: esta é uma mensagem automática. Por favor, não responda.<br />
Se deseja entrar em contato conosco, escreva para atendimento@agrobrasilseguros.com.br
</p>

<img src=\"cid:" . $at->id . "\" height=\"61\" width=\"467\" />
<br />
<span style=\"color: grey; margin: 0!important;  font-family: Verdana; font-size: .5em; text-align: left; display: block;\">
<font face='webdings' style=\"color: darkgreen\">i</font> 
<span style=\"color: darkblue\"> Este e-mail, inclusive anexos, podem conter informações confidenciais de propriedade exclusiva da AgroBrasil Seguros,
<br />não devendo ser utilizado, copiado ou revelado sem prévia autorização.</span> This e-mail, including attachments, is intended<br /> for
the person(s) or company named and may contain confidential and/or legally privileged information. Unauthorized<br /> disclosure,
copying or use of this information may be unlawful and is prohibited. If you are not the intended recipient,<br /> please delete this
message and notify the sender.
</span>
<br />
<span style=\"color: grey; margin: 0!important; font-family: Verdana; font-size: .5em; text-align: left; display: block\">
<font face='webdings'  style=\"color: darkgreen\">P</font> <span style=\"font-weight: bold\">Antes de imprimir, pense em seu compromisso com o Meio Ambiente.</span> Before printing, think about your<br /> commitment
to the environment.
</div>
";

                    $mail->notificarCorretor($Proposta, $subject, $body, array('html' => true));
                }

                if ($dados['id_status_analise'] == 171 && $dados['id_pendencia']) {
                    $Proposta = (new Seguro_Model_Propostas())->get($dados['id_proposta']);
                    $Empresa = (new Sistema_Model_Empresas)->find($idEmpresa)->toArray();
                    $Vistoriadores = (new Sistema_Model_VistoriasFuncionarios)->getVistoriadoresByVistoria($dados['id_vistoria']);

                    $toHelper = [
                        'doc' => $Proposta->doc(),
                        'descricao' => $dados['ds_descricao'],
                        'id_pendencia' => $dados['id_pendencia'],
                        'mail_empresa' => $Empresa[0]['ds_email'],
                        'vistoriadores' => $Vistoriadores,
                        'dt_prazo_retorno' => $dados['dt_prazo_retorno']
                    ];

                    $this->view->getHelper('MailPendenciaVistoria')->mailPendenciaVistoria($toHelper);
                }

				$result["mensagem"] = "Chamado aberto com sucesso!";
				$result["status"] = true;

			}catch (Exception $e){
				die($e);
				$result["mensagem"] = "Erro ao cadastrar chamado!";
			}
		} else {
			//salva observações na proposta
			try {
				if ($dados['id_proposta']) {
                    $dados['idPropostaObservacao'] = null;
					$result["mensagem"] = "Status alterado com sucesso!";

					if($dados['ds_descricao']){

						$PropostasObservacoes = new Seguro_Model_PropostasObservacoes();

						if($dados['id_status_analise'] == 178){ //Análise Concluída - Sem Alterações
						    $dados['fl_observacao_endosso'] = 0;
						} else {
						    $dados['fl_observacao_endosso'] = 1;
						}
						$dados['ds_observacao'] = $dados['ds_descricao'];

                        $dados['idPropostaObservacao'] = $PropostasObservacoes->save($dados);
						$result["mensagem"] = "Observação cadastrada com sucesso!";
					}

					$Model->saveStatusAnalise($dados);
				}
			} catch (Exception $e) {
				if ($e->getMessage()) {
					$result["mensagem"] = $e->getMessage();
				} else {
					$result["mensagem"] = "Erro ao cadastrar observação na proposta!";
				}
			}
		}

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

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

        $model = $this->getModel();
        $modelArquivos = new Seguro_Model_Vistoriapreviaempresaarquivos();
        $dados = $this->getRequest()->getParams();
        $idPropostaVistoria = !Agro_Util::filterVariable($dados['id_proposta_vistoria'])
            ? 0
            : (int)$dados['id_proposta_vistoria'];

        $result = 'Você deve anexar ao menos 1 arquivo para transmitir o laudo!';

        if ($modelArquivos->getCountArquivo($idPropostaVistoria)) {
            if ($model->finalizaDigitacao($dados)) {
                $dadosEmail = $model->enviaEmailResponsavel($dados);

                $mail = new Agro_Mail();
                $mail->addTo('karina.figueiro@agrobrasilseguros.com.br', 'Karina Figueiró');

                $assunto = 'NOVO LAUDO DE VISTORIA PRÉVIA - "' . $dadosEmail['ds_nome_proponente'];
                $assunto .= '" - "' . $dadosEmail['ds_nome_cultura'] . '"';
                $mail->setSubject($assunto);

                $body = "VISTORIA PRÉVIA Nro: " . $idPropostaVistoria;
                $body .= "\nEnviado por: " . Zend_Auth::getInstance()->getIdentity()->ds_nome_usuario;
                $body .= "\nEm: " . Agro_Util::formatDate($dadosEmail['dt_alteracao'], Zend_Date::DATES);
                $body .= "\nProposta Nro: " . $dadosEmail['id'];
                $body .= "\nNome do Segurado: " . $dadosEmail['ds_nome_proponente'];
                $body .= "\nProduto: " . $dadosEmail['ds_nome_cultura'];
                $body .= "\n\nATENÇÃO: esta é uma mensagem automática. Por favor, não responda. Se desejar entrar em";
                $body .= " contato, escreva para tecnica@agrobrasilseguros.com.br";
                $mail->setBody($body);

                $mail->send();

                $result = 'Laudo transmitido com sucesso!';
            } else {
                $result = 'Erro ao transmitir laudo!';
            }
        }

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

	/**
	 * Visualizacao da proposta
	 */
	public function viewAction() {
		$this->getHelper('layout')->setLayout('popup');

		$Model = new Seguro_Model_Propostas();

		$this->view->proposta = $Model->find($this->getRequest()->getParam('id'))->current();
        $this->view->id_proposta_vistoria = $this->getRequest()->getParam('id_proposta_vistoria');
		$this->view->title .= ' » Visualização';
		$this->view->module = 'seguro';
	}

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

		$Model = $this->getModel();
		$dados = $this->getRequest()->getParams();

		if($Model->deleteLaudo($dados)){
			$result = 'Laudo excluído com sucesso!';
		}else{
			$result = 'Erro ao excluir laudo!';
		}
		$this->getResponse()->setBody(Zend_Json::encode($result));
	}

	public function revertetransmissaoAction(){

		$this->isAjax();

		$Model = $this->getModel();
		$dados = $this->getRequest()->getParams();

		if($Model->reverteTransmissaoLaudo($dados)){
			$result = 'Transmissão do Laudo revertida com sucesso!';
		}
		$this->getResponse()->setBody(Zend_Json::encode($result));
	}

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

		$Model = new Seguro_Model_VistoriaPreviaEmpresa();
		$idProposta = $this->getRequest()->getParam('id_proposta');

		if($Model->checkLaudos($idProposta)){
			$return['status'] = true;
			$return['message'] = 'Já existe um laudo digitado para esta vistoria. Deseja continuar?';
		}else{
			$return['status'] = false;
		}

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

	}

	public function transmitearquivoAction()
    {
        $this->isAjax();
		$return = "Arquivo liberado com sucesso!";

		try {
			$idArquivo = !Agro_Util::filterVariable($this->getRequest()->getParam('id'))
            ? 0
            : (int)$this->getRequest()->getParam('id');
			
			if (empty($idArquivo)) {
				throw new Exception("ID do arquivo não informado.");
			}

        	$nomeArquivo = Agro_File::clearFileName($this->getRequest()->getParam('arquivo'));

			if (empty($nomeArquivo)) {
				throw new Exception("Nome do arquivo não informado.");
			}

			(new Seguro_Model_Vistoriapreviaempresaarquivos())->transmiteArquivo($idArquivo, $nomeArquivo);
		} catch (\Throwable $th) {
			$return = $th->getMessage();
		}

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

	public function devolvearquivoAction() {
		$this->isAjax();
		$return = 'Arquivo devolvido com sucesso!';

		try {
			$idArquivo = !Agro_Util::filterVariable($this->getRequest()->getParam('id'))
            ? 0
            : (int)$this->getRequest()->getParam('id');
			
			if (empty($idArquivo)) {
				throw new Exception("ID do arquivo não informado.");
			}

        	$nomeArquivo = Agro_File::clearFileName($this->getRequest()->getParam('arquivo'));

			if (empty($nomeArquivo)) {
				throw new Exception("Nome do arquivo não informado.");
			}

			(new Seguro_Model_Vistoriapreviaempresaarquivos())->devolveArquivo($idArquivo, $nomeArquivo);

		} catch (\Throwable $th) {
			$return = $th->getMessage();
		}

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

	public function analisalaudoAction(){
		$this->isAjax();
		$Model = $this->getModel();
		try{
			if(Zend_Auth::getInstance()->getIdentity()->ds_nome_usuario == 'karina.silva' ||
                Zend_Auth::getInstance()->getIdentity()->ds_nome_usuario == 'karina.figueiro' ||
                Zend_Auth::getInstance()->getIdentity()->ds_nome_usuario == 'danielle.goncalves' ||
                Zend_Auth::getInstance()->getIdentity()->ds_nome_usuario == 'luana.becker'){
				$Model->analisaLaudo($this->getRequest()->getParam('id_arquivo'));
			}
			return true;
		}catch (Exception $e){
			return false;
		}
	}

	public function deletepropostavistoriaAction(){
		$this->isAjax();
		$Model = $this->getModel();

		$dados['id_proposta_vistoria'] = $this->getRequest()->getParam('id_proposta_vistoria');
		$dados['id_agendamento'] = $this->getRequest()->getParam('id_agendamento');

		if($Model->deletePropostaVistoria($dados)){
			$return = 'Vistoria excluída com sucesso!';
		}else{
			$return = 'Erro ao excluir vistoria!';
		}

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


	public function getFilter() {
		$where = parent::getFilter();

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

		$Empresa = new Sistema_Model_Empresas();
		$id_empresa = $Empresa->getIdEmpresaUsuarioCorrente();

		$pesquisaPorProposta = [];

		if($User->ds_chave == 'VISTORIADOR' || $User->ds_chave == 'Vistoriador' || $User->ds_chave == 'VISTORIADOR_RESP'){
			$where[] = $pesquisaPorProposta[] = array(
				'field' => 'emp.id',
				'operator' => '=',
				'value' => $id_empresa
			);
		}

		if ($this->getRequest()->getParam('dt_inicio')) {
			$where[] = array(
				'field' => 'sub.data_plantio',
				'operator' => '<=',
				'value' => Agro_Util::formatDate($this->getRequest()->getParam('dt_inicio'), 'Y-MM-dd')
			);
		}

		if ($this->getRequest()->getParam('id_municipio')) {
			$where[] = array(
				'field' => 'm.id',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('id_municipio')
			);
		}

		if ($this->getRequest()->getParam('id_estado')) {
			$where[] = array(
				'field' => 'm.id_estado',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('id_estado')
			);
		}

		if ($this->getRequest()->getParam('id_vistoriador_search')) {
			$where[] = array(
				'field' => 'vist_func.id',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('id_vistoriador_search')
			);
		}

		if ($this->getRequest()->getParam('id_empresa_search')) {
			$where[] = array(
					'field' => 'emp.id',
					'operator' => '=',
					'value' => $this->getRequest()->getParam('id_empresa_search')
			);
		}

		if (!empty($this->getRequest()->getPost('id_status_empresa'))) {
			$this->getRequest()->setParam('id_status_empresa', $this->getRequest()->getPost('id_status_empresa'));
		}

		if ($this->getRequest()->getParam('id_status_empresa')) {

			$status = $this->getRequest()->getParam('id_status_empresa');
			if($status !== 0) {
				if(is_array($status)){
			    	$filtro = "(".implode("," , $status).")";
				}else{
					$filtro = "(".$status.")";
				}
			    $where[] = "vp.id_status in ".$filtro;

			} else {
				$where[] = array(
					'field' => 'vp.id_status',
					'operator' => '=',
					'value' => 55
				);
				$where[] = array(
					'field' => 's.ds_chave',
					'operator' => 'ilike',
					'value' => 'AGUARDANDO_VISTORIA_PREVIA'
				);
			}
		}

		if ($this->getRequest()->getParam('id_status_tablet')) {
			$where[] = array(
				'field' => 'vp.id_status_tablet',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('id_status_tablet')
			);
		}

		if ($this->getRequest()->getParam('fl_necessario_endosso')) {
			$where[] = array(
				'field' => 'vp.fl_necessario_endosso',
				'operator' => '=',
				'value' => 'true'
			);
		}

		if ($this->getRequest()->getParam('prazo_agendamento_vencido')) {
			$hoje = new Datetime;
			$where[] = array(
				'field' => 'vp.dt_prazo_agendamento',
				'operator' => '<',
				'value' => $hoje->format('Y-m-d')
			);
		}

		if ($this->getRequest()->getParam('agendamento_vencido')) {
			$hoje = new Datetime;
			$where[] = array(
				'field' => 'ag.dt_agendamento',
				'operator' => '<',
				'value' => $hoje->format('Y-m-d')
			);
		}

		if ($this->getRequest()->getParam('exclui_agro')) {
			$where[] = array(
				'field' => 'emp.id',
				'operator' => '<>',
				'value' => 20
			);
		}

		if (!empty($this->getRequest()->getPost('id_safra')) && empty($this->getRequest()->getParam('id_safra'))) {
			$this->getRequest()->setParam('id_safra', $this->getRequest()->getPost('id_safra'));
		}

		if ($this->getRequest()->getParam('id_safra')) {
			if (is_array($this->getRequest()->getParam('id_safra'))) {
				$where[] = 'saf.id IN ('.implode(',', $this->getRequest()->getParam('id_safra')).')';
			} else {
				$where[] = array(
					'field' => 'saf.id',
					'operator' => '=',
					'value' => $this->getRequest()->getParam('id_safra')
				);
			}
		}

		if ($this->getRequest()->getParam('safras')) {
			
			$where[] = array(
					'field' => 'saf.id',
					'operator' => '>=',
					'value' => $this->getRequest()->getParam('safras')
			);
		}

		if ($this->getRequest()->getParam('id_produto')) {

			if (is_array($this->getRequest()->getParam('id_produto'))) {
				$where[] = 'prod.id IN ('.implode(',', $this->getRequest()->getParam('id_produto')).')';
			} else {
				$where[] = array(
					'field' => 'saf.id',
					'operator' => '=',
					'value' => $this->getRequest()->getParam('id_safra')
				);
			}
		}

		if (!empty($this->getRequest()->getParam('prioridade_conferencia_search'))) {
			$where[] = array(
				'field' => 'lvp.prioridade_conferencia',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('prioridade_conferencia_search')
			);
		}

		if ($this->getRequest()->getParam('pesquisar_por') && $this->getRequest()->getParam('vl_pesquisar_por')) {
			switch ($this->getRequest()->getParam('pesquisar_por')) {
				case 'ds_nome_proponente':
				case 'ds_cpf_proponente':
					$value = "%".$this->getRequest()->getParam('vl_pesquisar_por')."%";
					$operator = 'ilike';
					
					$where[] = array (
					    'field' => ($field_filter ? $field_filter : $this->getRequest()->getParam('pesquisar_por')),
					    'operator' => $operator,
					    'value' => $value
					);
					break;
				case 'p.id':
				    $where[] = $pesquisaPorProposta[] = "p.id_endosso = (select id_endosso from seguro.propostas where id = ".trim($this->getRequest()->getParam('vl_pesquisar_por')).")";
				    break;
				default:
					$where[] = array (
					    'field' => ($field_filter ? $field_filter : $this->getRequest()->getParam('pesquisar_por')),
					    'operator' => '=',
					    'value' => trim($this->getRequest()->getParam('vl_pesquisar_por'))
					);
					break;
			}
		}

		if (is_array($this->getRequest()->getParam('id_status'))) {
			$filtro = "(".implode("," , $this->getRequest()->getParam('id_status')).")";
			$where[] = "vp.id_status in ".$filtro;

			if (in_array($User->tp_usuario, array("V", "C", "P"))){
				$where[] = array(
						'field' => 'vist_func.id_usuario',
						'operator' => '=',
						'value' => $User->id
				);
			}
		}

		if (is_array($this->getRequest()->getParam('id_corretor'))) {
		    $filtro = "(".implode("," , $this->getRequest()->getParam('id_corretor')).")";
			$where[] = "pc.id_usuario in ".$filtro;
		}

		if (is_array($this->getRequest()->getParam('id_status_analise_search'))) {
		    $filtro = "(".implode("," , $this->getRequest()->getParam('id_status_analise_search')).")";
		    $where[] = "vp.id_status_analise in ".$filtro;
		}

		if (!empty($this->getRequest()->getParam('pesquisar_por')) && $this->getRequest()->getParam('pesquisar_por') == 'p.id') {
			$where = $pesquisaPorProposta;
		}

        if (!empty($this->getRequest()->getParam('pendenciasChamados'))) {
            $subSelect = (new Agronet_Model_Index())->countChamadosPrevia(
                $this->getRequest()->getParam('safras'),
                $this->getRequest()->getParam('id_status_chamados'),
                $this->getRequest()->getParam('fl_pendencia_agro'),
                (int)Zend_Auth::getInstance()->getIdentity()->id,
                ['c.id_proposta'],
                false
            );
            $where[] = "p.id in (" . $subSelect . ")";
        }

		return $where;
	}

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

        $adapter = Agro_Db_Table_Abstract::getDefaultAdapter();

        try {
            $adapter->beginTransaction();

            (new Seguro_Model_VistoriaPreviaEmpresa())->atualizarStatusAlteracao(
                (int)$this->_requestParams['id_proposta_vistoria'],
                (int)$this->_requestParams['id_status_alteracao']
            );

            $adapter->commit();
        } catch (Exception $erro) {
            $adapter->rollback();

            $this->_return['erro'] = true;
            $this->_return['mensagem'] = 'Erro ao atualizar o Status da Alteração - VP.';
        }

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

    public function solicitarconfirmacaocontatoAction()
    {
        $this->isAjax(true);

        $rowProposta = (new Seguro_Model_Propostas())->get($this->_requestParams['id_proposta']);
        $rowTipoChamado = (new Atendimento_Model_TipoChamado())->find(Atendimento_Model_TipoChamado::TECNICA_CONFIRMAR_CONTATO)->current();

        $this->view->idEmpresa = $this->_requestParams['id_empresa'];
        $this->view->idProposta = $this->_requestParams['id_proposta'];
        $this->view->idStatusProposta = $rowProposta['id_status'];
        $this->view->idUsuarioResponsavelTipoChamado = $rowTipoChamado['id_responsavel'];
        $this->view->nomeSegurado = $rowProposta['ds_nome_proponente'];
        $this->view->idDeparmento = Sistema_Model_Departamentos::AGRO_TECNICA;
        $this->view->idTipoChamado = Atendimento_Model_TipoChamado::TECNICA_CONFIRMAR_CONTATO;
        $this->view->pendenciasVistoriador = (new Seguro_Model_PendenciasVistoriador())->fetchAll(
            ['id_departamento = ' . Sistema_Model_Departamentos::AGRO_TECNICA], 'id'
        )->toArray();
    }
}
