<?

class Safra12_LfreplantioController extends Agro_Controller_Action{
	
	public function init() {
 		$this->session = new Zend_Session_Namespace('laudo_final');
		$this->session->idVistoria = $this->session->idRevistoria ? $this->session->idRevistoria : $this->session->idVistoria;
	}

	public function formAction() {

 		$this->view->idVistoria  = $this->session->idVistoria;
 		$this->view->idRevistoria = $this->session->idRevistoria;
		$this->view->idCobertura = $this->session->idCobertura;
		$this->view->idProposta  = $this->session->idProposta;
		$this->view->idProcesso  = $this->session->idProcesso;
		$this->view->idLaudoFinal = $this->session->idLaudoFinal;

		$this->view->formDadosVistoriaLF = new Sistema_Form_DadosVistoriaLaudoFinal2;
		$this->view->formAssinatura = new Sinistro_Form_AssinaturaLaudoPreliminar;

		$this->view->listDadosItens = array();
		$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;

		$RevistoriaVistoria = new Sistema_Model_RevistoriasVistorias();
		$this->session->hasRevistoria = $RevistoriaVistoria->hasRevistoria($this->session->idVistoria);
		$this->view->hasRevistoria = $this->session->hasRevistoria;

		if ($this->getRequest()->isPost()) {
			
			$errorMsg = '';
			if ($this->getRequest()->getParam('fl_realizada') != 'N') {
				$formAssinatura = $this->view->formAssinatura;
				$forms = array($formAssinatura);
				
				$errorMsg = $this->getAllFormErros($forms, $this->getRequest()->getPost(), array());
			}
			
			if ($errorMsg) {
				$this->view->formDadosVistoriaLF->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->session->idLaudoFinal) {
			$this->populaDadosTela();
		} else {
			if ($this->session->idRevistoria) {
				$Revistoria = new Sistema_Model_Revistorias();
				$rs = $Revistoria->find($this->session->idRevistoria)->current();
	
				$this->view->ds_motivo = $rs['ds_motivo'];
				$this->view->fl_realizada = $rs['fl_realizada'] ? 'S' : 'N';
				$this->view->ds_motivo_nao_realizada = $rs['ds_motivo_nao_realizada'];
			}
		}
	} 

	public function populaDadosTela() {
		
		$row = $this->getRow();
		if ($row) {
			$this->view->formDadosVistoriaLF->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'];
		$this->view->ds_observacao = $row['ds_observacao'];

		if ($this->session->idRevistoria) {
			$Revistoria = new Sistema_Model_Revistorias();
			$rs = $Revistoria->find($this->session->idRevistoria)->current();

			$this->view->ds_motivo = $rs['ds_motivo'];
			$this->view->fl_realizada = $rs['fl_realizada'] ? 'S' : 'N';
			$this->view->ds_motivo_nao_realizada = $rs['ds_motivo_nao_realizada'];
		}
	} 

	public function getRow() {
		if ($this->session->idLaudoFinal) {
		    $Safra = new Produto_Model_Safras();
			$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisGraosReplantio');
			$Safra = new $nomeModel;
			
			$row = $Safra->getDataLaudoFinal($this->session->idLaudoFinal);

			return $row;
		}
	}

	public function calculapercentuaisAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		
		$data = array();
		$post = $this->getRequest()->getParams();
		foreach ($post['itens_segurados'] as $value) {
			$idItem = $value;
			
			$vlAreaReplantada = $this->getRequest()->getParam('vl_area_replantada-' . $idItem); 			

			if ($vlAreaReplantada != '') {
				
				$vlAreaTotal = $this->getRequest()->getParam('vl_area_total-' . $idItem); 			

				$vlPercentAreaReplantada = ($vlAreaReplantada / $vlAreaTotal) * 100;	
				
				$data[$idItem]['vlPercentAreaReplantada'] = number_format($vlPercentAreaReplantada, 2, '.', '');
			}
		}

		$this->getResponse()->setBody(Zend_Json::encode($data));
	}
	
	public function save(array $post) {
		
		try {
			$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
			$Db->beginTransaction();

			/****************************************************/
			// Tabela sistema.revistorias
			/***************************************************/
			if ($this->session->idRevistoria) {
				$Revistoria = new Sistema_Model_Revistorias();			
				$data = array();
				if ($post['fl_realizada'] == 'S') {
					$data['fl_realizada']  = 1; 
					$data['ds_motivo_nao_realizada'] = '';
				} else {
					$data['fl_realizada']  = 0;
					$data['ds_motivo_nao_realizada'] = $post['ds_motivo_nao_realizada'];
				}
			   	$Revistoria->update($data, 'id_vistoria = ' . $this->session->idRevistoria);
			}

			/****************************************************/
			// Tabela sinistro.laudos_finais
			/***************************************************/
			$laudo = array();			
			$laudo['id_processo'] = $this->session->idProcesso;
			$laudo['id_cobertura'] = $this->session->idCobertura;
  			$laudo['fl_evento_nao_constatado'] = 0;
			if ($post['fl_realizada'] == 'N') {
	  			$laudo['fl_evento_nao_constatado'] = 0;
	  			$laudo['ds_observacao'] = '';
				$laudo['fl_assinatura_regulador'] = 0;
				$laudo['fl_assinatura_segurado']  = 0;
			} else {
  				$laudo['fl_evento_nao_constatado'] = $post['fl_evento_nao_constatado'] ? 1 : 0;
	  			$laudo['ds_observacao'] = $post['ds_observacao'];
				$laudo['fl_assinatura_regulador'] = $post['fl_assinatura_regulador'];
				$laudo['fl_assinatura_segurado']  = $post['fl_assinatura_segurado'];
			}
			$LaudosFinais = new Sinistro_Model_LaudosFinais();
			$idLaudo = '';
			if ($this->session->idLaudoFinal) {
				$LaudosFinais->update($laudo, 'id = ' . $this->session->idLaudoFinal);
				$idLaudo = $this->session->idLaudoFinal;
			} else {
				$idLaudo = $LaudosFinais->insert($laudo); 
			}
			
			/****************************************************/
			// Tabela sistema.vistorias_laudos_finais
			/***************************************************/
			$VistoriasLaudosFinais = new Sistema_Model_VistoriasLaudosFinais();
			if (!$this->session->idLaudoFinal) {
				$vistoriaLaudo = array();
				$vistoriaLaudo['id_vistoria']    = $this->session->idVistoria;
				$vistoriaLaudo['id_laudo_final'] = $idLaudo;

				$VistoriasLaudosFinais->insert($vistoriaLaudo);
			}

			/****************************************************/
			// Tabela safra12.laudos_finais_graos_replantio
			/***************************************************/
	    	$Safra = new Produto_Model_Safras();
			$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisGraosReplantio');
			$LaudoGraosReplantio = new $nomeModel;
			$LaudoGraosReplantio->delete($idLaudo);

			$graosReplantio = array();
			$graosReplantio['id_laudo_final'] = $idLaudo;
			$LaudoGraosReplantio->insert($graosReplantio);

			if ($post['fl_realizada'] != 'N') {
				if (!$post['fl_evento_nao_constatado']) {
					/****************************************************/
					// Tabela sistema.vistorias_itens_segurados
					/***************************************************/
					$VistoriaItensSegurados = new Sistema_Model_VistoriasItensSegurados();
					$VistoriaItensSegurados->delete($this->session->idVistoria);
		
					/****************************************************/
					// Tabela sinistro.laudos_finais_itens_segurados
					/***************************************************/
					$SinistroItensSegurados = new Sinistro_Model_LaudosFinaisItensSegurados();
					if ($this->session->idLaudoFinal) {
						$SinistroItensSegurados->delete($this->session->idLaudoFinal);
					}
	
					if (is_array($post['itens_segurados']) && count($post['itens_segurados']) > 0) {
				    	$Safra = new Produto_Model_Safras();
						$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisGraosReplantioItensSegurados');
						$Safra12ItensSegurados = new $nomeModel;
						
						foreach ($post['itens_segurados'] as $value) {
							
							$idItem = $value;
							
							
							/****************************************************/
							// Tabela sinistro.vistorias_itens_segurados
							/***************************************************/
							$itens = array();
							$itens['id_vistoria']      = $this->session->idVistoria;
							$itens['id_item_segurado'] = $idItem;
							$VistoriaItensSegurados->insert($itens);
									   	
							$itens = array();
							$itens['id_laudo_final']    = $idLaudo;
							$itens['id_item_segurado']  = $idItem;
							$itens['vl_percent_perdas'] = null;
							$itens['fl_nao_vistoriada'] = 0;
							$itens['id_motivo_quadra_nao_vistoriada'] = null;
		
							$idLaudoFinalItemSegurado = $SinistroItensSegurados->insert($itens);	
			
							if ($this->session->idRevistoria) {
								/****************************************************/
								// Tabela sinistro.laudos_finais_itens_segurados_revistoria
								/***************************************************/
						    	$ItemRevistoria = new Sinistro_Model_LaudosFinaisItensSeguradosRevistoria();
								
								$itens = array();
								$itens['id_laudo_final_item_segurado'] = $idLaudoFinalItemSegurado; 
								$itens['fl_substitui_laudo_anterior']  = $post['fl_substitui_laudo_anterior-' . $idItem] == 'S' ? 1 : 0;
							   	$ItemRevistoria->insert($itens);
							}
							
							/****************************************************/
							// Tabela safra12.laudos_finais_graos_replantio_itens_segurados
							/***************************************************/
							$itens = array();
							$itens['id_laudo_final_item_segurado'] = $idLaudoFinalItemSegurado; 
							$itens['vl_area_replantada']           = $post['vl_area_replantada-' . $idItem];
							$itens['vl_percent_area_replantada']   = $post['vl_percent_area_replantada-' . $idItem];
							$itens['ds_coordenadas_s']             = $post['ds_coordenadas_s-' . $idItem];
							$itens['ds_coordenadas_w']             = $post['ds_coordenadas_w-' . $idItem];
							$Safra12ItensSegurados->insert($itens);
						}
					}
				} else {
					if ($this->session->idLaudoFinal) {
						/****************************************************/
						// Tabela sinistro.laudos_finais_itens_segurados
						/***************************************************/
						$SinistroItensSegurados = new Sinistro_Model_LaudosFinaisItensSegurados();
						$SinistroItensSegurados->delete($this->session->idLaudoFinal);
	
						/****************************************************/
						// Tabela sistema.vistorias_itens_segurados
						/***************************************************/
						$VistoriaItensSegurados = new Sistema_Model_VistoriasItensSegurados();
						$VistoriaItensSegurados->delete($this->session->idVistoria);
					}
				}
			} else {
				if ($this->session->idLaudoFinal) {
					/****************************************************/
					// Tabela safra12.laudos_finais_uva_geada
					/***************************************************/
			    	$Safra = new Produto_Model_Safras();
					$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisGraosReplantio');
					$LaudoGraosReplantio = new $nomeModel;
					$LaudoGraosReplantio->delete($this->session->idLaudoFinal);
	
					/****************************************************/
					// Tabela sistema.vistorias_itens_segurados
					/***************************************************/
					$VistoriaItensSegurados = new Sistema_Model_VistoriasItensSegurados();
					$VistoriaItensSegurados->delete($this->session->idVistoria);
		
					/****************************************************/
					// Tabela sinistro.laudos_finais_itens_segurados
					/***************************************************/
					$SinistroItensSegurados = new Sinistro_Model_LaudosFinaisItensSegurados();
					$SinistroItensSegurados->delete($this->session->idLaudoFinal);
				}				
			}
			if (!$this->session->idLaudoFinal) {
				$this->session->idLaudoFinal = $idLaudo;
			}
			
			$Db->commit();

			$this->populaDadosTela();
			if (!$this->view->idLaudoFinal) {
				$this->view->idLaudoFinal = $this->session->idLaudoFinal;
			}
			$this->view->showMessage(MSG_SUCCESS, 'success');
		} 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 ($post['itens_segurados']) {
			foreach ($post['itens_segurados'] as $item) {
				$idItem = $item;
			
				$this->view->listDadosItens[$idItem]['vl_area_replantada']          = $post['vl_area_replantada-' . $idItem];
				$this->view->listDadosItens[$idItem]['vl_percent_area_replantada']  = $post['vl_percent_area_replantada-' . $idItem];
				$this->view->listDadosItens[$idItem]['ds_coordenadas_s']            = $post['ds_coordenadas_s-' . $idItem];
				$this->view->listDadosItens[$idItem]['ds_coordenadas_w']            = $post['ds_coordenadas_w-' . $idItem];
				$this->view->listDadosItens[$idItem]['fl_substitui_laudo_anterior'] = $post['fl_substitui_laudo_anterior-' . $idItem];
			}
		}
		$this->view->fl_evento_nao_constatado = $post['fl_evento_nao_constatado'];
		$this->view->ds_observacao = $post['ds_observacao'];
		
		if ($this->session->idRevistoria) {
			$this->view->fl_realizada = $post['fl_realizada'];
			$this->view->ds_motivo_nao_realizada = $post['ds_motivo_nao_realizada'];
		}
	} 

	public function getitenslaudofinalAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		
		$data = array();		
		if ($this->session->idLaudoFinal) {
	    	$Safra = new Produto_Model_Safras();
			$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisGraosReplantioItensSegurados');
			$LaudoItens = new $nomeModel;
			$arrayLaudoItem = $LaudoItens->getItensByLaudo($this->session->idLaudoFinal);

			if (count($arrayLaudoItem) > 0) {
				foreach ($arrayLaudoItem as $item) {
					$id = $item['id'];

					$data['itensLaudo'][$id]['vl_area']                  	= $item['vl_area'];
				  	$data['itensLaudo'][$id]['nr_item_segurado']            = $item['nr_item_segurado'];
					$data['itensLaudo'][$id]['ds_item_segurado']            = $item['ds_item_segurado'];
					$data['itensLaudo'][$id]['vl_area_replantada']          = $item['vl_area_replantada'];
				  	$data['itensLaudo'][$id]['vl_percent_area_replantada']  = $item['vl_percent_area_replantada'];
					$data['itensLaudo'][$id]['ds_coordenadas_s']            = $item['ds_coordenadas_s'];
					$data['itensLaudo'][$id]['ds_coordenadas_w']            = $item['ds_coordenadas_w'];
		            $data['itensLaudo'][$id]['fl_substitui_laudo_anterior'] = $item['fl_substitui_laudo_anterior']; 
				}
			}
		}
		$LaudoFinal = new Sinistro_Model_LaudosFinais();
		if ($this->session->idRevistoria) {
			$data['itensSegurados'] = $LaudoFinal->getItensRevistoria($this->session->idProposta, $this->session->idRevistoria);
		} else {
			$data['itensSegurados'] = $LaudoFinal->getItensDisponiveisLaudoFinal($this->session->idProposta);
		}

		$this->getResponse()->setBody(Zend_Json::encode($data));
	}

