<?php

class Sinistro_ProcessoController extends Agro_Controller_Action {

	public function getForm($dados) {
		return new Sinistro_Form_PesquisaProcesso(array("dados"=>$dados));
	}
	public function getModel() { return new Sinistro_Model_Processos(); }

	public function init() {
		$this->view->title = 'Sinistro » Processos';

		$this->session = new Zend_Session_Namespace('laudo_final');
		$this->session->unsetAll();
	}

	public function editAction() {
		$TipoLiquidacao = new Sinistro_Model_TipoLiquidacao();
		$Processos = new Sinistro_Model_Processos();
		$this->view->title .= " » Editar";

		// Faz upload do arquivo
		if ($this->getRequest()->isPost()) {
			$this->savefile($this->getRequest()->getPost());
		}

		$this->view->processo = $Processos->getRow($this->getRequest()->getParam('id'));
		$this->view->form_file = new Sinistro_Form_UploadArquivoProcesso();
	}

	public function regulacaoperdasAction() {}

	public function indexAction() {
		$this->view->title .= " » Listagem";

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

		$dados = array(
			"empresa_vistoriadora" => false,
			"show_status" => true
		);

		if($User->tp_usuario != 'F') {
			$Funcionario = new Sistema_Model_Funcionarios();

			$dados = array(
				"empresa_vistoriadora" => $Funcionario->getIdEmpresaByIdUsuario($User->id),
				"show_status" => false
			);
		}

		$this->view->form = $this->getForm($dados);
		$this->view->tp_usuario = $User->tp_usuario;
	}

	public function getFilter() {
		$field = $this->getRequest()->getParam('tipo_pesquisa');
		$value = trim($this->getRequest()->getParam('valor_pesquisa'));

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

		$where = array();

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

					$filter['field'] = 'id_endosso';
					$filter['operator'] = '=';
					$filter['value'] = $endosso['id_endosso'];
						
				} else {
					$filter['field'] = 'id_endosso';
					$filter['operator'] = '=';
					$filter['value'] = $this->getRequest()->getParam('valor_pesquisa');					
				}

