<?

class Safra12_LpuvageadaController extends Agro_Controller_Action{

	public function init() {
 		$this->session = new Zend_Session_Namespace('laudo_preliminar');
 		
 		$this->view->title = "Sinistro » Laudo Preliminar Uva - Geada";
		
		$this->view->back = "/sinistro/processo/view/id/".$this->getRequest()->getParam('id_processo');
	}

	public function formAction() {
		
		try {
				$params = $this->getRequest()->getParams();
				
				$this->view->title = " » Formulário";
				
		 		$this->view->idVistoria  = $params['id_vistoria'];
				$this->view->idCobertura = $params['id_cobertura'];
				$this->view->idProposta  = $params['id_proposta'];
				$this->view->idProcesso  = $params['id_processo'];
		 		
				$this->session->idVistoria = $params['id_vistoria'];
				$this->session->idCobertura = $params['id_cobertura'];
				$this->session->idProposta = $params['id_proposta'];
				$this->session->idProcesso = $params['id_processo'];
				
				$this->view->idLaudoPreliminar = $this->getRequest()->getParam('id');
				
				$this->view->listDadosItens = array();
				
				$Safra = new Produto_Model_Safras();
				$nomeForm = $Safra->getSafraForm($this->view->idProposta,'UvaGeada');
				$this->view->form = new $nomeForm;
				$this->view->formDadosVistoria = new Sistema_Form_DadosVistoria;
				$this->view->formAssinatura = new Sinistro_Form_AssinaturaLaudoPreliminar;
				
				$ItenSegurado = new Seguro_Model_ItensSegurados();
				$this->view->itensSegurados = $ItenSegurado->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()) {
					
					
					$formUvaGeada = $this->view->form;
					$formDadosVistoria = $this->view->formDadosVistoria;
					$formAssinatura = $this->view->formAssinatura;
					$forms = array($formDadosVistoria, $formUvaGeada, $formAssinatura);
		
					$camposAdicionais = array();
					
					if ($this->getRequest()->getParam('fl_evento_nao_constatado')) {
						$formUvaGeada->id_intensidade->setRequired(false);
						$formUvaGeada->ds_estadio_cultura->setRequired(false);
						$formUvaGeada->ds_nr_dias_apos_brotacao->setRequired(false);
						$formUvaGeada->ds_data_prevista_colheita->setRequired(false);
						$formUvaGeada->ds_aspectos_gerais_cultura->setRequired(false);
					} else {
						
						$formUvaGeada->id_intensidade->setLabel('Intensidade do evento');
		
						$camposAdicionais[] = array(
							'type'	  => 'checkbox',
							'fields'   => 'vistoriadores',
							'minCheckeds' => 1,
							'label'   => 'Vistoriadores',
							'message' => MSG_ERRO_LP_VISTORIADOR
						);
						
						$camposAdicionais[] = array(
							'type'	  => 'text',
							'fields'   => 'fl_area_atingida',
							'label'   => 'Área atingida',
							'message' => MSG_ERRO_LP_AREA_ATINGIDA
						);
						
						
						if ($this->getRequest()->getParam('fl_data_colheita') == 'I') {
							$formUvaGeada->dt_colheita->setRequired(true);
							$formUvaGeada->dt_colheita->setLabel('Data da colheita');
						}
					}
					
					$errorMsg = $this->getAllFormErros($forms, $this->getRequest()->getPost(), $camposAdicionais);
		
					$formUvaGeada->id_intensidade->setLabel('');
					$formUvaGeada->dt_colheita->setRequired(false);
					$formUvaGeada->dt_colheita->setLabel('');
		
					if ($errorMsg) {
						$this->view->form->populate($this->getRequest()->getParams());
						$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->form->populate($row);
					$this->view->formAssinatura->populate($row);
					$this->view->formDadosVistoria->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) {
						$this->view->fl_area_atingida = $row['fl_area_atingida'];
						
				    	$Safra = new Produto_Model_Safras();
						$nomeModel = $Safra->getSafraModel($this->view->idProposta,'LaudosPreliminaresUvaGeadaItensSegurados');
						$UvaGeadaItensSegurados = new $nomeModel;
		
						$arrayLaudoItem = $UvaGeadaItensSegurados->getItensLaudoPreliminar($this->view->idLaudoPreliminar);
		
						foreach ($arrayLaudoItem as $item) {
			
							$id = $item['id_item_segurado'];
							if ($item['dt_colheita']) {
								$this->view->listDadosItens[$id]['dt_colheita'] = Agro_Util::formatDate($item['dt_colheita'], Zend_Date::DATES);
							}
							$this->view->listDadosItens[$id]['item_segurado']       = $id;
							$this->view->listDadosItens[$id]['nr_amostras']         = $item['nr_amostras'];
							$this->view->listDadosItens[$id]['nr_brotos_queimados'] = $item['nr_brotos_queimados'];
							$this->view->listDadosItens[$id]['nr_brotos_inteiros']  = $item['nr_brotos_inteiros'];
						}
					}
		
					$this->view->ds_observacao = $row['ds_observacao'];
				}
			
				
			
		} catch (Exception $e) {
			die($e->getMessage());
		}	
	}

	public function getRow() {
		if ($this->getRequest()->getParam('id')) {
		    $Safra = new Produto_Model_Safras();
			$nomeModel = $Safra->getSafraModel($this->view->idProposta,'LaudosPreliminaresUvaGeada');
			$SafraX = new $nomeModel;
			$row = $SafraX->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']   = Agro_Util::formatDate($post['dt_inicio'], 'yyyyMMdd');
			$vistoria['dt_fim']      = Agro_Util::formatDate($post['dt_fim'], 'yyyyMMdd');
			$vistoria['id']          = $this->session->idVistoria;
			
			$Vistorias = new Sistema_Model_Vistorias();
			$Vistorias->update($vistoria, 'id = ' . $this->session->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'];
			} else {
				$laudo['fl_evento_nao_constatado'] = 0;
			}
			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']         = $this->session->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($this->session->idVistoria);
				}				

		    	$Safra = new Produto_Model_Safras();
				$nomeModel = $Safra->getSafraModel($this->view->idProposta,'LaudosPreliminaresUvaGeadaItensSegurados');
				$UvaGeadaItensSegurados = new $nomeModel;
				
				$VistoriaItensSegurados->delete($this->session->idVistoria);
				$SinistroItensSegurados->deleteItensLaudoPreliminar($idLaudo);
				
				foreach ($post['itens_segurados'] as $value) {
					$idItem = $value;

					$itens = array();
					$itens['id_vistoria']      = $this->session->idVistoria;
					$itens['id_item_segurado'] = $idItem;
					$VistoriaItensSegurados->insert($itens);

					$itens = array();
					$itens['id_laudo_preliminar'] = $idLaudo;
					$itens['id_item_segurado']    = $idItem;
					if ($post['fl_data_colheita'] == 'D') {
						$itens['dt_colheita'] = Agro_Util::formatDate($post['area_item_data_colheita-' . $idItem], 'yyyyMMdd');
					}
					$idLaudoPreliminarItemSegurado = $SinistroItensSegurados->insert($itens);
					
					$nrAmostras = $post['nr_amostras-' . $idItem];
					$nrBrotosQueimados = $post['nr_brotos_queimados-' . $idItem];
					$nrBrotosInteiros = $post['nr_brotos_inteiros-' . $idItem];
					if ($nrAmostras && $nrBrotosQueimados && $nrBrotosInteiros) {
						
						$itens = array();
						$itens['id_laudo_preliminar_item_segurado'] = $idLaudoPreliminarItemSegurado;
						$itens['nr_amostras']         = $nrAmostras;
						$itens['nr_brotos_queimados'] = $nrBrotosQueimados;
						$itens['nr_brotos_inteiros']  = $nrBrotosInteiros;
						$UvaGeadaItensSegurados->insert($itens);
					}
				}
			
				$uvaGeada = array();
		    	$Safra = new Produto_Model_Safras();
				$nomeModel = $Safra->getSafraModel($this->view->idProposta,'LaudosPreliminaresUvaGeada');
				$LaudoUvaGeada = new $nomeModel;
				
				$uvaGeada['id_laudo_preliminar']        = $idLaudo;
				$uvaGeada['id_processo']                = $post['idProcesso'];  
				$uvaGeada['id_cobertura']               = $post['idCobertura'];
				$uvaGeada['id_intensidade']             = $post['id_intensidade'];
				$uvaGeada['fl_area_atingida']           = $post['fl_area_atingida'];
				$uvaGeada['ds_estadio_cultura']         = $post['ds_estadio_cultura'];
				$uvaGeada['ds_aspectos_gerais_cultura'] = $post['ds_aspectos_gerais_cultura'];
				$uvaGeada['ds_nr_dias_apos_brotacao']   = $post['ds_nr_dias_apos_brotacao'];
				$uvaGeada['ds_data_prevista_colheita']  = $post['ds_data_prevista_colheita'];
				
				if ($post['idLaudoPreliminar']) {
					$LaudoUvaGeada->update($uvaGeada, 'id_laudo_preliminar = ' . $post['idLaudoPreliminar']);
				} else {
					$LaudoUvaGeada->insert($uvaGeada);
				}
			}
			
			$Db->commit();
			$this->_redirect('/sinistro/processo/view/id/'.$post['idProcesso']);
		} catch (Exception $e) {
			$Db->rollBack();
			$this->populaCampos($post);
			$this->view->showMessage(MSG_ERROR."<br><br>Erro: ".$e->getMessage(), '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'];
		} else {
			$this->view->fl_area_atingida = $post['fl_area_atingida'];
			$this->view->fl_data_colheita = $post['fl_data_colheita'];
			
			if ($post['itens_segurados']) {
				foreach ($post['itens_segurados'] as $value) {
					$id = $value;
					
					if ($post['area_item_data_colheita-' . $id]) {
						$this->view->listDadosItens[$id]['dt_colheita'] = $post['area_item_data_colheita-' . $id];
					}
					$this->view->listDadosItens[$id]['item_segurado']       = $id;
					$this->view->listDadosItens[$id]['nr_amostras']         = $post['nr_amostras-' . $id];
					$this->view->listDadosItens[$id]['nr_brotos_queimados'] = $post['nr_brotos_queimados-' . $id];
					$this->view->listDadosItens[$id]['nr_brotos_inteiros']  = $post['nr_brotos_inteiros-' . $id];
				}
			}
		}
		$this->view->ds_observacao = $post['ds_observacao'];
	} 
}