<?php

class Safra12_LaudopreviaController extends Agro_Controller_Action {
	public function init() {
		$this->view->title = 'Gerência de Vistorias Prévias';
		$Model = new Sistema_Model_Empresas();
		$this->id_empresa = $Model->getIdEmpresaUsuarioCorrente();
	}
	
	public function getModel() {
		return new Safra12_Model_Laudoprevia();
	}

	public function getForm() {
		$Form = new Seguro_Form_VistoriaPrevia();
		//$Form->setIdEmpresa($this->id_empresa);
		return $Form;
	}
 
	/**
	 * Monta a tela de digitação de laudo.
	*/
	public function indexAction() {
		
		$this->view->form = $this->getForm();
		$dados = $this->getRequest()->getParams();

		$this->view->id_laudo = $this->getRequest()->getParam('id_vistoria_previa_laudo');
		$Model = $this->getModel();
		
		if($dados['readonly']) {
			$this->view->readonly = 1;
		}

		if($dados['novolaudo']) {
			//cria novos laudo e folha
			$retorno = $Model->criaLaudoFolha($dados);
			$dados['id_folha'] = $retorno['id_folha'];
			$this->view->id_laudo = $retorno['id_vistoria_previa_laudo'];
			$this->view->beforeunload = 1;
		}

		//busca o codigo da folha, atraves da folha atual
		if($dados['cd_numero_folha']) {
			$dados['id_folha'] = $Model->getIdFolhaPagina($dados);
		}
		
		//se nao veio id_folha, deve vir o id_vistoria_previa_laudo
		if(!$dados['id_folha']) {
			$dados['id_folha'] = $Model->getFolha($dados['id_vistoria_previa_laudo']);
		}
		
		//busca os atributos 
		$atributos = $Model->getAtributos($dados);
		
		if ($this->getRequest()->isPost()) {
			$this->salvalaudoAction($dados);
		}

		if($dados['novafolha']) {
			//cria nova folha somente
			$ModelFolha = new Safra12_Model_LaudoPreviaFolha();
			$retorno = $ModelFolha->save($dados);
			$dados['id_folha'] = $retorno['id_folha'];
		}
		
		//passa os dados pra view
		$this->view->id_folha = $dados['id_folha'];
		$this->view->dadosFolha = $Model->getQtdLaudosFolhas($dados['id_folha']);
		
		//busca os atributos de novo para que a atualização seja levada em conta
		$atributos = $Model->getAtributos($dados);
		$this->view->atributos = $atributos;
		$dadosProposta = $Model->getDadosProposta($dados['id_folha']);
		$this->view->dadosProposta = $dadosProposta;		
		$this->view->endereco = $Model->getEndereco($dadosProposta['id'], $dados['id_folha']);
		$this->view->endereco['nome_estado'] = $Model->getEstado($this->view->endereco['id_estado']);
		$this->view->endereco['nome_municipio'] = $Model->getMunicipio($this->view->endereco['id_municipio']);
		$responsavel = new Sistema_Model_Funcionarios();

		$this->view->dadosProposta['nome_responsavel'] = $responsavel->getNomeUsuarioByIdUsuario($dadosProposta['id_usuario_criacao']); 
		$this->view->dadosProposta['nome_empresa_responsavel'] = $responsavel->getEmpresaByIdUsuario($dadosProposta['id_usuario_criacao']);

		//busca qual schema pra mandar
		$Safra = new Produto_Model_Safras();
		$this->view->schema = $Safra->getSafraModel($dadosProposta['id']);
		$this->view->id_proposta = $dadosProposta['id'];
		//$this->view->respostas = $ModelResposta->getRespostas($dados['id_folha']);
		
		$User = Zend_Auth::getInstance()->getIdentity();
		$this->view->tp_usuario = $User->tp_usuario;

	}

	
	public function salvalaudoAction(array $dados){
		$Model = $this->getModel();
		$ret = $Model->save($dados);
		//remonta o array pra ser mais facil de trabalhar com ele
		$arr_atributos = array();
		$atributos = $Model->getAtributos($dados);
		foreach($atributos as $attr) {
			$arr_atributos[$attr['id']] = $attr;
		}

		//salva os atributos - 4 colunas 
		$ModelResposta = new Safra12_Model_LaudoPreviaFolhaResposta();
		$ModelResposta->delete($dados['id_folha'], 'id_vistoria_previa_laudo_folha');

		if($dados['atributo']){
			for($i = 0; $i < 4; $i++) {
				foreach($dados['atributo'][$i] as $id => $resposta) {
					$arr = array();
					$arr['id_atributo_rn'] = $id;
					$resp = $resposta;
					if(is_array($resposta)) {
						$resp = implode('|', $resposta);
					}
					$arr['ds_resposta'] = $resp;
					$arr['id_vistoria_previa_laudo_folha'] = $dados['id_folha'];
					$arr['ds_label_pergunta'] = $arr_atributos[$id]['ds_descricao_atributo'];
					$ret = $ModelResposta->save($arr);
					if(!$ret) {
						break;
					}
				}
			}
		}
		//salva os atributos - pertencentes � folha
		if($dados['folha']){
			foreach($dados['folha'] as $id => $resposta) {
				$arr = array();
				$arr['id_atributo_rn'] = $id;
				$arr['ds_resposta'] = $resposta;
				$arr['id_vistoria_previa_laudo_folha'] = $dados['id_folha'];
				$arr['ds_label_pergunta'] = $arr_atributos[$id]['ds_descricao_atributo'];
				$ret = $ModelResposta->save($arr);
				if(!$ret) {
					break;
				}
			}
		}
		if($ret) {
			$this->view->sucesso = 1;
		} else {
			$this->view->sucesso = 0;
		}
		
	}	
	
	
	public function listalaudosAction() {
		$this->getHelper('layout')->disableLayout();
		$Model = $this->getModel();
		$dados = $this->getRequest()->getParams();
		
		$this->view->laudos = $Model->getLaudos($dados);
		$this->view->id_proposta_vistoria = $dados['id_proposta_vistoria'];
		$idProposta = $Model->getPropostaVistoria($dados['id_proposta_vistoria']);
		
		$Safra = new Produto_Model_Safras();
		$this->view->schema = $Safra->getSafraModel($idProposta);
	}
	
