<?

class Safra12_LftrigocevadagranizoController extends Agro_Controller_Action{

	private $errorMessage = false;
	
	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() {
		$dados = $this->getRequest()->getParams();
		
		$this->session->idVistoria = $dados['id_vistoria'];
 		$this->session->idRevistoria = $dados['id_revistoria'];
		$this->session->idCobertura = $dados['id_cobertura'];
		$this->session->idProposta = $dados['id_proposta'];
		$this->session->idProcesso = $dados['id_processo'];
		
		if(!$this->session->idLaudoFinal) {
			if($dados['id_laudo_final']) {
				$this->session->idLaudoFinal = $dados['id_laudo_final'];
			} else {
				$this->session->idLaudoFinal = false;
			}
		}
		
 		$this->view->idVistoria   = $dados['id_vistoria'];
 		$this->view->idRevistoria = $dados['id_revistoria'];
		$this->view->idCobertura  = $dados['id_cobertura'];
		$this->view->idProposta   = $dados['id_proposta'];
		$this->view->idProcesso   = $dados['id_processo'];
		
		$this->view->jQuery()->addJavascriptFile('/resources/javascript/sinistro/sinistro_lf.js');

		$MotivosQuadraNaoVistoriada = new Sinistro_Model_MotivosQuadraNaoVistoriada();
		$this->view->motivos = $MotivosQuadraNaoVistoriada->fetchPairs('id', 'ds_motivo', false, false, 1, false, false);
		
		if(!$this->session->idLaudoFinal) {
			$this->save($this->getRequest()->getParams());
		}
		$this->view->idLaudoFinal = $this->session->idLaudoFinal;
		
		$Safra = new Produto_Model_Safras();
		
		$this->view->listDadosQuadra = 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()) {
			//salva os dados do laudo
			
		} else if ($this->session->idLaudoFinal) {
			//se ja tiver dados do laudo final, popula a tela
			$this->populaQuadrasTela();
		}
		
		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'];
		}
		
        $ModelMotivoQuadraNaoVistoriada = new Sinistro_Model_MotivosQuadraNaoVistoriada();
        $this->view->motivo_nao_realizada = $ModelMotivoQuadraNaoVistoriada->fetchAll()->toArray();
	} 
	
	public function populaQuadrasTela() {
		$Safra = new Produto_Model_Safras();
		$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisTCGranizo');
		$LaudoFinalTCGranizo = new $nomeModel;
		$arr = array();
		$arr['id_cobertura'] = $this->session->idCobertura;
		$arr['id_processo'] = $this->session->idProcesso;
		$arr['id_laudo_final'] = $this->session->idLaudoFinal;
	
		$this->view->dadosQuadra = $LaudoFinalTCGranizo->getDadosItens($arr);
	}
	
	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->session->idProposta;
		$this->view->idLaudoFinal = $this->session->idLaudoFinal;
		$this->view->hasRevistoria = $this->session->hasRevistoria;
		$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;
		
		$ItemSegurado = new Seguro_Model_ItensSegurados();
		$this->view->item = $ItemSegurado->getItemSeguradoById($idItem);
		
		$this->view->vistoriadores = array();
		
    	if ($this->session->idLaudoFinal) {
    		
	    	$Safra = new Produto_Model_Safras();
			$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisTCGranizoItensSegurados');
			
			$LaudoFinalItemSegurado = new $nomeModel;
			
			$rs = $LaudoFinalItemSegurado->getItemSegurado(array('id_laudo_final' => $this->session->idLaudoFinal,'idItem' => $idItem));
			$rs['ds_observacao_item'] = $rs['ds_observacao'];
			$this->view->dadosQuadra = $rs;
		
			$timestampVistoria = $rs['dt_vistoria'];
			
			$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'];
			$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';
				}
			}
    	}
  	}
  	
	public function dadosquadraAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		
		$dados = $this->getRequest()->getParams();
		
		$dados['id_laudo_final'] = $this->session->idLaudoFinal;
		$Safra = new Produto_Model_Safras();
		$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisTCGranizoItensSegurados');
		$LaudoFinalItemSegurado = new $nomeModel;
		
		$dados['idItem'] = $LaudoFinalItemSegurado->getIdItemSegurado($dados);
		//calcula o que falta
		$dados = $this->calcula($dados);
		$dados['ds_observacao'] = $dados['ds_observacao_item'];
		$ret = $LaudoFinalItemSegurado->saveItens($dados);
		if(!$ret) {
			print_r('ALGO ERRADO ACONTECEU');die;
		}
		
		/*
		 * replicação dos dados do laudo para outras quadras
		 * 
		$dados_item_nao_salvo = array();
		
        if(count($dados['item_nao_salvo']) > 0) {
            foreach($dados['item_nao_salvo'] as $id_item_não_salvo) {
                $dados_item_nao_salvo = $dados;
                $dados_item_nao_salvo['idItem'] = $id_item_não_salvo;
                $dados_item_nao_salvo['ds_coordenadas_geograficas'] = $dados['ds_coordenadas_item_nao_salvo'][$id_item_não_salvo];
                $LaudoFinalItemSegurado->saveItens($dados_item_nao_salvo);
            }
        }
        */
		
		$perda_final = 0;
		if($dados['fl_espigamento'] == 'antes') {
			/*
			 * Delete Itens após caso tenham sido cadastrados anteriormente
			 */
			$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisTCGranizoItensSeguradosAposAmostra');
			$ItemAmostra = new $nomeModel;
			$ItemAmostra->delete($dados['idItem'], "id_laudo_final_item_segurado");

			/*
			 * replicação dos dados do laudo para outras quadras
			 * 
			if(count($dados['item_nao_salvo']) > 0) {
        		foreach($dados['item_nao_salvo'] as $id_item_não_salvo) {
        		    $ItemAmostra->delete($id_item_não_salvo, "id_laudo_final_item_segurado");
        		}
			}
			*/
			
			/*
			 * Salva o item e as amostras. ANTES 
			 */
			
			$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisTCGranizoItensSeguradosAntes');
			$ItemAntes = new $nomeModel;
			$dados['ds_estadio_cultura'] = $dados['ds_estadio_antes'];
			$ret = $ItemAntes->save($dados);
			
			/*
			 * replicação dos dados do laudo para outras quadras
			 *
			if(count($dados['item_nao_salvo']) > 0) {
    		    foreach($dados['item_nao_salvo'] as $id_item_não_salvo) {
    		        $dados_item_nao_salvo = $dados;
    		        $dados_item_nao_salvo['idItem'] = $id_item_não_salvo;
                    $ItemAntes->save($dados_item_nao_salvo);
                }
			}
			*/
			
			$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisTCGranizoItensSeguradosAntesAmostra');
			$ItemAmostra = new $nomeModel;
			
			for($i = 0; $i < 10; $i++) {
				if( 
    				$dados['nr_plantas_stand_inicial_'. $i] != '' ||
    				$dados['nr_plantas_destruidas_'. $i] != '' ||
    				$dados['nr_perfilhos_destruidos_'. $i] != ''
				) {
					$arr = array();
					$arr['idItem'] = $dados['idItem'];
					$arr['nr_amostra'] = $i;
					$arr['nr_plantas_stand_inicial'] = $dados['nr_plantas_stand_inicial_'. $i];
					$arr['nr_plantas_destruidas'] = $dados['nr_plantas_destruidas_'. $i];
					$arr['nr_perfilhos_destruidos'] = $dados['nr_perfilhos_destruidos_'. $i];
					$ItemAmostra->save($arr);
					/*
					 * 
					 *
    			    if(count($dados['item_nao_salvo']) > 0) {
                        foreach($dados['item_nao_salvo'] as $id_item_não_salvo) {
                            $arr_nao_salvo = array();
                            $arr_nao_salvo = $arr;
                            $arr_nao_salvo['idItem'] = $id_item_não_salvo;
                            $ItemAmostra->save($arr_nao_salvo);
                        }
    			    }
    			    */
				}
			}
			$perda_final = $dados['vl_percent_perda_total_espigas_desfolhamento'];
			
		} else {
			/*
			 * Deleta itens antes caso tenhan sido cadastrados
			 */
			$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisTCGranizoItensSeguradosAntesAmostra');
			$ItemAmostra = new $nomeModel;
			$ItemAmostra->delete($dados['idItem'], "id_laudo_final_item_segurado");
			
			/*
			 * replicação dos dados do laudo para outras quadras
			 *
		    if(count($dados['item_nao_salvo']) > 0) {
                foreach($dados['item_nao_salvo'] as $id_item_não_salvo) {
                    $ItemAmostra->delete($id_item_não_salvo, "id_laudo_final_item_segurado");
                }
            }
            */		
			
			/*
			 * salva o item e as amostras. APOS 
			 */
			$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisTCGranizoItensSeguradosApos');
			$ItemAntes = new $nomeModel;
			$dados['ds_estadio_cultura'] = $dados['ds_estadio_apos'];
			$ret = $ItemAntes->save($dados);
			
			/*
			 * replicação dos dados do laudo para outras quadras
			 *
            if(count($dados['item_nao_salvo']) > 0) {
                foreach($dados['item_nao_salvo'] as $id_item_não_salvo) {
                    $dados_item_nao_salvo = $dados;
                    $dados_item_nao_salvo['idItem'] = $id_item_nao_salvo;
                    
                    $ItemAmostra->delete($id_item_não_salvo, "id_laudo_final_item_segurado");
                }
            }
            */
			
			$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisTCGranizoItensSeguradosAposAmostra');
			$ItemAmostra = new $nomeModel;
			
			for($i = 0; $i < 10; $i++) {
				if( $dados['vl_percent_media_danos_'. $i] != '' ) {
					$arr = array();
					$arr['idItem'] = $dados['idItem'];
					$arr['nr_amostra'] = $i;
					$arr['vl_percent_media_danos'] = $dados['vl_percent_media_danos_'. $i];
					$ItemAmostra->save($arr);

					/*
					 * replicação dos dados do laudo para outras quadras
					 *
				    if(count($dados['item_nao_salvo']) > 0) {
                        foreach($dados['item_nao_salvo'] as $id_item_não_salvo) {
                            $arr_nao_salvo = array();
                            $arr_nao_salvo = $arr;
                            $arr_nao_salvo['idItem'] = $id_item_não_salvo;
                            $ItemAmostra->save($arr_nao_salvo);
                        }
                    }
                    */
				}
			}
			$perda_final = $dados['vl_percent_perda'];
		}
		
		
		$ModelItens = new Sinistro_Model_LaudosFinaisItensSegurados();
		$arr = array();
		$arr['vl_percent_perdas'] = $perda_final;
		$arr['vl_percent_colhido'] = $dados['vl_percent_colhido'];
		
		$ModelItens->update($arr, "id = " . $dados['idItem']);
		
		/*
		 * replicação dos dados do laudo para outras quadras
		 *
        if(count($dados['item_nao_salvo']) > 0) {
            foreach($dados['item_nao_salvo'] as $id_item_não_salvo) {
                $arr_nao_salvo = array();
                $arr_nao_salvo = $arr;
                $arr_nao_salvo['idItem'] = $id_item_não_salvo;
                $ModelItens->update($arr_nao_salvo, "id = " . $id_item_não_salvo);
            }
        }
        */
		
		$ModelLaudo = new Sinistro_Model_LaudosFinais();
		$dados['id'] = $this->session->idLaudoFinal;
		$ModelLaudo->save($dados);
		
		$result = array();
		$result = array('status' => true);
		$result['message'] = 'Processo realizado com sucesso!';
		$this->getResponse()->setBody(Zend_Json::encode($result));
  	}
  	
  	public function calcula($dados) {
  		if($dados['fl_espigamento'] == 'antes') {
  			$qtd_stand = 0;
  			$media_stand = 0;
  			$qtd_plantas = 0;
  			$media_plantas = 0;
  			$qtd_perfilhos = 0;
  			$media_perfilhos = 0;
  			for($i = 0; $i < 10; $i++) {
  				if($dados['nr_plantas_stand_inicial_'. $i] != '') {
	  				$qtd_stand += $dados['nr_plantas_stand_inicial_'. $i];
	  				$media_stand++;
	  			}
  				
	  			if($dados['nr_plantas_destruidas_'. $i] != '') {
	  				$qtd_plantas += $dados['nr_plantas_destruidas_'. $i];
	  				$media_plantas++;
	  			}
  				
	  			if($dados['nr_perfilhos_destruidos_'. $i] != '') {
	  				$qtd_perfilhos += $dados['nr_perfilhos_destruidos_'. $i];
	  				$media_perfilhos++;
	  			}
  				
  			}
  			
  			$dados['nr_total_plantas_stand_inicial'] = $qtd_stand;
  			if($media_stand > 0 ) {
  				$dados['vl_media_plantas_stand_inicial'] = number_format($qtd_stand / $media_stand, 2);
  			} else {
  				$dados['vl_media_plantas_stand_inicial'] = 0;
  			}
  			$dados['vl_total_espigas_stand_inicial'] = $dados['nr_espigas_planta_stand_inicial'] * $dados['vl_media_plantas_stand_inicial'];
  			
  			$dados['nr_total_plantas_destruidas'] = $qtd_plantas;
  			if($media_plantas > 0){
  				$dados['vl_media_plantas_destruidas'] = number_format($qtd_plantas / $media_plantas, 2);
  			} else {
  				$dados['vl_media_plantas_destruidas'] = 0;
  			}
  			$dados['vl_total_espigas_destruidas'] = $dados['nr_espigas_planta_destruidas'] * $dados['vl_media_plantas_destruidas'];
  			
  			$dados['nr_total_perfilhos_destruidos'] = $qtd_perfilhos;
  			if($media_perfilhos > 0 ) {
  				$dados['vl_media_perfilhos_destruidos'] = number_format($qtd_perfilhos / $media_perfilhos, 2);
  			} else {
  				$dados['vl_media_perfilhos_destruidos'] = 0;
  			}
  			$dados['vl_total_perfilhos_destruidos'] = $dados['vl_media_perfilhos_destruidos'];
  			
  			if($dados['vl_total_espigas_stand_inicial'] != 0) {
  				//Total de espigas perdidas
  				$dados['vl_total_espigas_perdidas'] = $dados['vl_total_perfilhos_destruidos'] +  $dados['vl_total_espigas_destruidas'];
  				//% de perda de espigas
  				$dados['vl_percent_perda_espigas'] = number_format( ($dados['vl_total_espigas_perdidas'] / $dados['vl_total_espigas_stand_inicial'] * 100), 2);
  				//Perda Total (espigas + desfolhamento)
  				$dados['vl_percent_perda_total_espigas_desfolhamento'] = $dados['vl_percent_perda_espigas'] + $dados['vl_percent_desfolhamento'];
  				//CPR
  				$dados['vl_percent_capacidade_produtiva_restante'] = 100 - $dados['vl_percent_perda_total_espigas_desfolhamento'];
  				$dados['vl_percent_perdas'] = $dados['vl_percent_perda_total_espigas_desfolhamento'];  
  			} else {
  				$dados['vl_total_espigas_perdidas'] = 0;
  				$dados['vl_percent_perda_espigas'] = 0;
  				$dados['vl_percent_perda_total_espigas_desfolhamento'] = 0;
  				$dados['vl_percent_capacidade_produtiva_restante'] = 0;
  				$dados['vl_percent_perdas'] = 0;
  			} 
  		} else {
  			
  			//APOS
  			$qtd_danos = 0;
  			$media_danos = 0;
  			for($i = 0; $i<10; $i++) {
  				if($dados['vl_percent_media_danos_'. $i] != '') {
  					$qtd_danos += $dados['vl_percent_media_danos_'. $i];
  					$media_danos++;
  				}
  			}
  			$dados['vl_percent_soma_percentuais'] = $qtd_danos;
  			$dados['nr_amostras'] = $media_danos;
  			if($dados['vl_percent_soma_percentuais'] > 0) {
  				$dados['vl_percent_perda'] = $dados['vl_percent_soma_percentuais'] / $media_danos;
  				$dados['vl_percent_capacidade_produtiva_restante'] = 100 - $dados['vl_percent_perda'];
  				$dados['vl_percent_perdas'] = $dados['vl_percent_perda']; 
  			}
  		}
  		return $dados;
  	}
  	
	public function formquadrasnaosalvasAction() {
		$this->getHelper('layout')->disableLayout();
		
		$idItem = $this->getRequest()->getParam('idItem');
		$idItensSelecionados = $this->getRequest()->getParam('idItensSelecionados');
		
    	$Safra = new Produto_Model_Safras();
		$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisTCGranizoItensSegurados');
		$ItensUvaGranizo = new $nomeModel;
		if ($this->session->idRevistoria) {
			$this->view->itensSegurados = $ItensUvaGranizo->getItensRevistoriadosNaoSalvos($this->session->idProposta, $idItem, $this->session->idRevistoria, $idItensSelecionados);
		} else {
			if ($idItensSelecionados) {
				$this->view->itensSegurados = $ItensUvaGranizo->getItensNaoSalvos($this->session->idProposta, $idItensSelecionados, $idItem, $this->session->idLaudoFinal);
			} else {
				$this->view->itensSegurados = array();
			}
		}
	}
	
	public function verificaAvisos($step = null) {
		try {
			$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
			$Db->beginTransaction();
			
			$AvisoSinistro = new Sinistro_Model_AvisosSinistro();
			$avisos = $AvisoSinistro->getAvisosByCoberturasSemVistPreliminar($this->session->idProposta, $this->session->idCobertura);
			if (count($avisos) > 0) {
				$ItemSegurado = new Sinistro_Model_LaudosFinaisItensSegurados();
				$rs = $ItemSegurado->getMenorDtVistoria($this->session->idLaudoFinal);
				if ($rs['dt_vistoria']) {
					$dtVistoria = Agro_Util::formatDate($rs['dt_vistoria'], 'yyyy-MM-dd');
					foreach ($avisos as $it) {
						$dtSinistro = Agro_Util::formatDate($it['dt_sinistro'], 'yyyy-MM-dd');
						
						if ($it['id_vistoria'] == $this->session->idVistoria) {
							if ($dtVistoria < $dtSinistro) {
								$this->errorMessage = true;
								throw new Exception('A data da vistoria não pode ser anterior a data do sinistro.');
							}
						} else {
							if (!$it['id_vistoria']) {
								if ($dtVistoria >= $dtSinistro) {
									$item = array();
									$item['id_vistoria'] = $this->session->idVistoria;
									$item['id_aviso'] = $it['id_aviso'];
									
									$VistoriaAviso = new Sinistro_Model_VistoriasAvisos();
									$VistoriaAviso->insert($item);
								}
							}
						}
					}
				}
			}
			$Db->commit();
		} catch (Exception $e) {
			$Db->rollBack();
			if ($step == 'saveItem') {
				echo $e->getMessage();
			} else {
				throw new Exception($e->getMessage());
			}
		}
	}
	
	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_tc_granizo
			/***************************************************/
	    	$Safra = new Produto_Model_Safras();
			$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisTCGranizo');
			$LaudoFinalTCGranizo = new $nomeModel;
			
			$Row = $LaudoFinalTCGranizo->createRow();
			$Row->id_laudo_final = $LaudoFinal->id;
		  	$Row->fl_acompanhado_vento = 0;
		  	$Row->ds_direcao_evento = '';
		  	$Row->fl_acompanhado_chuva = 0;
			$Row->ds_estadio_cultura = '';
			$Row->ds_aspectos_gerais_cultura = '';
		  	$Row->ds_diametro_medio_granizo = '';	
			$Row->fl_danos_folhas = 0;
			$Row->fl_danos_ramos = 0;
			$Row->fl_danos_flores = 0;
			$Row->fl_danos_frutos = 0;
			$Row->fl_danos_vegetacao_adjacente = 0;
			$Row->fl_indenizacao_fitossanitaria = 0;
		  	$Row->fl_area_atingida = '';
			$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) {
		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,'LaudosFinaisTCGranizoItensSegurados');
			$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']             = Agro_Util::formatDate($this->session->dtVistoria, 'yyyy-MM-dd'); 
					$itens['vl_percent_perdas']       = $percentuais['percentual_perda'];
					$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;
					}

					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);
						}
					}

					/****************************************************/
					// Tabela safra12.laudos_finais_uva_granizo_itens_segurados
					/***************************************************/
					$Safra12ItensSegurados->delete($idLaudoFinalItemSegurado);
					
				   	$Safra12ItensSegurados->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; 
				} 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;
			if ($post['fl_realizada'] == 'N') {
	  			$laudo['fl_evento_nao_constatado'] = 0;
	  			$laudo['ds_observacao']            = '';
			} else {
	  			$laudo['fl_evento_nao_constatado'] = $post['fl_evento_nao_constatado'] ? 1 : 0;
	  			$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') {
				
				if (!$post['fl_evento_nao_constatado']) {
					
					/****************************************************/
					// Tabela sinistro.laudos_finais_itens_segurados
					/***************************************************/
					$SinistroItemSegurado = new Sinistro_Model_LaudosFinaisItensSegurados();
	
			    	$Safra = new Produto_Model_Safras();
					$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisTCGranizoItensSegurados');
					$Safra12ItensSegurados = new $nomeModel;
					
					if (is_array($post['fl_nao_vistoriada']) && count($post['fl_nao_vistoriada']) > 0) {
						$VistoriaItensSegurados = new Sistema_Model_VistoriasItensSegurados();
						foreach ($post['fl_nao_vistoriada'] 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 {
					/****************************************************/
					// Tabela sinistro.laudos_finais_itens_segurados
					/***************************************************/
					$SinistroItensSegurados = new Sinistro_Model_LaudosFinaisItensSegurados();
					$SinistroItensSegurados->delete($this->session->idLaudoFinal);
				}
			} elseif ($this->session->idLaudoFinal) {
				/****************************************************/
				// Tabela safra12.laudos_finais_uva_granizo
				/***************************************************/
		    	$Safra = new Produto_Model_Safras();
				$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisTCGranizo');
				$LaudoTCGranizo = new $nomeModel;
				$LaudoTCGranizo->delete($this->session->idLaudoFinal);		

				/****************************************************/
				// Tabela sinistro.laudos_finais_itens_segurados
				/***************************************************/
				$SinistroItemSegurado = new Sinistro_Model_LaudosFinaisItensSegurados();
				$SinistroItemSegurado->delete($this->session->idLaudoFinal);
				
				/****************************************************/
				// Tabela sistema.vistorias_itens_segurados
				/***************************************************/
				$VistoriaItensSegurados = new Sistema_Model_VistoriasItensSegurados();
				$VistoriaItensSegurados->delete($this->session->idVistoria);
			}
						
			$Db->commit();
		} catch (Exception $e) {
			$Db->rollBack();
		}
	}
	
	public function getRow() {
		if ($this->session->idLaudoFinal) {
		    $Safra = new Produto_Model_Safras();
			$nomeModel = $Safra->getSafraModel($this->view->idProposta,'LaudosFinaisTCGranizo');
			$Safra = new $nomeModel;
			
			$row = $Safra->getDataLaudoFinal($this->session->idLaudoFinal);

			return $row;
		}
	}
	
	public function populaCampos($post) {
		
		if (array_key_exists('fl_evento_nao_constatado', $post)) {
			$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();
		$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,'LaudosFinaisTCGranizoItensSegurados');
			$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]['nr_item_segurado'] = $item['nr_item_segurado'];
					$data['itensLaudo'][$id]['ds_item_segurado'] = $item['ds_item_segurado'];
					$data['itensLaudo'][$id]['vl_area'] = $item['vl_area'];
					$data['itensLaudo'][$id]['vl_lmga'] = $item['vl_lmga'];
					$data['itensLaudo'][$id]['ds_nome_variedade'] = $item['ds_nome_variedade'];
					
					$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_perdas']  = $item['vl_percent_perdas'] ? number_format($item['vl_percent_perdas'], 2, '.', '') : '';
				}
			}
		}
		$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 getitensvistoriaAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		
		$LaudoFinal = new Sinistro_Model_LaudosFinais();
		$data = $LaudoFinal->getItensDisponiveisLaudoFinal($this->session->idProposta);
		
		$this->getResponse()->setBody(Zend_Json::encode($data));
	}
	
	public function setmotivosAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		$Model = new Sinistro_Model_LaudosFinaisItensSegurados();
		$dados = $this->getRequest()->getParams();
		$dados['id_laudo_final'] = $this->session->idLaudoFinal;
		$Model->setMotivo($dados);
		return true;
	}
	
	public function savedadosvistoriaAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		try {
			
			$result = array('status' => true);
			
			$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, 'yyyy-MM-dd 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;
				}
			}
			
			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']       = Agro_Util::formatDate($dtVistoria, 'yyyy-MM-dd HH:mm:ss');
			$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_uva_granizo_itens_segurados
			/***************************************************/
		   	
	    	$Safra = new Produto_Model_Safras();
			$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisTCGranizoItensSegurados');
			$Safra12ItensSegurados = new $nomeModel;
			$Safra12ItensSegurados->delete($idLaudoFinalItemSegurado);
			
			$itens = array();
			$itens['id_laudo_final_item_segurado'] = $idLaudoFinalItemSegurado; 
			$itens['ds_coordenadas_geograficas'] = 0;
			$itens['vl_percent_area_afetada'] = 0;
			$itens['vl_percent_capacidade_produtiva_restante'] = 0;
  			$itens['vl_area_sinistrada'] = 0;
  			$itens['ds_observacao'] = 0;
  			$itens['fl_espigamento'] = 0;
  			
			$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();
		}
	}	
}