<?

class Safra12_LfgraosmultirriscoController 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->listDadosItens = 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()) {
			$this->save($this->getRequest()->getParams());
		} else if ($this->session->idLaudoFinal) {
			$this->populaDadosTela();
		}

		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();
		$this->view->ds_observacao = $row['ds_observacao'];
	}

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

			return $row;
		}
	}

	public function formdadosquadraAction() {
		$this->getHelper('layout')->disableLayout();
		
		$idItem = $this->getRequest()->getParam('idItem');
		$this->view->idItem = $idItem;
		$this->view->idRevistoria = $this->session->idRevistoria;
		$this->view->idProposta = $this->getRequest()->getParam('idProposta');
		$this->view->hasRevistoria = $this->session->hasRevistoria;
		$this->view->amostras = array();
		$this->view->idProcesso  = $this->session->idProcesso;
		$this->view->userVistoriaMesmaEmpresa = $this->session->userVistoriaMesmaEmpresa;
		
		$this->view->formDadosVistoriaLF = new Sistema_Form_DadosVistoriaLaudoFinal;
		$this->view->formAssinatura = new Sinistro_Form_AssinaturaLaudoPreliminar;

		$this->view->vistoriadores = array();
		
		$ItemSegurado = new Seguro_Model_ItensSegurados();
		$this->view->item = $ItemSegurado->getItemSeguradoById($idItem);
		
    	if ($this->session->idLaudoFinal) {
    		
	    	$Safra = new Produto_Model_Safras();
			$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisGraosMultirriscoItensSegurados');
			$LaudoFinalItemSegurado = new $nomeModel;
			
			$rs = $LaudoFinalItemSegurado->find($this->session->idLaudoFinal, $idItem);
			$timestampVistoria = $rs['dt_vistoria'];
			$this->view->item['vl_percent_colhido']            = $rs['vl_percent_colhido'];
			$this->view->item['vl_rendimento_obtido_kg_ha']    = $rs['vl_rendimento_obtido_kg_ha'];
			$this->view->item['vl_rendimento_obtido_sacos_ha'] = $rs['vl_rendimento_obtido_sacos_ha'];
			$this->view->item['vl_rendimento_final_ton_ha']    = number_format($rs['vl_rendimento_final_ton_ha'], 2, '.', '');
			$this->view->item['tp_amostragem']                 = $rs['tp_amostragem'];
			$this->view->item['ds_observacao']                 = $rs['ds_observacao'];

			$arrayVistoria = array();
			$dtVistoria = explode(' ', $timestampVistoria);

			$arrayVistoria['dt_vistoria']  = Agro_Util::formatDate($dtVistoria[0], 'dd/MM/yyyy'); 
			$this->session->dtVistoria = $arrayVistoria['dt_vistoria'];
			$arrayVistoria['hr_vistoria']  = substr($dtVistoria[1], 0, 2);
			$arrayVistoria['min_vistoria'] = substr($dtVistoria[1], 3, 2);
			$this->view->formDadosVistoriaLF->populate($arrayVistoria);
			
			$arrayAssintura = array();
			$arrayAssintura['fl_assinatura_regulador'] = $rs['fl_assinatura_regulador'];
			$arrayAssintura['fl_assinatura_segurado']  = $rs['fl_assinatura_segurado'];
			$this->view->formAssinatura->populate($arrayAssintura);
			
			$this->session->idLaudoFinalItemSegurado = $rs['id_laudo_final_item_segurado'];
			$this->view->idLaudoFinalItemSegurado = $this->session->idLaudoFinalItemSegurado;
			if ($this->session->idLaudoFinalItemSegurado) {
				$ItemSeguradoFuncionario = new Sinistro_Model_LaudosFinaisItensSeguradosFuncionarios();
				$this->view->vistoriadores = $ItemSeguradoFuncionario->getVistoriadoresByItemSegurado($this->session->idLaudoFinalItemSegurado);

				if ($this->session->idRevistoria) {
					$ItemRevistoria = new Sinistro_Model_LaudosFinaisItensSeguradosRevistoria();
					$rs = $ItemRevistoria->find($this->session->idLaudoFinalItemSegurado);
					
					$this->view->fl_substitui_laudo_anterior = $rs['fl_substitui_laudo_anterior'] ? 'S' : 'N';
				}
			}
			
			$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisGraosMultirriscoItensSeguradosAmostras');
			$LaudoFinalItemSeguradoAmostras = new $nomeModel;
			$rs = $LaudoFinalItemSeguradoAmostras->getAmostrasByItem($this->session->idLaudoFinal, $idItem);
	
			$aux = array();
			if (count($rs) > 0) {
				foreach ($rs as $it) {
					$aux[$it['nr_amostra']]['vl_espacamento_linhas']       = $it['vl_espacamento_linhas'];
					$aux[$it['nr_amostra']]['vl_metros_linha_colhidos']    = $it['vl_metros_linha_colhidos'];
					$aux[$it['nr_amostra']]['vl_producao_colhida_amostra'] = $it['vl_producao_colhida_amostra'];
					$aux[$it['nr_amostra']]['vl_producao_kg_ha']           = $it['vl_producao_kg_ha'] . '%';
					$aux[$it['nr_amostra']]['vl_perdas_colheita']          = $it['vl_perdas_colheita'] . '%';
					$aux[$it['nr_amostra']]['vl_percent_umidade_graos']    = $it['vl_percent_umidade_graos'];
					$aux[$it['nr_amostra']]['vl_percent_desconto_umidade'] = $it['vl_percent_desconto_umidade'] . '%';
					$aux[$it['nr_amostra']]['vl_producao_liquida_kg_ha']   = $it['vl_producao_liquida_kg_ha'] . '%';
				}				
			}
			$this->view->amostras = $aux;
    	}
  	}

	public function formquadrasnaosalvasAction() {
		$this->getHelper('layout')->disableLayout();
		
		$idItem = $this->getRequest()->getParam('idItem');
		
    	$Safra = new Produto_Model_Safras();
		$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisGraosMultirriscoItensSegurados');
		$ItensGraosMultirrisco = new $nomeModel;

		if ($this->session->idRevistoria) {
			$this->view->itensSegurados = $ItensGraosMultirrisco->getItensRevistoriadosNaoSalvos($this->session->idProposta, $idItem, $this->session->idRevistoria);
		} else {
			$this->view->itensSegurados = $ItensGraosMultirrisco->getItensNaoSalvos($this->session->idProposta, $idItem, $this->session->idVistoria);
		}
	}

	public function calculapercentuaisAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		
		$data = array();
		$amostras = array();
		$percentuais = array();

    	$Safra = new Produto_Model_Safras();
		$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisGraosMultirriscoItensSegurados');
		$Safra12ItemSegurado = new $nomeModel;
		
		$idItem = $this->getRequest()->getParam('idItem');
		$vlPercentColhido = $this->getRequest()->getParam('vl_percent_colhido');
		
		$vlMaiorPercentColhidoLF = $Safra12ItemSegurado->getMaiorPercentColhidoLF($this->session->idProposta, $this->session->idCobertura, $idItem, $this->session->dtVistoria);
		$vlMaiorPercentColhidoRevistoria = $Safra12ItemSegurado->getMaiorPercentColhidoRevistoria($this->session->idProposta, $this->session->idCobertura, $idItem, $this->session->dtVistoria);

		$percentColhidos = array();
		$percentColhidos[] = $vlMaiorPercentColhidoLF ? $vlMaiorPercentColhidoLF : 0; 
		$percentColhidos[] = $vlMaiorPercentColhidoRevistoria ? $vlMaiorPercentColhidoRevistoria : 0; 
		rsort($percentColhidos);
		
		$data['error'] = null;
		if ($percentColhidos[0] > $vlPercentColhido) {
			$data['error'] = 'O percentual colhido não pode ser menor do que no laudo anterior (' . $percentColhidos[0] . '%).'; 			
		} else {
			$tpAmostragem = $this->getRequest()->getParam('tp_amostragem');
			
			if ($tpAmostragem == 'manual') {
				$Proposta = new Seguro_Model_Propostas();
				$cultura = $Proposta->getCulturaProduto($this->session->idProposta);
				$this->idCultura = $cultura['id_cultura'];
		
		    	$Safra = new Produto_Model_Safras();
				$nomeModel = $Safra->getSafraModel($this->session->idProposta,'UmidadeDesconto');
				$UmidadeDesconto = new $nomeModel;
		
				$nrAmostrasPreenchidas = 0; 
				$somaProducaoLiquidaKgHa = 0;
				for ($i = 1; $i < 11; $i++) {
		
				 	$vlEspacamentoLinhas = $this->getRequest()->getParam('vl_espacamento_linhas-' . $i);
					$vlMetrosLinhaColhidos = $this->getRequest()->getParam('vl_metros_linha_colhidos-' . $i);
					$vlProducaoColhidaAmostra = $this->getRequest()->getParam('vl_producao_colhida_amostra-' . $i);
					$vlPercentUmidadeGraos = $this->getRequest()->getParam('vl_percent_umidade_graos-' . $i);
	
				 	if ($vlEspacamentoLinhas && $vlMetrosLinhaColhidos &&
						$vlProducaoColhidaAmostra && $vlPercentUmidadeGraos) {
						$amostras[$i]['nr_amostra'] = $i;
						$amostras[$i]['vl_espacamento_linhas'] = $vlEspacamentoLinhas;
						$amostras[$i]['vl_metros_linha_colhidos'] = $vlMetrosLinhaColhidos;
						$amostras[$i]['vl_producao_colhida_amostra'] = $vlProducaoColhidaAmostra;
			
						if ($vlProducaoColhidaAmostra != 0.00) {
							$vlProducaoKgHa = ($vlProducaoColhidaAmostra * 10000) / ($vlEspacamentoLinhas * $vlMetrosLinhaColhidos);
						} else {
							$vlProducaoKgHa = 0.00;
						} 
						$vlProducaoKgHa = number_format(Agro_Util::round($vlProducaoKgHa, 2), 2, '.', '');
						$data[$i]['vlProducaoKgHa'] = $vlProducaoKgHa . '%';
			  			$amostras[$i]['vl_producao_kg_ha'] = $vlProducaoKgHa;
			
						$vlPerdasColheita = $vlProducaoKgHa - ($vlProducaoKgHa * 0.03);
						$vlPerdasColheita = number_format(Agro_Util::round($vlPerdasColheita, 2), 2, '.', '');
						$data[$i]['vlPerdasColheita'] = $vlPerdasColheita . '%';
			  			$amostras[$i]['vl_perdas_colheita'] = $vlPerdasColheita;
			  			$amostras[$i]['vl_percent_umidade_graos'] = $vlPercentUmidadeGraos;
			
						$vlPercentDescontoUmidade = $UmidadeDesconto->getPercentDesconto($this->idCultura, $vlPercentUmidadeGraos);
						$vlPercentDescontoUmidade = number_format(Agro_Util::round($vlPercentDescontoUmidade, 2), 2, '.', '');
						$data[$i]['vlPercentDescontoUmidade'] = $vlPercentDescontoUmidade . '%';
			  			$amostras[$i]['vl_percent_desconto_umidade'] = $vlPercentDescontoUmidade;
						
						if ($vlPercentDescontoUmidade != 0.00) {
							$vlPercentDescontoUmidade = $vlPercentDescontoUmidade / 100;
						}
						$vlProducaoLiquidaKgHa = $vlPerdasColheita - ($vlPerdasColheita * $vlPercentDescontoUmidade);
						$vlProducaoLiquidaKgHa = number_format(Agro_Util::round($vlProducaoLiquidaKgHa, 2), 2, '.', '');
						$data[$i]['vlProducaoLiquidaKgHa'] = $vlProducaoLiquidaKgHa . '%';
			  			$amostras[$i]['vl_producao_liquida_kg_ha'] = $vlProducaoLiquidaKgHa;
		
						$somaProducaoLiquidaKgHa += $vlProducaoLiquidaKgHa;
						$nrAmostrasPreenchidas++;		
					} else {
						$data[$i]['vlProducaoKgHa'] = '';
						$data[$i]['vlPerdasColheita'] = '';
						$data[$i]['vlPercentDescontoUmidade'] = '';
						$data[$i]['vlProducaoLiquidaKgHa'] = '';
					}
				}	
				
				$vlRendimentoObtidoKgHa = $somaProducaoLiquidaKgHa / $nrAmostrasPreenchidas;
				$vlRendimentoObtidoKgHa = number_format(Agro_Util::round($vlRendimentoObtidoKgHa, 2), 2, '.', '');
				$data['vlRendimentoObtidoKgHa'] = $vlRendimentoObtidoKgHa . '%';
	  			$percentuais['vl_rendimento_obtido_kg_ha'] = $vlRendimentoObtidoKgHa;
		
				$vlRendimentoObtidoScHa = $vlRendimentoObtidoKgHa / 60;
				$vlRendimentoObtidoScHa = number_format(Agro_Util::round($vlRendimentoObtidoScHa, 2), 2, '.', '');
				$data['vlRendimentoObtidoScHa'] = $vlRendimentoObtidoScHa . '%'; 
	  			$percentuais['vl_rendimento_obtido_sacos_ha'] = $vlRendimentoObtidoScHa;
		
				$vlRendimentoFinal = $vlRendimentoObtidoKgHa / 1000;
				$vlRendimentoFinal = number_format(Agro_Util::round($vlRendimentoFinal, 2), 2, '.', '');
				$data['vlRendimentoFinal'] = $vlRendimentoFinal . '%'; 
	  			$percentuais['vl_rendimento_final_ton_ha'] = $vlRendimentoFinal;
	
				$ret = $this->saveItensSegurados($this->getRequest()->getParams(), $amostras, $percentuais, $tpAmostragem);
				if ($ret) {
					$data['arrayIdsItens'] = $ret;
				}
			} else if ($tpAmostragem == 'maquina') {
				$vlRendimentoObtidoKgHa = $this->getRequest()->getParam('vl_rendimento_obtido_kg_ha');
				$vlRendimentoObtidoScHa = $this->getRequest()->getParam('vl_rendimento_obtido_sc_ha');
				$vlRendimentoFinal = $this->getRequest()->getParam('vl_rendimento_final');
	
	  			$percentuais['vl_rendimento_obtido_kg_ha'] = $vlRendimentoObtidoKgHa;
	  			$percentuais['vl_rendimento_obtido_sacos_ha'] = $vlRendimentoObtidoScHa;
	  			$percentuais['vl_rendimento_final_ton_ha'] = $vlRendimentoFinal;
	
				$ret = $this->saveItensSegurados($this->getRequest()->getParams(), $amostras, $percentuais, $tpAmostragem);
				if ($ret) {
					$data['arrayIdsItens'] = $ret;
				}
			}
		}

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

			/****************************************************/
			// Tabela sinistro.laudos_finais
			/***************************************************/
			$LaudosFinais = new Sinistro_Model_LaudosFinais();
			$LaudoFinal = $LaudosFinais->createRow();
			
			$LaudoFinal->id_processo = $this->session->idProcesso;
			$LaudoFinal->id_cobertura = $this->session->idCobertura;
  			$LaudoFinal->fl_evento_nao_constatado = 0;
  			$LaudoFinal->ds_observacao = '';
			$LaudoFinal->save();
				
			/****************************************************/
			// Tabela sistema.vistorias_laudos_finais
			/***************************************************/
			$VistoriasLaudosFinais = new Sistema_Model_VistoriasLaudosFinais();
			$Row = $VistoriasLaudosFinais->createRow();
			$Row->id_vistoria = $this->session->idVistoria;
			$Row->id_laudo_final = $LaudoFinal->id;
			$Row->save();

			/****************************************************/
			// Tabela safra12.laudos_finais_graos_multirrisco
			/***************************************************/
	    	$Safra = new Produto_Model_Safras();
			$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisGraosMultirrisco');
			$LaudoFinalGraosMultirrisco = new $nomeModel;

			$Row = $LaudoFinalGraosMultirrisco->createRow();
			$Row->id_laudo_final = $LaudoFinal->id;
			$Row->save();

			if ($this->session->idRevistoria) {
				$Revistoria = new Sistema_Model_Revistorias();			
				$data = array();
				$data['fl_realizada']  = 1; 
			   	$Revistoria->update($data, 'id_vistoria = ' . $this->session->idRevistoria);
			}

			$Db->commit();

			$this->session->idLaudoFinal = $LaudoFinal->id;
		} catch (Exception $e) {
			$Db->rollBack();
			echo $e->getMessage();
		}
	}

	public function saveItensSegurados(array $post, array $amostras, array $percentuais, $tpAmostragem) {

		try {
			$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
			$Db->beginTransaction();

			$idLaudo = $this->session->idLaudoFinal; 
			$arrayIdsItens = array();
			$cont = 1;

	    	$Safra = new Produto_Model_Safras();
			$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisGraosMultirriscoItensSegurados');
			$Safra12ItensSegurados = new $nomeModel;
			foreach ($post as $key => $value) {
				if ((strpos($key, 'item-') > -1) || ($key == 'idItem')) {

					$idItem = $value;

					/****************************************************/
					// Tabela sistema.vistorias_itens_segurados
					/***************************************************/
					$VistoriaItensSegurados = new Sistema_Model_VistoriasItensSegurados();
					$VistoriaItensSegurados->delete($this->session->idVistoria, $idItem);
					
					$itens = array();
					$itens['id_vistoria']      = $this->session->idVistoria;
					$itens['id_item_segurado'] = $idItem;
					$VistoriaItensSegurados->insert($itens);
		
					/****************************************************/
					// Tabela sinistro.laudos_finais_itens_segurados
					/***************************************************/
					$SinistroItensSegurados = new Sinistro_Model_LaudosFinaisItensSegurados();
					if ($key != 'idItem') {
					   	$rs = $SinistroItensSegurados->find($this->session->idLaudoFinal, $idItem);
					   	if ($rs['fl_nao_vistoriada']) {
						   	$SinistroItensSegurados->delete($this->session->idLaudoFinal, $idItem);
					   	} else {
							$rs = $Safra12ItensSegurados->find($this->session->idLaudoFinal, $idItem);
							if ($rs['id_laudo_final_item_segurado']) {
								$SinistroItensSegurados->deleteItem($rs['id_laudo_final_item_segurado']);
							}
					   	}
					}		
				   	
					$itens = array();
					$itens['id_laudo_final']          = $this->session->idLaudoFinal;
					$itens['id_item_segurado']        = $idItem;
					$itens['dt_vistoria']             = $this->session->dtVistoria;  
					$itens['vl_percent_perdas']       = 0.00;
					$itens['ds_observacao']           = $post['ds_observacao_item'];
					$itens['fl_assinatura_regulador'] = $post['fl_assinatura_regulador'];
					$itens['fl_assinatura_segurado']  = $post['fl_assinatura_segurado'];
					
					if ($key != 'idItem') {
					   	$idLaudoFinalItemSegurado = $SinistroItensSegurados->insert($itens);
						$arrayIdsItens[$cont]['itemSecundario']['idItemSegurado'] = $idItem;
						$cont++;
					} else {
					   	$idLaudoFinalItemSegurado = $this->session->idLaudoFinalItemSegurado; 
						$SinistroItensSegurados->update($itens, 'id = ' . $this->session->idLaudoFinalItemSegurado);
						$arrayIdsItens[0]['itemPrincipal']['idItemSegurado'] = $idItem;
					}
					/****************************************************/
					// Tabela safra12.laudos_finais_graos_multirrisco_itens_segurados
					/***************************************************/
		
					$itens = array();
					$itens['id_laudo_final_item_segurado']  = $idLaudoFinalItemSegurado; 
					$itens['tp_amostragem']                 = $tpAmostragem;
					$itens['vl_percent_colhido']            = $post['vl_percent_colhido'];
					$itens['vl_rendimento_obtido_kg_ha']    = $percentuais['vl_rendimento_obtido_kg_ha'];
					$itens['vl_rendimento_obtido_sacos_ha'] = $percentuais['vl_rendimento_obtido_sacos_ha'];
					$itens['vl_rendimento_final_ton_ha']    = $percentuais['vl_rendimento_final_ton_ha'];
					if ($key != 'idItem') {
					   	$Safra12ItensSegurados->insert($itens);
					} else {
					   	$Safra12ItensSegurados->update($itens, 'id_laudo_final_item_segurado = ' . $this->session->idLaudoFinalItemSegurado);
					}
		
					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'] == 'S' ? 1 : 0;
						if ($key != 'idItem') {
						   	$ItemRevistoria->insert($itens);
						} else {
						   	$ItemRevistoria->update($itens, 'id_laudo_final_item_segurado = ' . $this->session->idLaudoFinalItemSegurado);
						}
					}

					if ($tpAmostragem == 'manual') {
						/****************************************************/
						// Tabela safra12.laudos_finais_graos_multirrisco_itens_segurados_amostras
						/***************************************************/
				    	$Safra = new Produto_Model_Safras();
						$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisGraosMultirriscoItensSeguradosAmostras');
						$Safra12ItensSeguradosAmostras = new $nomeModel;
						$Safra12ItensSeguradosAmostras->delete($idLaudoFinalItemSegurado);

						foreach ($amostras as $it) {
							
							$itens = array();
							$itens['id_laudo_final_item_segurado'] = $idLaudoFinalItemSegurado;
							$itens['nr_amostra']                   = $it['nr_amostra'];
							$itens['vl_espacamento_linhas']        = $it['vl_espacamento_linhas'];
							$itens['vl_metros_linha_colhidos']     = $it['vl_metros_linha_colhidos'];
							$itens['vl_producao_colhida_amostra']  = $it['vl_producao_colhida_amostra'];
							$itens['vl_producao_kg_ha']            = $it['vl_producao_kg_ha'];
							$itens['vl_perdas_colheita']           = $it['vl_perdas_colheita'];
							$itens['vl_percent_umidade_graos']     = $it['vl_percent_umidade_graos'];
							$itens['vl_percent_desconto_umidade']  = $it['vl_percent_desconto_umidade'];
							$itens['vl_producao_liquida_kg_ha']    = $it['vl_producao_liquida_kg_ha'];
		
							$Safra12ItensSeguradosAmostras->insert($itens);
						}					
					}
					
					if ($key != 'idItem') {
						/****************************************************/
						// Tabela sinistro.laudos_finais_itens_segurados_funcionarios
						/***************************************************/
						$ItensSeguradosFuncionario = new Sinistro_Model_LaudosFinaisItensSeguradosFuncionarios();
						$ItensSeguradosFuncionario->delete($idLaudoFinalItemSegurado);
						
						foreach ($this->session->listFuncionarios as $idFunc) {
							$func = array();
							$func['id_laudo_final_item_segurado'] = $idLaudoFinalItemSegurado;
							$func['id_funcionario']  = $idFunc;
							
						   	$ItensSeguradosFuncionario->insert($func);
						}
					}
				}
			}
			$Db->commit();

			return $arrayIdsItens;
		} catch (Exception $e) {
			$Db->rollBack();
			echo $e->getMessage();
		}
	}
	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
			/***************************************************/
			$LaudosFinais = new Sinistro_Model_LaudosFinais();

			$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['ds_observacao']            = '';
			} else {
	  			$laudo['ds_observacao']            = $post['ds_observacao'];
			}
  			
  			$idLaudoFinal = null;
			if ($this->session->idLaudoFinal) {
				$LaudosFinais->update($laudo, 'id = ' . $this->session->idLaudoFinal);
				$idLaudoFinal = $this->session->idLaudoFinal;
			} else {
				$idLaudoFinal = $LaudosFinais->insert($laudo); 	
			}
			
			/****************************************************/
			// Tabela sistema.vistorias_laudos_finais
			/***************************************************/
			if (!$this->session->idLaudoFinal) {
				$VistoriasLaudosFinais = new Sistema_Model_VistoriasLaudosFinais();
				$Row = $VistoriasLaudosFinais->createRow();
				$Row->id_vistoria    = $this->session->idVistoria;
				$Row->id_laudo_final = $idLaudoFinal;
				$Row->save();

			 	$this->session->idLaudoFinal = $idLaudoFinal;	
			}

			if ($post['fl_realizada'] != 'N') {
				/****************************************************/
				// Tabela safra12.laudos_finais_graos_multirrisco
				/***************************************************/
		    	$Safra = new Produto_Model_Safras();
				$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisGraosMultirrisco');
				$LaudoFinalGraosMultirrisco = new $nomeModel;
				$LaudoFinalGraosMultirrisco->delete($idLaudoFinal);
				
				$itens = array();		
				$itens['id_laudo_final']   = $idLaudoFinal;
				$LaudoFinalGraosMultirrisco->insert($itens);
				
				if (is_array($post['item_nao_vistoriado']) && count($post['item_nao_vistoriado']) > 0) {
					$VistoriaItensSegurados = new Sistema_Model_VistoriasItensSegurados();
					foreach ($post['item_nao_vistoriado'] as $item) {
						$idItem = $item;
						$idLaudo = $this->session->idLaudoFinal;
		
						/****************************************************/
						// Tabela sistema.vistorias_itens_segurados
						/***************************************************/
						$VistoriaItensSegurados->delete($this->session->idVistoria, $idItem);
					
						$itens = array();
						$itens['id_vistoria']      = $this->session->idVistoria;
						$itens['id_item_segurado'] = $idItem;
						$VistoriaItensSegurados->insert($itens);
						
						/****************************************************/
						// Tabela sinistro.laudos_finais_itens_segurados
						/***************************************************/
						$SinistroItensSegurados = new Sinistro_Model_LaudosFinaisItensSegurados();
						$SinistroItensSegurados->delete($idLaudo, $idItem);
						
						$itens = array();
						$itens['id_laudo_final']    = $idLaudo;
						$itens['id_item_segurado']  = $idItem;
						$itens['vl_percent_perdas'] = null;
						$itens['fl_nao_vistoriada'] = 1;
						$itens['id_motivo_quadra_nao_vistoriada'] = $post['id_motivo_quadra_nao_vistoriada-' . $idItem];
						
					   	$SinistroItensSegurados->insert($itens);
					}
				}
			} else {
				if ($this->session->idLaudoFinal) {
					/****************************************************/
					// Tabela safra12.laudos_finais_graos_multirrisco
					/***************************************************/
			    	$Safra = new Produto_Model_Safras();
					$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisGraosMultirrisco');
					$LaudoFinalGraosMultirrisco = new $nomeModel;
					$LaudoFinalGraosMultirrisco->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);
				}	
			}	
					
			$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($post['idVistoria']);

		foreach ($post['itens_segurados'] as $item) {
			$idItem = $item;
		
			if ($post['fl_nao_vistoriada'] && in_array($idItem, $post['fl_nao_vistoriada'])) {
				$this->view->listDadosItens[$idItem]['fl_nao_vistoriada'] = true;
			} else { 
				$this->view->listDadosItens[$idItem]['fl_nao_vistoriada'] = false;
			}
			$this->view->listDadosItens[$idItem]['id_motivo_quadra_nao_vistoriada'] = $post['id_motivo_quadra_nao_vistoriada-' . $idItem];
			$this->view->listDadosItens[$idItem]['vl_percentual_colhido'] = $post['vl_percentual_colhido-' . $idItem];
			$this->view->listDadosItens[$idItem]['vl_rendimento_final'] = $post['rendimento_final-' . $idItem];
		}

		$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();		
		$MotivosQuadraNaoVistoriada = new Sinistro_Model_MotivosQuadraNaoVistoriada();
		$motivos = $MotivosQuadraNaoVistoriada->fetchPairs('id', 'ds_motivo');
		foreach ($motivos as $key => $value) {
			if (!$key) {
				$combo = '<option value="">Selecione o motivo</option>';
			} else {
				$combo .= '<option value='.$key.'>'.$value.'</option>';
			}
		} 
		$data['motivos'] = $combo;
		if ($this->session->idLaudoFinal) {
	    	$Safra = new Produto_Model_Safras();
			$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisGraosMultirriscoItensSegurados');
			$LaudoItens = new $nomeModel;
			$arrayLaudoItem = $LaudoItens->getItensByLaudo($this->session->idLaudoFinal);
	
			if (count($arrayLaudoItem) > 0) {
				foreach ($arrayLaudoItem as $item) {
					$id = $item['id_item_segurado'];

					$data['itensLaudo'][$id]['fl_nao_vistoriada']               = $item['fl_nao_vistoriada'];
				  	$data['itensLaudo'][$id]['id_motivo_quadra_nao_vistoriada'] = $item['id_motivo_quadra_nao_vistoriada'];
				  	$data['itensLaudo'][$id]['vl_percent_colhido'] 				= $item['vl_percent_colhido'] ? $item['vl_percent_colhido'] : '';
				  	$data['itensLaudo'][$id]['vl_rendimento_final'] 		    = $item['vl_rendimento_final_ton_ha'] ? number_format($item['vl_rendimento_final_ton_ha'], 2, '.', '') : '';
					$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_lmga']                         = $item['vl_lmga'];
					$data['itensLaudo'][$id]['ds_nome_variedade']               = $item['ds_nome_variedade'];
				}
			}
		}
		$LaudoFinal = new Sinistro_Model_LaudosFinais();
		if ($this->session->idRevistoria) {
			$data['itensSegurados'] = $LaudoFinal->getItensRevistoria($this->session->idProposta, $this->session->idRevistoria);
		} else {
			$data['itensSegurados'] = $LaudoFinal->getItensVisPreliminarLaudoFinal($this->session->idProposta, $this->session->idVistoria);
		}
				
		$this->getResponse()->setBody(Zend_Json::encode($data));
	}

	public function savedadosvistoriaAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		try {
			
			$result = array('status' => true, 'tpError' => 0, 'message' => '');
			
			$idItem        = $this->getRequest()->getParam('idItem');
			$dtVistoria    = $this->getRequest()->getParam('dt_vistoria');
			$hrVistoria    = $this->getRequest()->getParam('hr_vistoria');
			$minVistoria   = $this->getRequest()->getParam('min_vistoria');
			$idVistoriador = $this->getRequest()->getParam('idVistoriador');

			$dtVistoria = Agro_Util::formatDate($dtVistoria .' '. $hrVistoria .' '. $minVistoria, 'dd/MM/yyyy HH:mm:ss');
			if (!$this->session->idRevistoria) {
				$Item = new Sinistro_Model_AvisosEncerramentoItensSegurados();
				$hasDtEncerramento = $Item->hasDtEncerramentoColheita($this->session->idProposta, $dtVistoria, $idItem);
				if ($hasDtEncerramento) {
					$result['status']  = false;
					$result['tpError'] = 1;
					$result['message'] = 'A data da vistoria é maior que a data de encerramento de colheita.';
				} else {
					$data = Agro_Util::formatDate($dtVistoria, 'dd/MM/yyyy');
					$dt = explode('/', $data);
					$dtAnterior15Dias  = date('d/m/Y', mktime(0, 0, 0, $dt[1], ($dt[0] - 15), $dt[2])); 
					$dtPosterior15Dias = date('d/m/Y', mktime(0, 0, 0, $dt[1], ($dt[0] + 15), $dt[2])); 
					$SinistroItensSegurados = new Sinistro_Model_LaudosFinaisItensSegurados();
					$hasDtIntervaloMaior15DiasMesmaVistoria = $SinistroItensSegurados->hasDtVistoriaIntervaloMaior15DiasMesmaVistoria($this->session->idVistoria, $dtAnterior15Dias, $dtPosterior15Dias);
					if ($hasDtIntervaloMaior15DiasMesmaVistoria) {
						$result['status']   = false;
						$result['tpError']  = 2;
						$result['message']  = 'A diferença entre a data de vistoria informada para esta quadra e a data ';
						$result['message'] .= 'de vistoria de outra quadra desta mesma vistoria é maior do que 15 dias. ';
						$result['message'] .= 'Talvez seja melhor inserir o laudo desta quadra em outra vistoria.';
					} else {
						$hasDtIntervaloMaior15DiasOutrasVistorias = $SinistroItensSegurados->hasDtVistoriaIntervaloMaior15DiasOutrasVistorias($this->session->idVistoria, $dtAnterior15Dias, $dtPosterior15Dias);
						if ($hasDtIntervaloMaior15DiasOutrasVistorias) {
							$result['status']  = false;
							$result['tpError'] = 3;
							$result['message'] = 'O laudo desta quadra deve ser inserido em outra vistoria.';
						}					
					}
				}
			}
				
			if ($result['tpError'] != 3) {
				if (!$this->session->idLaudoFinal) {
					$this->saveLaudoFinal($this->getRequest()->getParams());
				}
				$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
				$Db->beginTransaction();

				/****************************************************/
				// Tabela sinistro.laudos_finais_itens_segurados
				/***************************************************/
				$SinistroItensSegurados = new Sinistro_Model_LaudosFinaisItensSegurados();
				$itens = array();
				$itens['id_laudo_final']    = $this->session->idLaudoFinal;
				$itens['id_item_segurado']  = $idItem;
				$itens['vl_percent_perdas'] = 0;
				$itens['fl_nao_vistoriada'] = 0;
				$itens['id_motivo_quadra_nao_vistoriada'] = null;
				$itens['dt_vistoria']       = $dtVistoria;
				$itens['fl_assinatura_regulador'] = 0;
				$itens['fl_assinatura_segurado'] = 0;
				$itens['ds_observacao'] = '';				
				$this->session->dtVistoria = $dtVistoria;  

			   	$rs = $SinistroItensSegurados->find($this->session->idLaudoFinal, $idItem);
				$idLaudoFinalItemSegurado = '';
			   	if ($rs['id']) {
				   	$SinistroItensSegurados->update($itens, 'id = ' . $rs['id']);
				   	$idLaudoFinalItemSegurado = $rs['id'];
			   	} else {
				   	$idLaudoFinalItemSegurado = $SinistroItensSegurados->insert($itens);
			   	}
				/****************************************************/
				// Tabela safra12.laudos_finais_graos_multirrisco_itens_segurados
				/***************************************************/
	
		    	$Safra = new Produto_Model_Safras();
				$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisGraosMultirriscoItensSegurados');
				$Safra12ItensSegurados = new $nomeModel;
				$Safra12ItensSegurados->delete($idLaudoFinalItemSegurado);
	
				$itens = array();
				$itens['id_laudo_final_item_segurado'] = $idLaudoFinalItemSegurado; 
				$itens['vl_percent_colhido'] = 0;
				$itens['vl_rendimento_obtido_kg_ha'] = 0;
  				$itens['vl_rendimento_obtido_sacos_ha'] = 0;
  				$itens['vl_rendimento_final_ton_ha'] = 0;
	  			$itens['tp_amostragem'] = '';
	  
				$Safra12ItensSegurados->insert($itens);
				
				$this->session->idLaudoFinalItemSegurado = $idLaudoFinalItemSegurado;

				/****************************************************/
				// Tabela sinistro.laudos_finais_itens_segurados_revistoria
				/***************************************************/
		    	$ItemRevistoria = new Sinistro_Model_LaudosFinaisItensSeguradosRevistoria();
				$ItemRevistoria->delete($idLaudoFinalItemSegurado);
				
				$itens = array();
				$itens['id_laudo_final_item_segurado'] = $idLaudoFinalItemSegurado; 
				$itens['fl_substitui_laudo_anterior']  = 1;
				$ItemRevistoria->insert($itens);
				
				/****************************************************/
				// Tabela sinistro.laudos_finais_itens_segurados_funcionarios
				/***************************************************/
				$ItensSeguradosFuncionario = new Sinistro_Model_LaudosFinaisItensSeguradosFuncionarios();
				$ItensSeguradosFuncionario->delete($idLaudoFinalItemSegurado);
				
				$listFunc = explode(',', $idVistoriador);
				$this->session->listFuncionarios = array();
				foreach ($listFunc as $idFunc) {
					$func = array();
					$func['id_laudo_final_item_segurado'] = $idLaudoFinalItemSegurado;
					$func['id_funcionario']  = $idFunc;
					$this->session->listFuncionarios[] = $idFunc;
					
				   	$ItensSeguradosFuncionario->insert($func);
				}
				
				$Db->commit();
			}

			$this->getResponse()->setBody(Zend_Json::encode($result));
		} catch (Exception $e) {
			if ($Db) {
				$Db->rollback();
			}
			 echo $e->getMessage();
		}
	}	
}