<?php

class Nobre_ProcessoController extends Agro_Controller_Action {

	public function getForm() { return new Nobre_Form_PesquisaProcesso(); }
	public function getModel() { return new Nobre_Model_Processos(); }

	public function init() { $this->view->title = 'Seguradora » Processos'; }

	public function indexAction() {
		$this->view->title .= " » Listagem";

		$this->view->form = $this->getForm();

		$User = Zend_Auth::getInstance()->getIdentity();
		if ($User->tp_usuario != 'F') {
			$Funcionario = new Sistema_Model_Funcionarios();
			$idEmpresa = $Funcionario->getIdEmpresaByIdUsuario($User->id);
			$this->view->form->init($idEmpresa);
			unset($this->view->form->id_status);
		}

		$this->view->tp_usuario = $User->tp_usuario;
	}

	public function viewAction() {
		$this->isAjax(true);

		$Processos = new Nobre_Model_Processos();
		$this->view->processo = $Processos->getRow($this->getRequest()->getParam('id'));
		$this->view->form = new Nobre_Form_Upload();

		// Busca dados do processo
		$this->view->title .= ' » Visualização';
		$this->view->data = $this->getRow();

		// Busca quantidade de avisos de encerramento de colheita existentes para a proposta
		$AvisosEncerramento = new Sinistro_Model_AvisosEncerramento();
        $arAvisosEncerramento = $AvisosEncerramento->getAvisosEncerramentoByProposta($this->view->data['id_proposta']);
        $this->view->data['arAvisosEncerramento'] = $arAvisosEncerramento;

        //Busca observações da proposta
        $PropostasObs = new Seguro_Model_PropostasObservacoes();
        $rsObs= $PropostasObs->getInformacoesAdicionais($this->view->data['id_proposta']);
        $this->view->data['observacoesProposta'] = $rsObs;

   		//Busca os beneficiários
		$Beneficiarios = new Seguro_Model_PropostasBeneficiarios();
		$this->view->data['beneficiarios'] = $Beneficiarios->getBeneficiarios($this->view->data['id_proposta']);

        $ProcessoArquivo = new Sinistro_Model_ProcessosArquivos();
        
        if($this->view->processo['fl_lista_arquivos_cpf']){
        	$this->view->data['arquivos'] = $ProcessoArquivo->getProcessosArquivosCpf($this->getRequest()->getParam('id'));
        } else {
        	$this->view->data['arquivos'] = $ProcessoArquivo->getProcessosArquivos($this->getRequest()->getParam('id'));
        }        

	}

	public function arquivosAction() {
		$this->isAjax(true);

		$Processos = new Nobre_Model_Processos();
		$this->view->processo = $Processos->getRow($this->getRequest()->getParam('id'));
	}

	public function deleteAction() {
		$this->isAjax();

		$ProcessoArquivo = new Sinistro_Model_ProcessosArquivos();
		$Row = $ProcessoArquivo->getRow($this->getRequest()->getParam('id'));

		$sanitizedPath = realpath(APPLICATION_PATH.'/upload_files/sinistro_processo/'.$Row->ds_nome_arquivo);

		if (file_exists($sanitizedPath)) {
			unlink($sanitizedPath);
		}

		$ProcessoArquivo->delete($Row->id);
	}

	public function uploadAction() {
		$ProcessoArquivo = new Sinistro_Model_ProcessosArquivos();
		$Processos = new Sinistro_Model_Processos();
		$this->isAjax();

		Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();
		try {
			if (!$_FILES['arquivo']['error']) {
				$Processo = $Processos->getRow($this->getRequest()->getParam('id_processo'));
				$extensao = strtolower(end(explode('.', $_FILES['arquivo']['name'])));
				$Row = $ProcessoArquivo->createRow();

				$Row->id_tipo_arquivo = $this->getRequest()->getParam('id_tipo_arquivo');
				$Row->id_processo = $this->getRequest()->getParam('id_processo');
				$Row->ds_nome_arquivo = $_FILES['arquivo']['name'];

				if ($Row->save()) {
					$fileName = "{$Row->id_processo}.{$Row->id}.{$Row->id_tipo_arquivo}.{$extensao}";
					$destination = APPLICATION_PATH.'/upload_files/sinistro_processo/'.$fileName;

					if (copy($_FILES['arquivo']['tmp_name'], $destination)) {
						$this->getResponse()->setBody('<script>alert("ATENÇÃO\n\nArquivo cadastrado com sucesso.");window.top.window.loadArquivos();</script>');
						$Row->ds_nome_arquivo = $fileName;
						$Row->save();

						$Processo->id_status_arquivos = $ProcessoArquivo->getIdStatus('NAO_ANALISADO', 'ARQUIVOS_PROCESSO_SINISTRO');
						$Processo->save();

						Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
					} else {
						$this->getResponse()->setBody('<script>alert("ATENÇÃO\n\nNão foi possível copiar o arquivo para a pasta de destino.");</script>');
						Agro_Db_Table_Abstract::getDefaultAdapter()->rollBack();
					}
				} else {
					$this->getResponse()->setBody('<script>alert("ATENÇÃO\n\nNão foi possível relacionar o arquivo com o processo.");</script>');
					Agro_Db_Table_Abstract::getDefaultAdapter()->rollBack();
				}
			} else {
				$this->getResponse()->setBody('<script>alert("ATENÇÃO\n\nOcorreu um erro ao importar o arquivo.");</script>');
			}
		} catch (Exception $e) {
			$this->getResponse()->setBody('<script>alert("ATENÇÃO\n\n'.$e->getMessage().'");</script>');
			Agro_Db_Table_Abstract::getDefaultAdapter()->rollBack();
		}
	}

	public function getFilter() {
		$field = $this->getRequest()->getParam('tipo_pesquisa');
		$value = trim($this->getRequest()->getParam('valor_pesquisa'));
		$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')))->toArray();

				$filter['field'] = 'id_endosso';
				$filter['operator'] = '=';
				$filter['value'] = $endosso['id_endosso'];

				$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;
			}

			//$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('id_status')) {
			$where[] = array(
				'field' => 'id_status',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('id_status')
			);
		}

		if ($this->getRequest()->getParam('id_safra')) {
			$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')
			);
		}

		return $where;
	}
}