	public function savedadosvistoriaAction() {
		
		$formDadosVistoriaLF = new Sistema_Form_DadosVistoriaLaudoFinal2;
		$forms = array($formDadosVistoriaLF);

		$camposAdicionais[] = array(
			'type'	  => 'text',
			'fields'   => 'idProposta',
			'label'   => 'Proposta',
			'message' => 'A Proposta deve ser informada.'
		);

		$camposAdicionais[] = array(
			'type'	  => 'text',
			'fields'   => 'idVistoriador',
			'label'   => 'Vistoriadores',
			'message' => MSG_ERRO_LF_VISTORIADOR
		);

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

		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		
		if ($errorMsg) {
			$post = $this->getRequest()->getPost();
			$this->getResponse()->setBody($errorMsg);
		} else { 		
			$post = $this->getRequest()->getParams();

			$this->saveVistoriaFuncionario($post);
			
			$LaudoFinal = new Sinistro_Model_LaudosFinais();
			if ($this->session->idRevistoria) {
				$itensSegurados = $LaudoFinal->getItensRevistoria($this->session->idProposta, $this->session->idRevistoria);
			} else {
				$itensSegurados = $LaudoFinal->getItensDisponiveisLaudoFinal($this->session->idProposta);
			}

			$this->getResponse()->setBody(Zend_Json::encode($itensSegurados));
		}
	} 

	public function saveVistoriaFuncionario ($post) {
		 			
		try {	
			$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
			$Db->beginTransaction();

			$vistoriador = explode(',', $post['idVistoriador']);
			$VistoriaFuncionarios = new Sistema_Model_VistoriasFuncionarios();
			$VistoriaFuncionarios->delete($post['idVistoria']);
			foreach ($vistoriador as $key => $value) {
				$funcionario = array();
				$funcionario['id_funcionario'] = $value; 
				$funcionario['id_vistoria']    = $post['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']);

			$Db->commit();
		} catch (Exception $e) {
			$Db->rollback();
			throw new Exception($e->getMessage());
		}
	}	
}