<?

class Safra12_LpreplantioController extends Agro_Controller_Action{

	public function init() {
 		$this->session = new Zend_Session_Namespace('laudo_preliminar');
	}

	public function formAction() {
		
 		$this->view->idVistoria  = $this->session->idVistoria;
		$this->view->idCobertura = $this->session->idCobertura;
		$this->view->idProposta  = $this->session->idProposta;
		$this->view->idProcesso  = $this->session->idProcesso;
		$this->view->idLaudoPreliminar = $this->getRequest()->getParam('id');
		
		$this->view->listDadosItens = array();
		$this->view->formDadosVistoria = new Sistema_Form_DadosVistoria;
		$this->view->formAssinatura = new Sinistro_Form_AssinaturaLaudoPreliminar;
		
		$Itens = new Seguro_Model_ItensSegurados();
		$this->view->listItens = $Itens->getItemSeguradoByProposta($this->view->idProposta);
		
		$this->view->vistoriadores = array();

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

		$this->session->userVistoriaMesmaEmpresa = true;
		if ($User->tp_usuario != 'F') {
			$Funcionario = new Sistema_Model_Funcionarios();
			$f = $Funcionario->fetchRow('id_usuario = '.$User->id);
			$idEmpresaUserLogado = $f['id_empresa'];
	
			$VistoriaEmpresa = new Sistema_Model_VistoriasEmpresas();
			$idEmpresaVistoria = $VistoriaEmpresa->getEmpresaByVistoria($this->session->idVistoria);
			
			$this->session->userVistoriaMesmaEmpresa = $idEmpresaUserLogado == $idEmpresaVistoria ? true : false;
		}
		$this->view->userVistoriaMesmaEmpresa = $this->session->userVistoriaMesmaEmpresa;

		$VistoriaAviso = new Sinistro_Model_VistoriasAvisos();
		$this->view->hasVistoriaFinal = $VistoriaAviso->hasVistoriaFinal($this->session->idVistoria, $this->session->idCobertura);

		if ($this->getRequest()->isPost()) {

			$formDadosVistoria  = $this->view->formDadosVistoria;
			$formAssinatura = $this->view->formAssinatura;
			$forms = array($formDadosVistoria, $formAssinatura);
			
			$camposAdicionais[] = array(
				'type'	  => 'checkbox',
				'fields'   => 'vistoriadores',
				'minCheckeds' => 1,
				'label'   => 'Vistoriadores',
				'message' => MSG_ERRO_LP_VISTORIADOR
			);

			$errorMsg = $this->getAllFormErros($forms, $this->getRequest()->getPost(), $camposAdicionais);

			if ($errorMsg) {
				$this->view->formDadosVistoria->populate($this->getRequest()->getParams());
				$this->view->formAssinatura->populate($this->getRequest()->getParams());
				$this->populaCampos($this->getRequest()->getParams());
				$this->view->showMessage($errorMsg, 'error');
			} else {
				$this->save($this->getRequest()->getParams());
			}
		} else if ($this->getRequest()->getParam('id')) {
			
			$row = $this->getRow();

			$this->view->formDadosVistoria->populate($row);
			$this->view->formAssinatura->populate($row);

			$VistoriaFuncionario = new Sistema_Model_VistoriasFuncionarios();
			$this->view->vistoriadores = $VistoriaFuncionario->getVistoriadoresByVistoria($this->session->idVistoria);

			$this->view->fl_evento_nao_constatado = $row['fl_evento_nao_constatado'];
			
			if (!$this->view->fl_evento_nao_constatado) {
		    	$Safra = new Produto_Model_Safras();
				$nomeModel = $Safra->getSafraModel($this->view->idProposta,'LaudosPreliminaresReplantioItensSegurados');
				$LaudoItem = new $nomeModel;
				$arrayLaudoItem = $LaudoItem->getItensLaudoPreliminar($this->view->idLaudoPreliminar);

				foreach ($arrayLaudoItem as $item) {

					$this->view->listDadosItens[$item['id_item_segurado']]['item']               = $item['id_item_segurado'];
					$this->view->listDadosItens[$item['id_item_segurado']]['vl_tamanho_planta']  = $item['vl_tamanho_planta'];
					$this->view->listDadosItens[$item['id_item_segurado']]['ds_coordenadas_s']   = $item['ds_coordenadas_s'];
					$this->view->listDadosItens[$item['id_item_segurado']]['ds_coordenadas_w']   = $item['ds_coordenadas_w'];
					$this->view->listDadosItens[$item['id_item_segurado']]['ds_descricao_danos'] = $item['ds_descricao_danos'];
				}
			}		

			$this->view->ds_observacao = $row['ds_observacao'];
		}
	}