	public function salvaArquivo($id_vistoria_previa_laudo) {
		// Inicializa o Adaptador de transferencia de arquivos
		$Adapter = new Zend_File_Transfer_Adapter_Http();
		$Adapter->setDestination(APPLICATION_PATH.'/upload_files/laudoprevia/');
		$ModelArquivos = new Safra12_Model_Laudopreviaarquivos();
		// Percorre todos os arquivos postados
		foreach ($Adapter->getFileInfo() as $tipo => $file) {
			if ($file['name'] == '') {
				continue;
			}
			$name = time() . "_" . $id_vistoria_previa_laudo . $file['name'];
			$arr['ds_nome_arquivo'] = $name;
			$arr['id_vistoria_previa_laudo'] = $id_vistoria_previa_laudo;
			if($tipo == 'croqui') {
				$arr['tp_arquivo'] = 'C';
			} else {
				$arr['tp_arquivo'] = 'F';
			}
			$Adapter->addFilter('Rename', array('target' => APPLICATION_PATH . '/upload_files/laudoprevia/' . $name, 'overwrite' => true));
			
			if(!$Adapter->receive($file['name'])){
				$this->view->showMessage('Não foi possível salvar o arquivo.', 'error');
			} else {
				$ModelArquivos->save($arr);
			}
		}
	}
	
	
	public function deletearquivoAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		$Model = new Safra12_Model_Laudopreviaarquivos();
		$result = array();
		
		try {
			if ($Model->delete($this->getRequest()->getParam('id'))) {
				$result['message'] = MSG_SUCCESS;
				$result['status'] = true;
			} else {
				$result['message'] = MSG_ERROR;
				$result['status'] = false;
			}
		} catch (Exception $e) {
			$result['message'] = $this->view->escape(MSG_DELETE_FK_ERROR);
			$result['status'] = false;
		}
		
		$this->getResponse()->setBody(Zend_Json::encode($result));
	}
	
	
	
