<?

class Sinistro_AgendamentovistoriapreliminarController extends Agro_Controller_Action{
		
	public function formAction() {
		$this->getHelper('layout')->disableLayout();	    
	    
	    $this->view->formAgVistoriaPreliminar = new Sinistro_Form_AgendamentoVistoriaPreliminar();
	    
		if ($this->getRequest()->getParam('id_cobertura') && $this->getRequest()->getParam('id_proposta')) {
			$AvisoSinistro = new Sinistro_Model_AvisosSinistro();
			$avisos = array();
			
			$idProposta  = $this->getRequest()->getParam('id_proposta');
			$idCobertura = $this->getRequest()->getParam('id_cobertura');
			$idProcesso = $this->getRequest()->getParam('id_processo');
			if($this->getRequest()->getParam('id_vistoria')) {
			    $idVistoria = $this->getRequest()->getParam('id_vistoria');
			} else {
			    $idVistoria = 0;
			}

			$ProcessoEmpresa = new Sinistro_Model_ProcessosEmpresas();
			$idEmpresaProcesso = $ProcessoEmpresa->getEmpresaByProcesso($idProcesso);
			
			$dadosForm = array();
			
			// Busca os avisos que já foram ou não selecionados no agendamento
			$data = array('avisos'=>array());

			if($idVistoria != 0) {
			    $avisos_vistoria = $AvisoSinistro->getAvisosByVistoriaCobertura($idProposta, $idCobertura, $idVistoria);
				$avisos_disponiveis = $AvisoSinistro->getAvisosByCobertura($idCobertura, $idProposta, 'PRELIMINAR', false);
				
				$avisos = array_merge($avisos_vistoria, $avisos_disponiveis);

				$data['avisos'] = $avisos;
				
				//Busca empresa, vistoriador, turno e data da vistoria
				$Agendamento = new Sistema_Model_Agendamentos();
				$dadosForm = $Agendamento->getAgendamento($idVistoria);
				
			} else {
				$avisos = $AvisoSinistro->getAvisosByCobertura($idCobertura, $idProposta, 'PRELIMINAR' , false);
				$data['avisos'] = $avisos;
			}

			$dadosForm['id_empresa'] = $idEmpresaProcesso;
			$dadosForm['id_cobertura'] = $idCobertura;
			$dadosForm['id_vistoria'] = $idVistoria;
			$dadosForm['id_proposta'] = $idProposta;

			$this->view->formAgVistoriaPreliminar->populate($dadosForm);
			
			$this->view->data = $data;
		}		
	}
	
	public function saveagendamentoAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		
		$ModelProposta = new Seguro_Model_Propostas();
		$Proposta = $ModelProposta->find($this->getRequest()->getParam('id_proposta'))->current();