				$where[] = $filter;

			} else if(!is_numeric($value)) {
				$filter['field'] = $field;
				$filter['operator'] = 'ilike';
				$filter['value'] = "%".$value."%";

				$where[] = $filter;


			}elseif($field == 'id_aviso'){
				$where[] = array(
					'field' => 'id_proposta',
					'operator' => 'in',
					'value' => '(select id_proposta from sinistro.avisos where id = '.$value.')'
				);

			} else {
				$filter['field'] = $field;
				$filter['operator'] = '=';
				$filter['value'] = $value;

				$where[] = $filter;
			}


			/*else{
				$where[] = array('field' => $field,'operator' => $operator,'value' => $value);
			}*/

		}

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

		if ($this->getRequest()->getParam('safras')) {
			$where[] = array(
					'field' => 'id_safra',
					'operator' => '>=',
					'value' => $this->getRequest()->getParam('safras')
			);
		}
				
		if ($this->getRequest()->getParam('ds_nome_proponente')) {
			$where[] = array(
				'field' => 'ds_nome_proponente',
				'operator' => 'like',
				'value' => "%".$this->getRequest()->getParam('ds_nome_proponente')."%"
			);
		}

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

		if ($this->getRequest()->getParam('avisos_colheita') != null ) {

			$bo = $this->getRequest()->getParam('avisos_colheita') ? 'true' : 'false';

 			$where[] = array(
				'field'    => 'id_proposta',
				'operator' => 'in',
				'value'    => '(select id_proposta from sinistro.avisos_inicio where fl_novo = '.$bo.')'
			);
 		}

		$arr = array("id_status_preliminar", "preliminares_pendentes", "id_status_final", "finais_pendentes");

		$validar_status = true;
		foreach ($arr as $campo){
			if (array_key_exists($campo, $this->getRequest()->getParams())){
				$validar_status = false;
			}
		}

		// só vai utilizar o filtro de safra caso não tenha sido estipulada uma proposta específica.
		if (!(($User->id_empresa == 20) && ($field == "id_proposta") && ($this->getRequest()->getParam('valor_pesquisa') <> ''))) {
			if ($this->getRequest()->getParam('id_safra') && $validar_status) {
				if ($this->getRequest()->getParam('id_safra') != "TODAS"){
					$where[] = array(
						'field' => 'id_safra',
						'operator' => '=',
						'value' => $this->getRequest()->getParam('id_safra')
					);
				}
			}
		}

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

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

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

		if ($User->tp_usuario != "F"){
			$where[] = array(
				'field' => 'id_status',
				'operator' => '<>',
				'value' => Agro_Util::status("CANCELADO", "SP")
			);
		}

		if ($this->getRequest()->getParam('id_status_preliminar')) {
			try {
				$Safras = new Produto_Model_Safras();

				if ($User->tp_usuario == "V"){
					$where2 = " ve.id_empresa = $User->id_empresa and ";

				}else if ($User->tp_usuario == 'C') {
					$where2 = " pc.id_usuario = $User->id ";

				} elseif ($User->tp_usuario == 'P') {
					$where2 = " p.id_usuario_criacao = $User->id ";

				} else {
					$where2 = "";
				}

				$sql = "select distinct
							p.id
						from
							sistema.status s inner join
							sinistro.laudos_preliminares lp on lp.id_status = s.id inner join
							sistema.vistorias_laudos_preliminares vlp on vlp.id_laudo_preliminar = lp.id inner join
							sistema.vistorias_empresas ve on ve.id_vistoria = vlp.id_vistoria inner join
							sinistro.processos proc on proc.id = lp.id_processo inner join
							seguro.propostas p on p.id = proc.id_proposta inner join
							produto.produtos prod on prod.id  = p.id_produto inner join
							seguro.propostas_corretores pc on pc.id_proposta = p.id
						where
							s.fl_ativo = true and
							s.id = ".$this->getRequest()->getParam('id_status_preliminar')." and
							$where2
							prod.id_safra >= ".($this->getRequest()->getParam('safras'))."
				";

				$Row = Zend_Db_Table::getDefaultAdapter()->fetchAll($sql);

				$propostas = array();

				foreach ($Row as $proposta){
					$propostas[] = $proposta["id"];
				}

				$where[] = array(
					'field' => 'id_proposta',
					'operator' => 'in',
					'value' => "(".implode(", ",$propostas).")"
				);

			} catch (Exception $e) {
				dump($e->getMessage());
			}

		}

		if ($this->getRequest()->getParam('id_status_final')) {
			try {
				$Safras = new Produto_Model_Safras();

				if ($User->tp_usuario == "V"){
					$where2 = " ve.id_empresa = $User->id_empresa and ";

				}else if ($User->tp_usuario == 'C') {
					$where2 = " pc.id_usuario = $User->id ";

				} elseif ($User->tp_usuario == 'P') {
					$where2 = " p.id_usuario_criacao = $User->id ";

				} else {
					$where2 = "";
				}

				$sql = "select distinct
							p.id
						from
							sistema.status s inner join
							sinistro.laudos_finais lf on lf.id_status = s.id inner join
							sistema.vistorias_laudos_finais vlf on vlf.id_laudo_final = lf.id inner join
							sistema.vistorias_empresas ve on ve.id_vistoria = vlf.id_vistoria inner join
							sinistro.processos proc on proc.id = lf.id_processo inner join
							seguro.propostas p on p.id = proc.id_proposta inner join
							produto.produtos prod on prod.id  = p.id_produto inner join
							seguro.propostas_corretores pc on pc.id_proposta = p.id
						where
							s.fl_ativo = true and
							s.id = ".$this->getRequest()->getParam('id_status_final')." and
							$where2
							prod.id_safra >= ".($this->getRequest()->getParam('safras'))."
				";

				$Row = Zend_Db_Table::getDefaultAdapter()->fetchAll($sql);

				$propostas = array();

				foreach ($Row as $proposta){
					$propostas[] = $proposta["id"];
				}

				$where[] = array(
					'field' => 'id_proposta',
					'operator' => 'in',
					'value' => "(".implode(", ",$propostas).")"
				);

			} catch (Exception $e) {
				dump($e->getMessage());
			}

		}

		if ($this->getRequest()->getParam('preliminares_pendentes')) {
			$Safras = new Produto_Model_Safras();

			if ($User->tp_usuario == "V"){
				$where2 = " ve.id_empresa = $User->id_empresa and ";

			}else if ($User->tp_usuario == 'C') {
				$where2 = " pc.id_usuario = $User->id ";

			} elseif ($User->tp_usuario == 'P') {
				$where2 = " p.id_usuario_criacao = $User->id ";

			} else {
				$where2 = "";
			}

			$sql = "select distinct
						p.id
					from
						sinistro.avisos a inner join
						seguro.propostas p on p.id = a.id_proposta inner join
						seguro.propostas_corretores pc on pc.id_proposta = p.id inner join
						produto.produtos prod on prod.id = p.id_produto inner join
						sinistro.vistorias_avisos va on va.id_aviso = a.id inner JOIN
						sistema.vistorias v on v.id = va.id_vistoria inner JOIN
						sistema.vistorias_empresas ve on ve.id_vistoria = v.id inner join
						sistema.tipos_vistoria tv on tv.id = v.id_tipo
					where
						va.id_vistoria not in (select id_vistoria from sistema.vistorias_laudos_preliminares) and
						$where2
						tv.ds_chave_tipos_vistoria = 'PRELIMINAR' and
						prod.id_safra = ".($this->getRequest()->getParam('id_safra'));


			$Row = Zend_Db_Table::getDefaultAdapter()->fetchAll($sql);

			$propostas = array();

			foreach ($Row as $proposta){
				$propostas[] = $proposta["id"];
			}

			$where[] = array(
				'field' => 'id_proposta',
				'operator' => 'in',
				'value' => "(".implode(", ",$propostas).")"
			);

		}

		if ($this->getRequest()->getParam('finais_pendentes')) {
			$Safras = new Produto_Model_Safras();

			if ($User->tp_usuario == "V"){
				$where2 = " ve.id_empresa = $User->id_empresa and ";

			}else if ($User->tp_usuario == 'C') {
				$where2 = " pc.id_usuario = $User->id ";

			} elseif ($User->tp_usuario == 'P') {
				$where2 = " p.id_usuario_criacao = $User->id ";

			} else {
				$where2 = "";
			}

			$sql = "select distinct
						p.id
					from
						sinistro.avisos a inner join
						seguro.propostas p on p.id = a.id_proposta inner join
						seguro.propostas_corretores pc on pc.id_proposta = p.id inner join
						produto.produtos prod on prod.id = p.id_produto inner join
						sinistro.vistorias_avisos va on va.id_aviso = a.id inner JOIN
						sistema.vistorias v on v.id = va.id_vistoria inner JOIN
						sistema.vistorias_empresas ve on ve.id_vistoria = v.id inner join
						sistema.tipos_vistoria tv on tv.id = v.id_tipo
					where
						va.id_vistoria not in (select id_vistoria from sistema.vistorias_laudos_finais) and
						$where2
						tv.ds_chave_tipos_vistoria = 'PRELIMINAR' and
						prod.id_safra >= ".($this->getRequest()->getParam('id_safra'));

			$Row = Zend_Db_Table::getDefaultAdapter()->fetchAll($sql);

			$propostas = array();

			foreach ($Row as $proposta){
				$propostas[] = $proposta["id"];
			}

			$where[] = array(
				'field' => 'id_proposta',
				'operator' => 'in',
				'value' => "(".implode(", ",$propostas).")"
			);

		}

		return $where;
	}

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

		if ($this->getRequest()->getParam('id')) {
			$Processos = new Sinistro_Model_Processos();
			$Processo = $Processos->find($this->getRequest()->getParam('id'))->current();
			$this->getResponse()->setBody($Processo->area());
		}
	}

	public function unidadesatingidasAction() {
		$ItensSegurados = new Seguro_Model_ItensSegurados();
		$this->getHelper('layout')->disableLayout();

		$this->view->id_laudo_preliminar = $this->getRequest()->getParam('id_laudo_preliminar');
		$this->view->id_laudo_final = $this->getRequest()->getParam('id_laudo_final');

		if ($this->view->id_laudo_final) {
			$LaudosFinais = new Sinistro_Model_LaudosFinais();
			$Laudo = $LaudosFinais->find($this->view->id_laudo_final)->current();
		}

		$this->view->unidades = $Laudo->itensAtingidos();
		$this->view->processo = $Laudo->processo();
		$this->view->laudo = $Laudo->getLaudo();
	}

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

		$this->view->id_laudo_preliminar = $this->getRequest()->getParam('id_laudo_preliminar');
		$this->view->id_laudo_final = $this->getRequest()->getParam('id_laudo_final');

		if ($this->view->id_laudo_final) {
			$LaudosFinais = new Sinistro_Model_LaudosFinais();
			$Laudo = $LaudosFinais->find($this->view->id_laudo_final)->current();
		}

		$this->view->processo = $Laudo->processo();
		$this->view->proposta = $this->view->processo->proposta();
	}

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

		try {
			if ($this->getRequest()->getParam('id_laudo_final') && $this->getRequest()->getParam('id_processo')) {
				$Itens = new Sinistro_Model_LaudosFinaisItensSegurados();
				$Itens->delete($this->getRequest()->getParam('id_laudo_final'));

				if (is_array($this->getRequest()->getParam('itens_segurados'))) {
					foreach ($this->getRequest()->getParam('itens_segurados') as $item) {
						$Itens->save(array(
							'id_laudo_final' => $this->getRequest()->getParam('id_laudo_final'),
							'id_item_segurado' => $item
						));
					}
				}
			}

			$this->getResponse()->setBody("$.loadItensAtingidos();");
		} catch (Exception $e) {
			$this->getResponse()->setBody("alert('Ocorreu um erro ao salvar os dados.');");
		}
	}

	public function viewAction()
    {
        //caso a procedência seja da tela de listagem de seguro/propostas manda de volta para lá
        $this->view->back = "/sinistro/processo";
        if ($this->getRequest()->getParam('from') == 'prop') {
            $this->view->back = 'javascript:history.go(-1);';
        }

        $modelProcesso = new Sinistro_Model_Processos();
        $idProcesso = $this->getRequest()->getParam('id');

        $this->view->processo = $modelProcesso->find($idProcesso)->current();
        $this->view->proposta = $this->view->processo->proposta();
        $this->view->proponente = $this->view->processo->proponente();

        $arSafra = $this->view->proposta->safra();
        $this->view->safra = $arSafra['id'];

        //Cria objeto do form de upload de arquivos de proposta
        $this->view->formUpload = new Sinistro_Form_UploadArquivoProcesso();

        if ($this->getRequest()->isPost() && $this->view->formUpload->isValid($this->getRequest()->getPost())) {
            $this->saveFile($this->getRequest()->getPost());
        }

        $this->view->formUpload->id_processo->setValue($idProcesso);

        // Busca dados do processo
        $this->view->title .= ' » Visualização';
        $this->view->data = $this->getRow();

        // Busca status do processo
        $this->view->data['ds_status_processo'] = $modelProcesso->getChaveStatus($idProcesso);

        //Busca os beneficiários
        $this->view->data['beneficiarios'] = (new Seguro_Model_PropostasBeneficiarios())->getBeneficiarios(
            $this->view->data['id_proposta']
        );

        //Busca o tipo de usuário
        $this->view->data['tp_usuario'] = Zend_Auth::getInstance()->getIdentity()->tp_usuario;

        // Busca avisos pelo id da proposta
        $this->view->data['avisos'] = (new Sinistro_Model_AvisosSinistro())->getAvisosByProposta(
            $this->view->data['id_proposta'],
            'ACEITO'
        );

        // Busca quantidade de avisos de inicio de colheita existentes para a proposta
        $arAvisosInicio = (new Sinistro_Model_AvisosInicio())->getAvisosInicioByProposta(
            $this->view->data['id_proposta']
        );
        $this->view->data['arAvisosInicio'] = $arAvisosInicio;

        // Busca quantidade de avisos de encerramento de colheita existentes para a proposta
        $arAvisosEncerramento = (new Sinistro_Model_AvisosEncerramento())->getAvisosEncerramentoByProposta(
            $this->view->data['id_proposta']
        );
        $this->view->data['arAvisosEncerramento'] = $arAvisosEncerramento;

        // Busca arquivos da proposta
        $processoArquivo = new Sinistro_Model_ProcessosArquivos();

        if ($this->view->processo['fl_lista_arquivos_cpf']) {
            $this->view->data['arquivos'] = $processoArquivo->getProcessosArquivosCpf($idProcesso);
        } else {
            $this->view->data['arquivos'] = $processoArquivo->getProcessosArquivos($idProcesso);
        }

        // Busca combo com status de arquivos de processos
        $status = new Sistema_Model_Status();
        $this->view->data['comboStatusArquivos'] = $status->getComboStatusArquivos('ARQUIVOS_PROCESSO_SINISTRO');

        //Busca revisor dos arquivos do processo
        $processo = $modelProcesso->getRow($idProcesso);
        $ModelFuncionarios = new Sistema_Model_Funcionarios();

        $this->view->revisorArquivos = array();
        $this->view->revisorArquivos['nomeRevisor'] = $ModelFuncionarios->getNomeUsuarioByIdUsuario(
            $processo->id_revisor_arquivos
        );
        $this->view->revisorArquivos['dataRevisao'] = $processo->dt_revisao_arquivos;

        // Busca o código do status dos arquivos (cd_status) do processo
        $cd_status = $status->getCodigoById($this->view->data['id_status_arquivos']);
        $this->view->data['cd_status_arquivos'] = $cd_status;

        // Busca observações referentes aos arquivos da Proposta/Processo
        $processosObservacoesArquivos = new Sinistro_Model_ProcessosObservacoesArquivos();
        $arProcessosObservacoesArquivos = $processosObservacoesArquivos->getObservacoesArquivosByProcesso($idProcesso);
        $this->view->data['ar_processos_observacoes_arquivos'] = $arProcessosObservacoesArquivos;

        // Busca informacões sobre Vistoria Previa
        $arInfoVistoriaPrevia = (new Seguro_Model_VistoriaPreviaEmpresa())->getStatusAnaliseByProposta(
            $this->view->data['id_proposta']
        );
        $this->view->data['ar_vistorias_previa'] = $arInfoVistoriaPrevia;

        //só entrar aqui se o produto tem prévia
        $modelLvp001 = new Regulacao_Model_Lvp001();
        foreach ($this->view->data['ar_vistorias_previa'] as $vistoria) {
            $arLaudo = $modelLvp001->getLaudo($vistoria['id_proposta_vistoria']);

            if ($arLaudo['id'] > 0) {
                $this->view->data['ar_laudos'][$vistoria['id_proposta_vistoria']] = $arLaudo['id'];
            }
        }

        $this->view->formAgRevistoria = new Sinistro_Form_AgendamentoRevistoria();

        $f = (new Sistema_Model_Funcionarios())->fetchRow('id_usuario = ' . Zend_Auth::getInstance()->getIdentity()->id);
        $idEmpresaUserLogado = $f['id_empresa'];

        $processoEmpresa = new Sinistro_Model_ProcessosEmpresas();
        $isEmpresaAtiva = $processoEmpresa->isEmpresaAtiva($idProcesso, $idEmpresaUserLogado);
        $this->view->isEmpresaAtiva = $isEmpresaAtiva;

        // Busca observações do processo
        $processosObservacoes = new Sinistro_Model_ProcessosObservacoes();
        $arProcessosObservacoes = $processosObservacoes->getObservacoesByProcesso($idProcesso);
        $this->view->data['ar_processos_observacoes'] = $arProcessosObservacoes;

        // Busca chamados de SINISTRO
        $chamados = new Atendimento_Model_Chamado();
        $chamadosSinistro = $chamados->getData(
            "c.id_departamento = 23 AND c.id_proposta = " . $this->view->data['id_proposta']
        );
        $this->view->data['chamados'] = $chamadosSinistro;

        //Busca observações da proposta
        $proposta = (new Seguro_Model_PropostasObservacoes())->getInformacoesAdicionaisEndosso(
            $this->view->proposta->id_endosso
        );
        $this->view->data['observacoesProposta'] = $proposta;

        //Popula os campos no questionário
        $this->view->rendas = Agro_Db_Table_Abstract::getDefaultAdapter()->fetchPairs(
            'select id, ds_faixa_remuneracao from sistema.faixa_remuneracao order by id'
        );

        $sql = "select id, ds_nome_atividade_economica ";
        $sql .= " from sistema.atividades_economicas ";
        $sql .= "where fl_ativo is true ";
        $sql .= "order by ds_nome_atividade_economica";

        $this->view->atividades_economicas = Agro_Db_Table_Abstract::getDefaultAdapter()->fetchPairs($sql);

        //só entrar aqui se o produto tem prévia
        // Carrega listagem de vistorias previas digitalizadas
        $proposta = (new Seguro_Model_Propostas())->find($this->view->data['id_proposta'])->current();

        $VP = array();
        $modelVistoriaPreviaEmpresaArquivos = new Seguro_Model_Vistoriapreviaempresaarquivos();

        foreach ($this->view->data['ar_vistorias_previa'] as $files) {
            $rowArquivos = $modelVistoriaPreviaEmpresaArquivos->getArquivos((int)$files['id_proposta_vistoria']);

            foreach ($rowArquivos as $arq) {
                $x = array();
                $x['id'] = $arq['id'];
                $x['id_proposta_vistoria'] = $arq['id_proposta_vistoria'];
                $x['nome_arquivo'] = $arq['ds_nome_arquivo'];
                array_push($VP, $x);
            }
        }
        $this->view->data['previas'] = $VP;

        $this->view->informacoes_bancarias = (new Seguro_Model_InformacoesBancarias())->getInformacoesBancarias(
            $this->view->data['id_proposta']
        );
    }

	public function savefile(array $post) {
		// Obtém o arquivo do upload
		$adapter = new Zend_File_Transfer_Adapter_Http();
		$file = $adapter->getFileInfo();

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

		try {
			// Gera o nome do novo arquivo
			$TipoArquivoProcesso = new Sistema_Model_TipoArquivoProcesso();
			$TipoArquivo = $TipoArquivoProcesso->fetchRow($TipoArquivoProcesso->getAdapter()->quoteInto('id = ?', $post['id_tipo_arquivo']))->toArray();

			$ProcessoArquivo = new Sinistro_Model_ProcessosArquivos();
			$id = $ProcessoArquivo->nextSequenceId();
			
			$Processo = new Sinistro_Model_Processos();
			$RowProcesso = $Processo->find($post['id_processo']);
			$Proponente = $Processo->getProponenteProcesso($post['id_processo']);

			$countArquivos = $ProcessoArquivo->getCountTipoArquivo($Proponente['cpf_cnpj'], $post['id_tipo_arquivo']);
			if($countArquivos < 1){
			    $countArquivos = 1;
			} else {
			    $countArquivos += 1;
			}
            $extensao = strtolower(end(explode('.', $file['arquivo']['name'])));

			$cpf_cnpj = str_replace(".", "", $Proponente['cpf_cnpj']);
			$cpf_cnpj = str_replace("-", "", $cpf_cnpj);
			$cpf_cnpj = str_replace("/", "", $cpf_cnpj);

			if($TipoArquivo['ds_chave_tipo_arquivo'] == 'LIQUIDACAO'){
				$nomeArquivo = $RowProcesso[0]['id_proposta']."_".$TipoArquivo['ds_chave_tipo_arquivo']."_".$countArquivos.".".$extensao;
			} else {
				$nomeArquivo = $cpf_cnpj."_".$TipoArquivo['ds_chave_tipo_arquivo']."_".$countArquivos.".".$extensao;
			}
			$target = APPLICATION_PATH.'/upload_files/sinistro_processo/'.$nomeArquivo;

			// Faz o upload do arquivo
			$adapter->addFilter('Rename', array(
				'source' => $file['arquivo']['tmp_name'],
				'target' => $target,
				'overwrite' => true)
			);
			$adapter->receive();

			// Salva registro na tabela processos_arquivos
			$data = array();
			$data['id']              = $id;
			$data['id_processo']     = $post['id_processo'];
			$data['id_tipo_arquivo'] = $post['id_tipo_arquivo'];
			$data['ds_nome_arquivo'] = $nomeArquivo;
			$ProcessoArquivo->insert($data);

			/*
            $Processo = $Processos->getRow($post['id_processo']);
            $idStatus = $Processos->getIdStatus('NAO_ENVIADO', 'ARQUIVOS_PROCESSO_SINISTRO');
            if($idStatus == $Processo->id_status_arquivos) {
                $Processo->id_status_arquivos = $Processos->getIdStatus('NAO_ANALISADO', 'ARQUIVOS_PROCESSO_SINISTRO');
                $Processo->save();
            }
            */

            if(
				$TipoArquivo['ds_chave_tipo_arquivo'] != 'LIQUIDACAO'
				&& $TipoArquivo['ds_chave_tipo_arquivo'] != 'DIFERENCA_LIQUIDACAO'
			){
            	$RowProcesso = $Processo->getRow($post['id_processo']);
            	$RowProcesso->id_status_arquivos = $Processo->getIdStatus('NAO_ANALISADO', 'ARQUIVOS_PROCESSO_SINISTRO');
            	$RowProcesso->save();
            }

            $Db->commit();

			$this->_redirect('/sinistro/processo/view/id/'.$this->getRequest()->getParam('id_processo'));
		} catch (Exception $e) {
			$Db->rollback();
			$this->view->showMessage(MSG_ERROR."<br />".$e->getMessage(), 'error');
		}
	}

	public function deletefileAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		$ProcessoArquivo = new Sinistro_Model_ProcessosArquivos();

		if ($this->getRequest()->getParam('id')) {
			$Row = $ProcessoArquivo->getRow($this->getRequest()->getParam('id'));

			$dados['id_processo'] = $this->getRequest()->getParam('id_processo');
			$dados['ds_nome_usuario'] = Agro_Util::getUserName(Zend_Auth::getInstance()->getIdentity()->id);
			$dados['ds_nome_arquivo'] = $Row->ds_nome_arquivo;

			try {
			    $Row->fl_ativo = '0';
				$Row->save();

				//$ModelProcessoObs = new Sinistro_Model_ProcessosObservacoes();
				//$ModelProcessoObs->saveObservacaoExclusao($dados);

				$ModelProcessoObsArquivos = new Sinistro_Model_ProcessosObservacoesArquivos();
				$ModelProcessoObsArquivos->saveObservacaoExclusao($dados);

			} catch (Exception $e) {
				$Row->save();
			}

			$result = array('status' => true, 'id' => $this->getRequest()->getParam('id'));
			$this->getResponse()->setBody(Zend_Json::encode($result));
		} else {
			$this->getResponse()->setBody(Zend_Json::encode(array('status' => false)));
		}
	}

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

		Agro_File::connect_ftp('ftp.nobre.com.br', 'agrobrasil', 'brasil2011', 'AGRICOLA');

		if ($this->getRequest()->getParam('id')) {
		    $ModelProcessoArquivo = new Sinistro_Model_ProcessosArquivos();
			$Row = $ModelProcessoArquivo->getProcessosArquivos($this->getRequest()->getParam('id_processo'),false,$this->getRequest()->getParam('id'));
			$Row = $Row[0];
			$path = "DOCUMENTOS/";
            if($Row['ds_chave_tipo_arquivo'] == 'LIQUIDACAO'){
                $path = "SINISTRO/";
            }
			try {
				if (file_exists(APPLICATION_PATH.'/upload_files/sinistro_processo/'.$Row['ds_nome_arquivo'])) {
				    $r_file = $Row['ds_nome_arquivo'];
                    $file   = APPLICATION_PATH.'/upload_files/sinistro_processo/'.$Row['ds_nome_arquivo'];
                    if (!Agro_File::send_file_ftp($path.$r_file, $file, FTP_BINARY)) {
                         $return = array('status' => false, 'message' => 'Erro ao efetuar FTP de documento(s).');
                    } else {
                        $ProcessoArquivo = $ModelProcessoArquivo->find($this->getRequest()->getParam('id'))->current();
                        $ProcessoArquivo->fl_transmitido_seguradora = true;
                        $ProcessoArquivo->save();
                    }
				}
			} catch (Exception $e) {
				die($e);
			}

			$return = array('status' => true, 'message' => MSG_SUCCESS);
		} else {
			$this->getResponse()->setBody(Zend_Json::encode(array('status' => false)));
		}
		$this->getResponse()->setBody(Zend_Json::encode($return));
	}

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

		if ($this->getRequest()->getParam('ar_arquivoss_proposta') && $this->getRequest()->getParam('id_processo')) {

		    $ProcessoArquivo = new Sinistro_Model_ProcessosArquivos();

		    $data = array('fl_conferido'=>0);
		    $ProcessoArquivo->update($data, "id_processo=".$this->getRequest()->getParam('id_processo'));

		    $data = array('fl_conferido'=>1);

		    $arArquivos = $this->getRequest()->getParam('ar_arquivoss_proposta');
		    foreach($arArquivos as $id_arquivo) {
		        $ProcessoArquivo->update($data, 'id_processo='.$this->getRequest()->getParam('id_processo').' and id='.$id_arquivo);
		    }
		}

		$this->_redirect('/sinistro/processo/view/id/'.$this->getRequest()->getParam('id_processo'));
	}

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

		if (trim($this->getRequest()->getParam('ds_observacao'))) {
			$ProcessosObservacoes = new Sinistro_Model_ProcessosObservacoes();
			$nomeArquivo = '';

			if (!$_FILES['arquivo']['error']) {
				$extensao = strtolower(end(explode('.', $_FILES['arquivo']['name'])));
				$nomeArquivo = $this->getRequest()->getParam('id_processo').date('ymdhis').".$extensao";
				$target = APPLICATION_PATH.'/upload_files/sinistro_processo/'.$nomeArquivo;

				copy($_FILES['arquivo']['tmp_name'], $target);
			}

			$id = $ProcessosObservacoes->insert(array(
				'ds_observacao' => $this->getRequest()->getParam('ds_observacao'),
				'id_processo' => $this->getRequest()->getParam('id_processo'),
				'ds_nome_arquivo' => $nomeArquivo
			));
		} else if (trim($this->getRequest()->getParam('ds_observacao_arquivos'))) {
			$ProcessosObservacoesArquivos = new Sinistro_Model_ProcessosObservacoesArquivos();
			$ProcessosObservacoesArquivos->insert(array(
				'ds_observacao_arquivos' => $this->getRequest()->getParam('ds_observacao_arquivos'),
				'id_processo' => $this->getRequest()->getParam('id_processo')
			));
		}

		$this->_redirect('/sinistro/processo/view/id/'.$this->getRequest()->getParam('id_processo'));
	}

	public function atualizastatusarquivosAction() {
        $this->isAjax();
		
        $date = new Zend_Date();

        $idStatus = $this->getRequest()->getParam('id_status_arquivos');
        $idProcesso = $this->getRequest()->getParam('id_processo');
        $idRevisor = Zend_Auth::getInstance()->getIdentity()->id;

        $result = array();

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

        try {
            $Processos = new Sinistro_Model_Processos();
            //$arProcesso = $Processos->getProcessosCpfCnpj($idProcesso);

            $ModelFuncionarios = new Sistema_Model_Funcionarios();
            $nomeRevisor = $ModelFuncionarios->getNomeUsuarioByIdUsuario($idRevisor);

            //foreach($arProcesso as $Processo){
                $rowProcesso = $Processos->getRow($this->getRequest()->getParam('id_processo'));
                $rowProcesso->id_status_arquivos  = $idStatus;
                $rowProcesso->id_revisor_arquivos = $idRevisor;
               	$rowProcesso->dt_revisao_arquivos = $date->get(Zend_Date::W3C);

                $rowProcesso->save();

                $ModelObsArq = new Sinistro_Model_ProcessosObservacoesArquivos();
                $ModelObsArq->saveObservacaoAlteracaoStatus($this->getRequest()->getParam('id_processo'), $idStatus, $nomeRevisor);
            //}

            if($idStatus == 108){
				(new Sinistro2_Service_AtualizarStatusLiquidacaoAposConclusaoAnalise())->executar($rowProcesso->id_proposta, $idProcesso);
				
            	$dataRevisao = Agro_Util::formatDate($Processos->getDataRevisaoArquivos($idProcesso), Zend_Date::DATES);
            	$result = array('status' => true, 'nomeRevisor' => $nomeRevisor, 'dataRevisao' => $dataRevisao);
            }else{
            	$result = array('status'=>true);
            }

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

        } catch (Exception $e) {
			Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
            $result = array('status'=>false,'error'=>$e->getMessage());
        }

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

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

		$id_proposta = $this->getRequest()->getParam('id_proposta');

		$Pendencias = new Atendimento_Model_Pendencia();
		$this->view->pendenciasSinistro = $Pendencias->getPendenciasProposta($id_proposta);

		$Propostas = new Seguro_Model_Propostas();

		$Proposta = $Propostas->getRow($id_proposta);

		$this->view->chamadosSinistro = $Proposta->chamados('23');

	}

	public function buscachamadosinistroAction(){
		$this->getHelper('layout')->disableLayout();
		$id_proposta = $this->getRequest()->getParam('id_proposta');

		$Pendencias = new Atendimento_Model_Pendencia();
		$this->view->pendencias = $Pendencias->getPendenciasProposta($id_proposta,'PENDENCIA_DOCUMENTOS_SINISTRO');

		$Propostas = new Seguro_Model_Propostas();

		$Proposta = $Propostas->getRow($id_proposta);

		$this->view->chamados = $Proposta->chamados('PENDENCIA_DOCUMENTOS_SINISTRO');

		$dados = array('id_proposta' => $id_proposta);
		$this->view->data = $dados;
	}

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

		$id_proposta = $this->getRequest()->getParam('id_proposta');
		$ds_observacao_pendencia = $this->getRequest()->getParam('ds_observacao_pendencia');

		$pendencias = $this->getRequest()->getParam('pendencia');
		foreach($pendencias as $pendencia){
			$body .= $pendencia."\n";
		}
		$body .= $ds_observacao_pendencia;

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

		$dados = array(
			'id_tipo_chamado' => $TipoChamado->getIdTipoChamado('PENDENCIA_DOCUMENTOS_SINISTRO'),
			'id_prioridade' => $Prioridade->getIdPrioridade('NORMAL'),
			'id_departamento' => $Departamento->getDepartamentoEmpresa("03.486.745/0001-09", "SINISTRO"),
			'id_proposta' => $id_proposta,
			'ds_descricao' => $body
		);

		if($Chamado->save($dados)){
			$result["mensagem"] = "- Pendência cadastrada com sucesso! \n- Status dos arquivos alterado!";
			$result["status"] = true;
		}else{
			$result["mensagem"] = "Erro ao cadastrar pendência!";
		}

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

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

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

		$result = array("status"=>true, "message"=>"Questionário salvo com sucesso");

		try {
			$ProcessoQuestionarios = new Sinistro_Model_ProcessosQuestionarios();

			$ProcessoQuestionarios->save($params['questionario'], $params["id_processo"]);

		} catch (Exception $e) {
			$result["status"]=false;
			$result["message"]="Não foi possível salvar o questionário. Erro: ".$e->getMessage();

		}

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


	public function savefileliquidacaoAction(array $post) {

		// Obtém o arquivo do upload
		$adapter = new Zend_File_Transfer_Adapter_Http();
		$file = $adapter->getFileInfo();

		$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
		$Db->beginTransaction();
		try {
			// Gera o nome do novo arquivo
			$TipoArquivoProcesso = new Sistema_Model_TipoArquivoProcesso();
			$tipo = $TipoArquivoProcesso->fetchRow($TipoArquivoProcesso->getAdapter()->quoteInto('id = ?', $post['id_tipo_arquivo']))->toArray();

			$ProcessoArquivo = new Sinistro_Model_ProcessosArquivos();
			$id = $ProcessoArquivo->nextSequenceId();

			$extensao = strtolower(end(explode('.', $file['arquivo']['name'])));

			$nomeArquivo = "{$post['id_processo']}.$id.{$tipo['ds_chave_tipo_arquivo']}.$extensao";
			$target = APPLICATION_PATH.'/upload_files/sinistro_processo/'.$nomeArquivo;

			// Faz o upload do arquivo
			$adapter->addFilter('Rename', array(
				'source' => $file['arquivo']['tmp_name'],
				'target' => $target,
				'overwrite' => true)
			);
			$adapter->receive();

			// Salva registro na tabela processos_arquivos
			$data = array();
			$data['id'] = $id;
			$data['id_processo'] = $post['id_processo'];
			$data['id_tipo_arquivo'] = $post['id_tipo_arquivo'];
			$data['ds_nome_arquivo'] = $nomeArquivo;

			$ProcessoArquivo->insert($data);

			// Se o status dos arquivos do processo for 'não enviado', altera para 'pendente'

			$Processos = new Sinistro_Model_Processos();

            $Processo = $Processos->getRow($post['id_processo']);
            $idStatus = $Processos->getIdStatus('NAO_ENVIADO', 'ARQUIVOS_PROCESSO_SINISTRO');
            if($idStatus == $Processo->id_status_arquivos) {
                $Processo->id_status_arquivos = $Processos->getIdStatus('NAO_ANALISADO', 'ARQUIVOS_PROCESSO_SINISTRO');
                $Processo->save();
            }

			$Db->commit();

			$this->_redirect('/sinistro/processo/view/id/'.$this->getRequest()->getParam('id_processo'));
		} catch (Exception $e) {
			$Db->rollback();
			$this->view->showMessage(MSG_ERROR."<br />".$e->getMessage(), 'error');
		}
	}

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

		$ModelObsArq = new Sinistro_Model_ProcessosObservacoesArquivos();
		if($ModelObsArq->delete($this->getRequest()->getParam('id'))){
			$return['message'] = 'Observação de arquivo excluída com sucesso!';
		}else{
			$return['message'] = 'Erro ao excluir observação de arquivo!';
		}
		$this->getResponse()->setBody(Zend_Json::encode($return));
	}


	public function fotosAction() {
		$idLaudo = $this->getRequest()->getParam('id_laudo');
		$idVistoria = $this->getRequest()->getParam('id_vistoria');

		$this->view->id_laudo = $idLaudo;
		$this->view->id_vistoria = $idVistoria;

		$Model = new Sinistro_Model_LaudosFinaisArquivos();

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

			if($dados['id_laudo'] && $_FILES) {
				$this->salvaArquivo($idLaudo, 'laudofinal');
			}
		}

		$fotos = $Model->getLaudoFotos($idLaudo);

		$this->view->fotos = $fotos;

	}

	public function fotospreliminarAction() {
		$idLaudo = $this->getRequest()->getParam('id_laudo');
		$idVistoria = $this->getRequest()->getParam('id_vistoria');

		$this->view->id_laudo = $idLaudo;
		$this->view->id_vistoria = $idVistoria;

		$Model = new Sinistro_Model_LaudosPreliminaresArquivos();

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

			if($dados['id_laudo'] && $_FILES) {
				$this->salvaArquivo($idLaudo, 'laudopreliminar');
			}
		}

		$this->view->fotos = $Model->getLaudoFotos($idLaudo);

	}


	public function salvaArquivo($id_laudo, $tipo_laudo) {
		// Inicializa o Adaptador de transferencia de arquivos
		$Adapter = new Zend_File_Transfer();
		$Adapter->setDestination(APPLICATION_PATH.'/upload_files/'.$tipo_laudo.'/');

		if($tipo_laudo == 'laudofinal'){
			$ModelFotos = new Sinistro_Model_LaudosFinaisArquivos();
		}else{
			$ModelFotos = new Sinistro_Model_LaudosPreliminaresArquivos();
		}
		
		$files = $Adapter->getFileInfo();

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

			$name = $id_laudo . $file['name'];
			$arr['ds_nome_arquivo'] = $name;
			$arr['id_laudo'] = $id_laudo;

			$Adapter->addFilter('Rename', array('target' => APPLICATION_PATH . '/upload_files/'.$tipo_laudo.'/' . $name, 'overwrite' => true));

			if(!$Adapter->receive($file['name'])){
				//$this->view->showMessage('Não foi possível salvar o arquivo.', 'error');
				$this->getResponse()->setBody(Zend_Json::encode('Não foi possível salvar o arquivo!'));
			} else {
				$ModelFotos->save($arr);
				//$this->getResponse()->setBody(Zend_Json::encode('Arquivo salvo com sucesso!'));
			}
		}
	}

	public function editfileAction() {
		$TipoArquivoProcesso = new Sistema_Model_TipoArquivoProcesso();
		$TipoArquivo = $TipoArquivoProcesso->fetchRow($TipoArquivoProcesso->getAdapter()->quoteInto('id = ?', $this->getRequest()->getParam('id_tipo_arquivo')))->toArray();

	    $ModelProcessoArquivo = new Sinistro_Model_ProcessosArquivos();
		$Row = $ModelProcessoArquivo->getArquivo($this->getRequest()->getParam('id_arquivo'));
		$Row = $Row[0];

		$ProcessoArquivo = new Sinistro_Model_ProcessosArquivos();
		$id = $ProcessoArquivo->nextSequenceId();

		$Processo = new Sinistro_Model_Processos();
		$RowProcesso = $Processo->find($Row['id_processo']);
		$Proponente = $Processo->getProponenteProcesso($Row['id_processo']);

		$countArquivos = $ProcessoArquivo->getCountTipoArquivo($Proponente['cpf_cnpj'], $this->getRequest()->getParam('id_tipo_arquivo'));
		if($countArquivos < 1){
		    $countArquivos = 1;
		} else {
		    $countArquivos += 1;
		}
        $extensao = strtolower(end(explode('.', $Row['ds_nome_arquivo'])));

		$cpf_cnpj = str_replace(".", "", $Proponente['cpf_cnpj']);
		$cpf_cnpj = str_replace("-", "", $cpf_cnpj);
		$cpf_cnpj = str_replace("/", "", $cpf_cnpj);

		if($TipoArquivo['ds_chave_tipo_arquivo'] == 'LIQUIDACAO'){
			$nomeArquivo = $RowProcesso[0]['id_proposta']."_".$TipoArquivo['ds_chave_tipo_arquivo']."_".$countArquivos.".".$extensao;
		} else {
			$nomeArquivo = $cpf_cnpj."_".$TipoArquivo['ds_chave_tipo_arquivo']."_".$countArquivos.".".$extensao;
		}
		$old = APPLICATION_PATH.'/upload_files/sinistro_processo/'.$Row['ds_nome_arquivo'];
		$target = APPLICATION_PATH.'/upload_files/sinistro_processo/'.$nomeArquivo;

        rename($old, $target);
        $ProcessoArquivo = $ModelProcessoArquivo->find($this->getRequest()->getParam('id_arquivo'))->current();
        $ProcessoArquivo->fl_transmitido_seguradora = 0;
        $ProcessoArquivo->id_tipo_arquivo = $this->getRequest()->getParam('id_tipo_arquivo');
        $ProcessoArquivo->ds_nome_arquivo = $nomeArquivo;
        $ProcessoArquivo->save();

        $this->_redirect('/sinistro/processo/view/id/'.$Row['id_processo']);
    }

	public function deletefotoAction() {
		$this->isAjax();
		$Model = new Sinistro_Model_LaudosFinaisArquivos();
		$result = array();

		try {
			if ($Model->delete($this->getRequest()->getParam('id'))) {
				$result = MSG_SUCCESS;

			} else {
				$result = MSG_ERROR;
			}
		} catch (Exception $e) {
			$result = $this->view->escape(MSG_DELETE_FK_ERROR);

		}

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

	}

	public function deletefotopreliminarAction() {
		$this->isAjax();
		$Model = new Sinistro_Model_LaudosPreliminaresArquivos();
		$result = array();

		try {
			if ($Model->delete($this->getRequest()->getParam('id'))) {
				$result = MSG_SUCCESS;

			} else {
				$result = MSG_ERROR;
			}
		} catch (Exception $e) {
			$result = $this->view->escape(MSG_DELETE_FK_ERROR);

		}

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

	}

	public function savequestionarioAction(){
		$this->isAjax();
		$Model = new Seguro_Model_PropostasProponentes();

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

		if($Model->saveQuestionario($dados)){
			$return = "Dados gravados com sucesso!";
		}else{
			$return = "Erro ao gravar dados!";
		}

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

	public function editararquivoAction(){
		$this->isAjax(true);
		$this->view->formUpload = new Sinistro_Form_UploadArquivoProcesso();
		$this->view->formUpload->populate($this->getRequest()->getParams());
	}

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

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

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

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

			$ModelProcesso = new Sinistro_Model_Processos();
			$ModelProcessoObs = new Sinistro_Model_ProcessosObservacoes();

			$Processo = $ModelProcesso->find($params["id"])->current();

			if ($Processo){
				$Processo->id_status = Agro_Util::status("CANCELADO", "SP");

				$ProcessoObs = $ModelProcessoObs->createRow();
				$ProcessoObs->id_processo = $Processo->id;
				$ProcessoObs->ds_observacao = "Processo <b>CANCELADO</b>.<br><b>Motivo: </b>".str_ireplace("\n", "<br>", $params["ds_motivo_cancelamento"]);

			}

			$Processo->save();
			$ProcessoObs->save();

			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 processo.<br>Erro: {$e->getMessage()}";
		}

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

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

		$result = array("status"=>true, "message"=>"Processo reativado");

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

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

			$ModelProcesso = new Sinistro_Model_Processos();
			$ModelProcessoObs = new Sinistro_Model_ProcessosObservacoes();

			$Processo = $ModelProcesso->find($params["id"])->current();

			if ($Processo){
				$Processo->id_status = Agro_Util::status("ABERTO_REGULACAO", "SP");

				$ProcessoObs = $ModelProcessoObs->createRow();
				$ProcessoObs->id_processo = $Processo->id;
				$ProcessoObs->ds_observacao = "Processo <b>REATIVADO</b>.<br><b>Motivo: </b>".str_ireplace("\n", "<br>", $params["ds_motivo_reativacao"]);

			}

			$Processo->save();
			$ProcessoObs->save();

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

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

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

	public function encaminharliquidacaoAction(){
		$this->isAjax(true);
		$Model = new Sinistro_Model_Processos();

		$Form = new Sinistro_Form_EncaminharLiquidacao();

		$Form->populate($this->getRequest()->getParams());

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

		$this->view->processo = $Model->find($this->getRequest()->getParam("id_processo"))->current();
	}

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

		$result = array("status"=>true, "message"=>"Processo encaminhado para liquidação");
		Zend_Db_Table::getDefaultAdapter()->beginTransaction();

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

			$Model = new Sinistro_Model_Processos();
			$ModelObs = new Sinistro_Model_ProcessosObservacoes();
			$ModelChamado = new Atendimento_Model_Chamado();

			$Processo = $Model->find($params["id_processo"])->current();
			$AtualResponsavel = $Processo->responsavelLiquidacao();

			$Processo->id_usuario_responsavel_liquidacao = $params["id_usuario"];

			$Processo->save();

			/**
			 *Verifica chamados abertos sob responsabilidade de terceiros e atribui responsabilidade ao novo usuario
			 */
			$Chamados = $ModelChamado->fetchAll("id_proposta = $Processo->id_proposta and id_departamento = 23 and id_responsavel <> {$params["id_usuario"]}");

			$chamados = array();
			if ($Chamados->count()){
				foreach ($Chamados as $Chamado) {
					$Chamado->id_responsavel = $params["id_usuario"];
					$Chamado->save();

					$chamados[] = $Chamado->id;
				}
			}

			$NovoResponsavl = $Processo->responsavelLiquidacao();

			$Obs = $ModelObs->createRow();
			$Obs->id_processo = $params["id_processo"];

			if ($AtualResponsavel){
				$Obs->ds_observacao = "Transferiu a responsabilidade da liquidação do processo de <b>$AtualResponsavel->ds_nome_funcionario</b> para <b>$NovoResponsavl->ds_nome_funcionario</b>.";

			} else {
				$Obs->ds_observacao = "Tornou <b>$NovoResponsavl->ds_nome_funcionario</b> responsável pela liquidação do processo.";
			}

			if (count($chamados)){
				$Obs->ds_observacao .= " O usuário também assume a responsabilidade pelos chamados ".implode(", ", $chamados).".";
			}

			$Obs->save();

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

		} catch (Exception $e) {
			Zend_Db_Table::getDefaultAdapter()->rollBack();
			$result["status"] = false;
			$result["message"] = "Não foi possível encaminhar o processo para liquidação.";

			Agro_Util::informaErroAgronet($e->getMessage());
		}

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

	// verifica se existe um aviso ou processo de sinistro aberto
	public function existesinistroAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();

		if ($this->getRequest()->getParam('id_proposta')) {
			$ModelProposta = new Seguro_Model_Propostas();
			$Proposta = $ModelProposta->getRow($this->getRequest()->getParam('id_proposta'));
			$ModelProcesso = $this->getModel();
			$ModelAviso = new Sinistro_Model_AvisosSinistro();

			// verifica se existem aviso (qualquer status) para proposta em questão
			$avisos = $ModelAviso->checkAvisoByProposta($this->getRequest()->getParam('id_proposta'));
			if ($avisos <= 0) {
				// verifica se existem algum processo de sinistro aberto para a apólice
				//$processos = $ModelProcesso->getProcessoAtivoProposta($this->getRequest()->getParam('id_proposta'));
			}

			if (($Proposta->id <> $Proposta->proposta_mae()) && ($processos <= 0)) {
				// verifica se existem aviso (qualquer status) para proposta mãe
				$avisos = $ModelAviso->checkAvisoByProposta($Proposta->proposta_mae());
				if ($avisos <= 0) {
					// verifica se existem algum processo de sinistro aberto para a apólice mãe
					//$processos = $ModelProcesso->getProcessoAtivoProposta($Proposta->proposta_mae());
				}
			}
		}

		if (($avisos > 0) || ($processos > 0)) {
			$result = true;
		} else {
			$result = false;
		}

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

}
