<?

class Safra12_LpgraosController extends Agro_Controller_Action{
	
	public function identificacaoeventopreliminarAction() {
		$this->getHelper('layout')->disableLayout();
	} 
	
	public function init() {
 		$this->session = new Zend_Session_Namespace('laudo_preliminar');
 		
 		$this->view->title = 'Sinistro » Laudo Preliminar para Grãos » Formulário';
	}

	public function formAction() {
		
		$dados = $this->getRequest()->getParams();

 		$this->view->idVistoria  = $dados['id_vistoria'];
		$this->view->idCobertura = $dados['id_cobertura'];
		$this->view->idProposta  = $dados['id_proposta'];
		$this->view->idProcesso  = $dados['id_processo'];
		$this->view->idLaudoPreliminar = $dados['id'];
		
		$this->view->dadosItens = array();
		
		$Safra = new Produto_Model_Safras();
		$nomeForm = $Safra->getSafraForm($dados['id_proposta'],'Graos');
		$this->view->form = new $nomeForm;
		$this->view->formDadosVistoria = new Sistema_Form_DadosVistoria;
		$this->view->formAssinatura = new Sinistro_Form_AssinaturaLaudoPreliminar;
		
		$Intensidade = new Sinistro_Model_Intensidades();
		$combo = $Intensidade->getCombo(true,'ds_descricao');
		$options = '';
		foreach ($combo as $key => $value) {
			$options .= '<option value="' . $key .'">' . $value . '</option>';
		}
		$this->view->optionsIntensidade = $options;

		$Proposta = new Seguro_Model_Propostas();
		$isProdutoMultirrisco = $Proposta->isProdutoMultirrisco($dados['id_proposta']);
		$isProdutoMultirrisco = $Proposta->isProdutoMultirrisco($dados['id_proposta']);
		$this->view->isProdutoMultirrisco = $isProdutoMultirrisco; 

		$ItenSegurado = new Seguro_Model_ItensSegurados();
		$this->view->itensSegurados = $ItenSegurado->getItemSeguradoByProposta($dados['id_proposta']);

		$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($dados['id_vistoria']);
			
			$this->session->userVistoriaMesmaEmpresa = $idEmpresaUserLogado == $idEmpresaVistoria ? true : false;
		}
		$this->view->userVistoriaMesmaEmpresa = $this->session->userVistoriaMesmaEmpresa;

		$VistoriaAviso = new Sinistro_Model_VistoriasAvisos();
		$this->view->hasVistoriaFinal = $VistoriaAviso->hasVistoriaFinal($dados['id_vistoria'], $dados['id_cobertura']);