		if($Proposta->vigencia(Agro_Util::formatDate($this->getRequest()->getParam('dt_agendamento'), Zend_Date::W3C))){
			if ($this->getRequest()->getParam('id_vistoria') == 0) {
				$this->insertagendamento();
			} else {
				$this->updateagendamento();
			}
		} else {
			$datas = $Proposta->vigencia();
			$datas[0] = Agro_Util::formatDate($datas[0], Zend_Date::DATES);
			$datas[1] = Agro_Util::formatDate($datas[1], Zend_Date::DATES);
			
			$this->getResponse()->setBody(Zend_Json::encode(array(
				"status"	=> false,
				"message"	=> "A data do agendamento está fora da vigência da proposta.\nA vigência da proposta é de {$datas[0]} até {$datas[1]}"
			)));
		}
	}
	
	public function insertagendamento() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		
		$post = $this->getRequest()->getParams();
		
		$result = array('status' => true, "message"=>"Vistoria agendada com sucesso");
		
		$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
		$Db->beginTransaction();
		try {
					
			//Inclusão na tabela vistorias
			$Vistoria = new Sistema_Model_Vistorias();
			$id_tipo = $Vistoria->getIdTipoVistoria('PRELIMINAR');
			$data = array('id_tipo' => $id_tipo);
			$idVistoria = $Vistoria->insert($data);
				
			// Inclusão na tabela agendamentos
			$Agendamento = new Sistema_Model_Agendamentos();
			$data = array(
				'ds_turno'   	 => $post['ds_turno_agendamento'],
				'dt_agendamento' => Agro_Util::formatDate($post['dt_agendamento'], Zend_Date::W3C)
			);
			$idAgendamento = $Agendamento->insert($data);
			
			// Inclusão na tabela vistorias_agendamentos
			$VistoriaAgendamento = new Sistema_Model_VistoriasAgendamentos();
			$data = array(
				'id_vistoria' 	 => $idVistoria,
				'id_agendamento' => $idAgendamento
			);
			$VistoriaAgendamento->insert($data);
			
			// Inclusão na tabela vistorias_coberturas
			$VistoriaCobertura = new Sistema_Model_VistoriasCoberturas();
			$data = array(
				'id_vistoria' => $idVistoria,
				'id_cobertura' => $post['id_cobertura']
			);
			$VistoriaCobertura->insert($data);
			
			
			// Inclusão na tabela vistorias_empresas
			$VistoriaEmpresa = new Sistema_Model_VistoriasEmpresas();
			$data = array(
				'id_vistoria' => $idVistoria,
				'id_empresa' => $post['id_empresa']
			);
			$VistoriaEmpresa->insert($data);
			
			
			// Inclusão na tabela vistorias_avisos
			$VistoriaAviso = new Sinistro_Model_VistoriasAvisos();
			foreach($post['avisos'] as $aviso){
				$VistoriaAviso->insert(array('id_vistoria'=>$idVistoria,'id_aviso'=>$aviso));
			}
			
			$Db->commit();
			
		} catch (Exception $e) {
			$Db->rollback();
			$result["status"] = false;
			$result["message"] = "Não foi possível realizar a operação.\nErro: $e->getMessage()";
		}
		
		$this->getResponse()->setBody(Zend_Json::encode($result));
	}
	
	public function updateagendamento() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		
		$post = $this->getRequest()->getParams();
		
		$result = array('status' => true, "message"=>"Vistoria atualizada com sucesso");
		
		$idVistoria = $post['id_vistoria'];
		
		$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
		$Db->beginTransaction();
		try {	
			//Buscar id_agendamento da vistoria
			$VistoriaAgendamento = new Sistema_Model_VistoriasAgendamentos();
			$ag = $VistoriaAgendamento->fetchRow($VistoriaAgendamento->getAdapter()->quoteInto('id_vistoria = ?',$idVistoria))->toArray();
			$idAgendamento = $ag['id_agendamento'];
			
			// Update na tabela agendamentos;
			$Agendamento = new Sistema_Model_Agendamentos();
			$data = array(
				'ds_turno'  	 => $post['ds_turno_agendamento'],
				'dt_agendamento' => Agro_Util::formatDate($post['dt_agendamento'], Zend_Date::W3C)
			);
			$Agendamento->update($data, 'id = ' . $idAgendamento);
			
			// Exclui avisos antigos
			$VistoriaAviso = new Sinistro_Model_VistoriasAvisos();
			$VistoriaAviso->delete($idVistoria);
			
			// Insere novos relacionamentos entre vistoria e avisos
			foreach($post['avisos'] as $aviso){
				$VistoriaAviso->insert(array('id_vistoria'=>$idVistoria,'id_aviso'=>$aviso));
			}
			
			$Db->commit();
			
		} catch (Exception $e) {
			$Db->rollback();
			$result["status"] = false;
			$result["message"] = "Não foi possível realizar a operação.\nErro: $e->getMessage()";
		}
		
		$this->getResponse()->setBody(Zend_Json::encode($result));
	}
	
	public function excluiragendamentoAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		
		$Json = new Zend_Json();
		
		$idVistoria = $this->getRequest()->getParam('id_vistoria');
		
		
		$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
		$Db->beginTransaction();
		try {	
			//Buscar id_agendamento da vistoria
			$VistoriaAgendamento = new Sistema_Model_VistoriasAgendamentos();
			$ag = $VistoriaAgendamento->fetchRow($VistoriaAgendamento->getAdapter()->quoteInto('id_vistoria = ?',$idVistoria))->toArray();
			$idAgendamento = $ag['id_agendamento'];
		
			// Exclui vistoria
			$Vistoria = new Sistema_Model_Vistorias();
			$Vistoria->delete($idVistoria);
			
			// Exclui agendamento
			$Agendamento = new Sistema_Model_Agendamentos();
			$Agendamento->delete($idAgendamento);
			
			$Db->commit();
			
		} catch (Exception $e) {
			$Db->rollback();
			$this->getResponse()->setBody("ERRO: \n\n" . $e->getMessage());
		}
	}
}