	public function getRow() {
		if ($this->getRequest()->getParam('id')) {
		    $Safra = new Produto_Model_Safras();
			$nomeModel = $Safra->getSafraModel($this->view->idProposta,'LaudosPreliminaresReplantio');
			$Safra = new $nomeModel;
			$row = $Safra->getDataLaudoPreliminar($this->getRequest()->getParam('id'));

			return $row;
		}
	}
	
	public function save(array $post) {
		
		try {
			$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
			$Db->beginTransaction();
			
			/****************************************/
			$VistoriaFuncionarios = new Sistema_Model_VistoriasFuncionarios();
			if ($post['idLaudoPreliminar']) {
				$VistoriaFuncionarios->delete($this->session->idVistoria);
			}
			foreach ($post['vistoriadores'] as $value) {
				$idVistoriador = $value;
				
				$funcionario = array();
				$funcionario['id_funcionario'] = $idVistoriador;
				$funcionario['id_vistoria']    = $this->session->idVistoria;
				
				$VistoriaFuncionarios->insert($funcionario);
			}

			/****************************************/
			$vistoria = array();
			$vistoria['dt_inicio']   = $post['dt_inicio']; 
			$vistoria['dt_fim']      = $post['dt_fim'];
			$vistoria['id']          = $post['idVistoria'];
			
			$Vistorias = new Sistema_Model_Vistorias();
			$Vistorias->update($vistoria, 'id = ' . $post['idVistoria']);

			$AvisoSinistro = new Sinistro_Model_AvisosSinistro();
			$rs = $AvisoSinistro->getAvisosByCoberturaVistoriaPreliminar($this->session->idProposta, $this->session->idCobertura);
			
			if (count($rs) > 0) {
				foreach ($rs as $it) {
					$dtSinistro = Agro_Util::formatDate($it['dt_sinistro'], 'yyyyMMdd');
					if ($dtSinistro) {
						$dtInicio = Agro_Util::formatDate($post['dt_inicio'], 'yyyyMMdd');
						$dtFim    = Agro_Util::formatDate($post['dt_fim'], 'yyyyMMdd');
						if ($it['id_vistoria'] == $this->session->idVistoria) {
							if ($dtInicio < $dtSinistro) {
								throw new Exception('A data da vistoria não pode ser anterior a data do sinistro.');
							}
						} else {
							if (!$it['id_vistoria']) {
								if ($dtInicio >= $dtSinistro) {
									$item = array();
									$item['id_vistoria'] = $this->session->idVistoria;
									$item['id_aviso'] = $it['id_aviso'];
									
									$VistoriaAviso = new Sinistro_Model_VistoriasAvisos();
									$VistoriaAviso->insert($item);
								}
							}
						}
					}
				}				
			}
			/****************************************/
			$laudo = array();
			if (array_key_exists('fl_evento_nao_constatado', $post)) {
				$laudo['fl_evento_nao_constatado'] = $post['fl_evento_nao_constatado'];
			}
			if (array_key_exists('fl_assinatura_regulador', $post)) {
				$laudo['fl_assinatura_regulador'] = $post['fl_assinatura_regulador'];
			}
			if (array_key_exists('fl_assinatura_segurado', $post)) {
				$laudo['fl_assinatura_segurado'] = $post['fl_assinatura_segurado'];
			}
			$laudo['ds_observacao']           = $post['ds_observacao'];
			$laudo['id_status']               = 47;
			$laudo['id_processo']             = $post['idProcesso'];
			$laudo['id_cobertura']            = $post['idCobertura'];
			$LaudosPreliminares = new Sinistro_Model_LaudosPreliminares();
			$idLaudo = '';
			if ($post['idLaudoPreliminar']) {
				$LaudosPreliminares->update($laudo, 'id = ' . $post['idLaudoPreliminar']);
				$idLaudo = $post['idLaudoPreliminar'];
			} else {
				$idLaudo = $LaudosPreliminares->insert($laudo);
			} 
			
			/****************************************/
			$vistoriaLaudo = array();
			$vistoriaLaudo['id_vistoria']         = $post['idVistoria'];
			$vistoriaLaudo['id_laudo_preliminar'] = $idLaudo;
			$VistoriasLaudosPreliminares = new Sistema_Model_VistoriasLaudosPreliminares();
			if (!$post['idLaudoPreliminar']) {
				$VistoriasLaudosPreliminares->insert($vistoriaLaudo);
			}
			 
			/****************************************/
			if (!array_key_exists('fl_evento_nao_constatado', $post)) {
				$SinistroItensSegurados = new Sinistro_Model_LaudosPreliminaresItensSegurados();
				$VistoriaItensSegurados = new Sistema_Model_VistoriasItensSegurados();
				if ($post['idLaudoPreliminar']) {
					$SinistroItensSegurados->delete($post['idLaudoPreliminar']);
					$VistoriaItensSegurados->delete($post['idVistoria']);
				}				
				
		    	$Safra = new Produto_Model_Safras();
				$nomeModel = $Safra->getSafraModel($this->view->idProposta,'LaudosPreliminaresReplantioItensSegurados');
				$Safra12Itens = new $nomeModel;
				foreach ($post['itens_segurados'] as $value) {
					$idItem = $value;
					
					$itens = array();
					$itens['id_vistoria']      = $post['idVistoria'];
					$itens['id_item_segurado'] = $idItem;
					$VistoriaItensSegurados->insert($itens);

					$itens = array();
					$itens['id_laudo_preliminar'] = $idLaudo;
					$itens['id_item_segurado']    = $idItem;
					$itens['dt_colheita']         = null;
				   	$idLaudoPreliminarItemSegurado = $SinistroItensSegurados->insert($itens);

					$item = array();
					$item['id_laudo_preliminar_item_segurado'] = $idLaudoPreliminarItemSegurado;
					$item['vl_tamanho_planta']                 = $post['vl_tamanho_planta-' . $idItem];
					$item['ds_coordenadas_s']                  = $post['ds_coordenadas_s-' . $idItem]; 
  					$item['ds_coordenadas_w']                  = $post['ds_coordenadas_w-' . $idItem];
					$item['ds_descricao_danos']                = $post['ds_descricao_danos_' . $idItem];
					$Safra12Itens->insert($item);
				}
			}
			$Db->commit();
			$this->_redirect('/sinistro/processo/view/id/'.$post['idProcesso']);
		} catch (Exception $e) {
			$Db->rollBack();
			$this->populaCampos($post);
			$this->view->showMessage(MSG_ERROR, 'error');
		}
	}
	
	public function populaCampos($post) {
		
		$VistoriaFuncionario = new Sistema_Model_VistoriasFuncionarios();
		$this->view->vistoriadores = $VistoriaFuncionario->getVistoriadoresByVistoria($this->session->idVistoria);

		if (array_key_exists('fl_evento_nao_constatado', $post)) {
			$this->view->fl_evento_nao_constatado = $post['fl_evento_nao_constatado'];
		}
		foreach ($post['itens_segurados'] as $value) {
			$this->view->listDadosItens[$value]['item']               = $value;
			$this->view->listDadosItens[$value]['vl_tamanho_planta'] = $post['vl_tamanho_planta-'.$value];
			$this->view->listDadosItens[$value]['ds_coordenadas_s'] = $post['ds_coordenadas_s-'.$value];
			$this->view->listDadosItens[$value]['ds_coordenadas_w'] = $post['ds_coordenadas_w-'.$value];
			$this->view->listDadosItens[$value]['ds_descricao_danos'] = $post['ds_descricao_danos_'.$value];
		}
		
		$this->view->ds_observacao = $post['ds_observacao'];
	} 
}