		if ($this->getRequest()->isPost()) {

			$formGraos = $this->view->form;
			$formDadosVistoria = $this->view->formDadosVistoria;
			$formAssinatura = $this->view->formAssinatura;
			$forms = array($formDadosVistoria, $formGraos, $formAssinatura);
			
			$camposAdicionais = array();
					
			if ($dados['fl_evento_nao_constatado']) {
				$formGraos->ds_aspectos_gerais_cultura->setRequired(false);
				$formGraos->dt_vistoria_final->setRequired(false);
			} else {
				
				$camposAdicionais[] = array(
					'type'	  => 'checkbox',
					'fields'   => 'vistoriadores',
					'minCheckeds' => 1,
					'label'   => 'Vistoriadores',
					'message' => MSG_ERRO_LP_VISTORIADOR
				);

				$camposAdicionais[] = array(
					'type'	  => 'text',
					'fields'   => 'fl_dano_benfeitorias',
					'label'   => 'Danos em benfeitorias',
					'message' => MSG_ERRO_LP_DANOS_BENFEITORIA
				);
				
				$camposAdicionais[] = array(
					'type'	  => 'text',
					'fields'   => 'fl_area_atingida',
					'label'   => 'Área atingida',
					'message' => MSG_ERRO_LP_AREA_ATINGIDA
				);
				
				$formGraos->dt_vistoria_final->setLabel('Data da vistoria final');
			}

			$errorMsg = $this->getAllFormErros($forms, $this->getRequest()->getPost(), $camposAdicionais);

			$formGraos->dt_vistoria_final->setLabel('');

			if ($errorMsg) {
				$Params = $this->getRequest()->getParams();
				$Params['dt_vistoria_final'] =  Agro_Util::formatDate($Params['dt_vistoria_final'], 'ddMMyyyy');
				$Params['dt_inicio'] = Agro_Util::formatDate($Params['dt_inicio'], 'ddMMyyyy');
				$Params['dt_fim'] = Agro_Util::formatDate($Params['dt_fim'], 'ddMMyyyy');
				
				$this->view->form->populate($Params);				
				$this->view->formDadosVistoria->populate($Params);
				$this->view->formAssinatura->populate($Params);
				
				$this->populaCampos($this->getRequest()->getParams());
				$this->view->showMessage($errorMsg, 'error');
			} else {
				$this->save($dados);
			}
			
		} else if ($dados['id']) {
			$row = $this->getRow($dados['id']);
			
			if ($row) {
				$row['dt_inicio'] = Agro_Util::formatDate($row['dt_inicio'], 'ddMMyyyy');
				$row['dt_fim'] = Agro_Util::formatDate($row['dt_fim'], 'ddMMyyyy');
				$row['dt_vistoria_final'] = Agro_Util::formatDate($row['dt_vistoria_final'], 'ddMMyyyy');
				
				$this->view->form->populate($row);
				$this->view->formAssinatura->populate($row);
				$this->view->formDadosVistoria->populate($row);
			}
			
			$Status = new Sistema_Model_Status();
			$idStatusEnviado = $Status->getId('ENVIADO', 'LAUDOS_PRELIMINARES');
			
			if($row['id_status'] == $idStatusEnviado) {
			    $this->view->flEnviado = true;
			} else {
			    $this->view->flEnviado = false;
			}
			
			$VistoriaFuncionario = new Sistema_Model_VistoriasFuncionarios();
			$this->view->vistoriadores = $VistoriaFuncionario->getVistoriadoresByVistoria($dados['id_vistoria']);

			$this->view->fl_evento_nao_constatado = $row['fl_evento_nao_constatado'];
			if (!$this->view->fl_evento_nao_constatado) {
				$this->view->fl_dano_benfeitorias = $row['fl_danos_benfeitorias'] ? 'S' : 'N';
				$this->view->fl_area_atingida = $row['fl_area_atingida'];
				
				$ItemSegurado = new Seguro_Model_ItensSegurados();
				
				$Safra = new Produto_Model_Safras();
				$nomeModel = $Safra->getSafraModel($dados['id_proposta'],'LaudosPreliminaresGraosItensSegurados');
				$LaudoItensSegurados = new $nomeModel;
				
				$arrayLaudoItem  = $LaudoItensSegurados->getItensLaudoPreliminar($this->view->idLaudoPreliminar);
				$this->view->dadosItens = array();
				foreach ($arrayLaudoItem as $item) {
					$this->view->dadosItens[$item['id_item_segurado']]['id_intensidade']               = $item['id_intensidade'];
		            $this->view->dadosItens[$item['id_item_segurado']]['fl_danos_folhas']              = $item['fl_danos_folhas']; 
		            $this->view->dadosItens[$item['id_item_segurado']]['fl_danos_plantas']             = $item['fl_danos_plantas']; 
		            $this->view->dadosItens[$item['id_item_segurado']]['fl_danos_espigas_vagens']      = $item['fl_danos_espigas_vagens']; 
		            $this->view->dadosItens[$item['id_item_segurado']]['fl_danos_vegetacao_adjacente'] = $item['fl_danos_vegetacao_adjacente'];
		            $this->view->dadosItens[$item['id_item_segurado']]['fl_nao_houve_danos']           = $item['fl_nao_houve_danos'];
		            $this->view->dadosItens[$item['id_item_segurado']]['vl_area_total']           	   = $ItemSegurado->getArea($item['id_item_segurado']);
		            $this->view->dadosItens[$item['id_item_segurado']]['vl_area_sinistrada']           = $item['vl_area_sinistrada'];
		            $this->view->dadosItens[$item['id_item_segurado']]['ds_estadio_fenologico']        = $item['ds_estadio_fenologico'];
		            $this->view->dadosItens[$item['id_item_segurado']]['vl_tamanho_planta']            = $item['vl_tamanho_planta'];
		            $this->view->dadosItens[$item['id_item_segurado']]['dt_colheita']                  = Agro_Util::formatDate($item['dt_colheita'], 'ddMMyyyy');
		            $this->view->dadosItens[$item['id_item_segurado']]['id_item_segurado']             = $item['id_item_segurado'];
				}
			}

			$this->view->ds_observacao = $row['ds_observacao'];
		}
	}

	public function getRow($id) {
		if ($id) {
		    $Safra = new Produto_Model_Safras();
			$nomeModel = $Safra->getSafraModel($this->view->idProposta,'LaudosPreliminaresGraos');
			$Safra = new $nomeModel;
			$row = $Safra->getDataLaudoPreliminar($id);
			
			return $row;
		}
	}
	
	public function save(array $post) {
	    
		try {
			$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
			$Db->beginTransaction();
			
			/****************************************/
			$VistoriaFuncionarios = new Sistema_Model_VistoriasFuncionarios();
			
			
			$VistoriaFuncionarios->delete($post['id_vistoria']);
			
			foreach ($post['vistoriadores'] as $value) {
				$idVistoriador = $value;
				
				$funcionario = array();
				$funcionario['id_funcionario'] = $idVistoriador;
				$funcionario['id_vistoria']    = $post['id_vistoria'];
				
				$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']          = $post['id_vistoria'];
			
			$Vistorias = new Sistema_Model_Vistorias();
			$Vistorias->update($vistoria, 'id = ' . $post['id_vistoria']);

			$AvisoSinistro = new Sinistro_Model_AvisosSinistro();
			$rs = $AvisoSinistro->getAvisosByCoberturaVistoriaPreliminar($post['id_proposta'], $post['id_cobertura']);
			
			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 (strtotime($dtInicio) < strtotime($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'] = $post['id_vistoria'];
									$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'] = 'false';
			}
			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_processo']             = $post['idProcesso'];
			$laudo['id_cobertura']            = $post['idCobertura'];
			
		    if($post['acao'] == 'enviar') {
                $ds_chave_status = 'ENVIADO';
            } else {
                $ds_chave_status = 'SALVO';
            }
			
			$Status = new Sistema_Model_Status();
			
			$LaudosPreliminares = new Sinistro_Model_LaudosPreliminares();
			
            $laudo['id_status'] = $LaudosPreliminares->getIdStatus($ds_chave_status, 'LAUDOS_PRELIMINARES'); 

            $idLaudo = '';
			if ($post['idLaudoPreliminar']) {
				$LaudosPreliminares->update($laudo, 'id = ' . $post['idLaudoPreliminar']);
				$idLaudo = $post['idLaudoPreliminar'];
			} else {
				$idLaudo = $LaudosPreliminares->insert($laudo); 
			}
			
            $Safra = new Produto_Model_Safras();
            $nomeModel = $Safra->getSafraModel($post['id_proposta'],'LaudosPreliminaresGraos');
            $LaudoGraos = new $nomeModel;
			
			$LaudoGraos->delete($idLaudo, 'id_laudo_preliminar');
			
			/****************************************/
			$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 ($idLaudo) {
					$SinistroItensSegurados->deleteItensLaudoPreliminar($idLaudo);
				}				

				$VistoriaItensSegurados->delete($post['idVistoria']);
				
		    	$Safra = new Produto_Model_Safras();
				$nomeModel = $Safra->getSafraModel($this->view->idProposta,'LaudosPreliminaresGraosItensSegurados');
				$LaudoItensSegurados = 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);
   	
					$itens = array();
					$itens['id_laudo_preliminar_item_segurado'] = $idLaudoPreliminarItemSegurado;
					$itens['id_intensidade']                    = $post['id_intensidade-' . $idItem]; 
					$itens['fl_danos_folhas']                   = $post['fl_danos_folhas-' . $idItem] ? 1 : 0;
					$itens['fl_danos_plantas']                  = $post['fl_danos_plantas-' . $idItem] ? 1 : 0;
					$itens['fl_danos_espigas_vagens']           = $post['fl_danos_espigas_vagens-' . $idItem] ? 1 : 0;
					$itens['fl_danos_vegetacao_adjacente']      = $post['fl_danos_vegetacao_adjacente-' . $idItem] ? 1 : 0;
				  	$itens['fl_nao_houve_danos']                = $post['fl_nao_houve_danos-' . $idItem] ? 1 : 0;
					$itens['vl_area_sinistrada']                = $post['vl_area_sinistrada-' . $idItem];
					$itens['ds_estadio_fenologico']             = $post['ds_estadio_fenologico-' . $idItem];
					$itens['vl_tamanho_planta']                 = $post['vl_tamanho_planta-' . $idItem];
					$itens['dt_colheita']                       = Agro_Util::formatDate($post['dt_colheita-' . $idItem], 'yyyyMMdd');
					$LaudoItensSegurados->insert($itens);
				}
			
				$graos = array();

				$graos['id_laudo_preliminar']          = $idLaudo;
				$graos['fl_danos_benfeitorias']        = $post['fl_dano_benfeitorias'] == 'S' ? 1 : 0;
				$graos['fl_area_atingida']             = $post['fl_area_atingida'];
				$graos['ds_aspectos_gerais_cultura']   = $post['ds_aspectos_gerais_cultura'];
				$graos['dt_vistoria_final'] = Agro_Util::formatDate($post['dt_vistoria_final'], 'yyyyMMdd');
				
				$LaudoGraos->insert($graos);
			}
			
			$Db->commit();
			$this->_redirect("/safra12/lpgraos/form/id/$idLaudo/id_proposta/{$post['idProposta']}/id_processo/{$post['idProcesso']}/id_cobertura/{$post['idCobertura']}/id_vistoria/{$post['idVistoria']}");
		} catch (Exception $e) {
			$Db->rollBack();
			$this->populaCampos($post);
			$this->view->showMessage(MSG_ERROR .'<br/>'.$e->getMessage(), 'error');
		}
	}

	public function populaCampos($post) {
		
		$VistoriaFuncionario = new Sistema_Model_VistoriasFuncionarios();
		$this->view->vistoriadores = $VistoriaFuncionario->getVistoriadoresByVistoria($post['id_vistoria']);

		if (array_key_exists('fl_evento_nao_constatado', $post)) {
			$this->view->fl_evento_nao_constatado = $post['fl_evento_nao_constatado'];
		} else {
			$this->view->fl_dano_benfeitorias = $post['fl_dano_benfeitorias'];
			$this->view->fl_area_atingida = $post['fl_area_atingida'];
	
			$this->view->dadosItens = array();
			foreach ($post['itens_segurados'] as $value) {
				$idItem = $value;

				$this->view->dadosItens[$idItem]['id_intensidade']               = $post['id_intensidade-' . $idItem];
	            $this->view->dadosItens[$idItem]['fl_danos_folhas']              = $post['fl_danos_folhas-' . $idItem]; 
	            $this->view->dadosItens[$idItem]['fl_danos_plantas']             = $post['fl_danos_plantas-' . $idItem]; 
	            $this->view->dadosItens[$idItem]['fl_danos_espigas_vagens']      = $post['fl_danos_espigas_vagens-' . $idItem]; 
	            $this->view->dadosItens[$idItem]['fl_danos_vegetacao_adjacente'] = $post['fl_danos_vegetacao_adjacente-' . $idItem];
	            $this->view->dadosItens[$idItem]['fl_nao_houve_danos']           = $post['fl_nao_houve_danos-' . $idItem];
	            $this->view->dadosItens[$idItem]['vl_area_total']           	 = $post['vl_area_total-' . $idItem];
	            $this->view->dadosItens[$idItem]['vl_area_sinistrada']           = $post['vl_area_sinistrada-' . $idItem];
	            $this->view->dadosItens[$idItem]['ds_estadio_fenologico']        = $post['ds_estadio_fenologico-' . $idItem];
	            $this->view->dadosItens[$idItem]['vl_tamanho_planta']            = $post['vl_tamanho_planta-' . $idItem];
	            $this->view->dadosItens[$idItem]['dt_colheita']                  = Agro_Util::formatDate($post['dt_colheita-' . $idItem], 'ddMMyyyy');
	            $this->view->dadosItens[$idItem]['id_item_segurado']             = $idItem;
			}
		}
		$this->view->ds_observacao = $post['ds_observacao'];
	} 
}