/**
	 * Monta a tela de digitação de laudo.
	*/
	public function arquivoAction() {
		$this->view->form = $this->getForm();
		$dados = $this->getRequest()->getParams();
		$Model = $this->getModel();
		
		$dadosProposta = $Model->getDadosProposta('', $dados['id_vistoria_previa_laudo']);
		$this->view->dadosProposta = $dadosProposta;
		$ModelArquivos = new Safra12_Model_Laudopreviaarquivos();
		
		if($this->getRequest()->isPost()) {
			$dados = $this->getRequest()->getParams();
			
			if($dados['id_vistoria_previa_laudo'] && $_FILES) {
				$this->salvaArquivo($dados['id_vistoria_previa_laudo']);
			}
		}
		
		$arr = $ModelArquivos->getComboArquivos($dados['id_vistoria_previa_laudo']);
		$this->view->croqui = $arr['C'];
		$this->view->fotos = $arr['F'];
		$this->view->id_vistoria_previa_laudo = $dados['id_vistoria_previa_laudo'];
		//busca qual schema pra mandar
		$Safra = new Produto_Model_Safras();
		$this->view->schema = $Safra->getSafraModel($dadosProposta['id']);
	}
	
	/*
	 * Monta a tela de copia dos dados, do(s) laudo(s) de vistoria prévia para a proposta
	 */
	public function copiardadosAction() {
		$Model = $this->getModel();
		$dados = $this->getRequest()->getParams();
		$id_laudo = $Model->getLaudoFromProposta($dados);
		$endereco = $Model->getEndereco($dados['id'], '', $id_laudo);
		$this->view->endereco = $endereco;
		
		$id_proposta = $this->getRequest()->getParam('id');
		$ModelInutil = new Seguro_Model_PropostaLoad($id_proposta);
		$Proposta = new Zend_Session_Namespace('proposta');
		$this->view->propostaLoad = $Proposta;
		
		
		$ModelPropostas = new Seguro_Model_Propostas();
		$ModelPropostas->carregaProposta($Proposta->proposta['id_produto'], $Proposta->proposta['id_corretor'], $Proposta->proposta['id_preposto'], $Proposta->segurado['cpf_cnpj']=false);
		$ModelArquivosProposta = new Seguro_Model_PropostasArquivos();
		$ModelArquivos = new Safra12_Model_Laudopreviaarquivos();
		$this->view->croqui = $ModelArquivos->getComboCroquiSolicitacaoProposta($id_proposta);
		
		if($this->getRequest()->isPost()) {
			$dados['id_produto'] = $Proposta->proposta['id_produto'];
			$dados['id_proposta'] = $id_proposta;
			
			//faz a copia da proposta:
			$ModelPropostas->copiarProposta($id_proposta);
			$ret = $this->salvaUnidades($dados);
			//se copiou as quadras
			if(!empty($ret)) {
				$erro = $ret;
			} 
			//copia o endereco se foi marcado
			if($dados['copiar_endereco'] && empty($erro)) {
				$Propriedade = new Seguro_Model_PropostasPropriedades();
				$endereco['ds_endereco_propriedade'] = $endereco['ds_endereco'];
				$endereco['ds_endereco_cep_propriedade'] = $endereco['ds_endereco_cep'];
				$endereco['id_municipio_propriedade'] = $endereco['id_municipio'];
				$endereco['ds_endereco_bairro_propriedade'] = $endereco['ds_endereco_bairro'];
			
				if(!$Propriedade->save($endereco, $id_proposta)) {
					$erro[] = "Não foi possível copiar o Endereço para a Proposta!";
				}
			}
			//copia os croquis se foram marcados
			if($dados['croqui'] && empty($erro)) {
				
				//deleta os arquivos atuais
				$ModelArquivosProposta->delete($id_proposta, 'id_proposta');
				//move os novos arquivos para a pasta certa
				foreach($dados['croqui'] as $index => $croqui) {
					///agronet/file/viewchamado/name/
					$path = APPLICATION_PATH . '/upload_files/laudoprevia/' . $croqui;
					$pathDestino = APPLICATION_PATH.'/upload_files/croqui/' . $croqui;
					try {
						copy($path, $pathDestino);
						$arr['id_proposta'] = $id_proposta;
						$arr['ds_nome_arquivo'] = $croqui;
						$ModelArquivosProposta->saveCroquiSimples($arr);
						
					}catch (Exception $e) {
						$erro[] = 'Erro ao mover o arquivo: ' . $croqui;
					}
				}
			}
				
					
			
		}
		$this->view->retorno = $erro;
		$this->view->respostas = $Model->getRespostas($dados['id']);
		
		//pega novamente os arquivos
		$this->view->croqui = $ModelArquivos->getComboCroquiSolicitacaoProposta($id_proposta);
		$this->view->croquiProposta = $ModelArquivosProposta->getPropostasArquivos($id_proposta);
	}
	
	public function salvaUnidades($data) {
		//Salva os questionarios da proposta
		$ItensSegurados = new Seguro_Model_ItensSegurados();
		$return = array();
		
		$Atributos = new Produto_Model_Atributos();
		$producaoGarantida = $Atributos->getAtributos('PROPRIEDADE', $data['id_produto'], 'PROD_PRODUCAO_GARANTIDA');
		
		// Verifica se ha unidades seguradas
		if (is_array($data['unidade'])) {
			
			// Percorre unidades
			foreach ($data['unidade'] as $nro => $item) {
				if(!$data["ckeck_unidade_$nro"]) {
					continue;
				}
				
				// Atribui o numero do item
				$item['nr_item_segurado'] = $nro;
				
				// Verifica producao garantida
				if ($producaoGarantida['ds_valor']) {
					
					// Aplica Regra RN_IS_04
					$item = Agro_Regras::RN_IS_04($item);
					if ($item->error) {
						$return['message'] = "Item $nro: ".$item->message;
						break;
					}
				}
				
				// Aplica Regra RN_IS_02
				$item = Agro_Regras::RN_IS_02($item, $data);
				if ($item->error) {
					$return['message'] = "Item $nro: ".$item->message;
					break;
				}
				
				// Aplica Regra RN_IS_05
				$item = Agro_Regras::RN_IS_05($item, $data);
				if ($item->error) {
					$return['message'] = "Item $nro: ".$item->message;
					break;
				}
				if (!$ItensSegurados->save($nro, $item, $data['id_proposta'])) {
					$return['message'] .= "Não foi possível salvar a unidade $nro";
				}
			}
			return $return;
		}
	}
}
