<?

class Safra12_LftrigocevadageadaController 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;
		
		$this->view->title = 'Sinistro » Laudo Final para Trigo e Cevada';
	}

	public function formAction() {
		$dados = $this->getRequest()->getParams();
		
		$this->view->title .= ' » Geada » Formulário';
		$this->view->back = "/sinistro/processo/view/id/{$dados['id_processo']}";
		
		if($dados['id_revistoria']){
			$this->view->title .= ' de Revistoria';
		}
		
		$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   = $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->jQuery()->addJavascriptFile('/resources/javascript/sinistro/sinistro_lf.js');
		
		if(!$this->session->idLaudoFinal) {
			$this->save($dados);
		}

		$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()) {

			$errorMsg = '';
			if ($errorMsg) {
				$this->view->form->populate($this->getRequest()->getParams());
				$this->populaCampos($this->getRequest()->getParams());
				$this->view->showMessage($errorMsg, 'error');
			} else {
				try {
					$this->save($this->getRequest()->getParams());
					$this->verificaAvisos('saveLaudo');
					$this->populaDadosTela();

					if (!$this->view->idLaudoFinal) {
						$this->view->idLaudoFinal = $this->session->idLaudoFinal;
					}
					
					$this->view->showMessage(MSG_SUCCESS, 'success');
				} catch (Exception $e) {
					$this->populaCampos($this->getRequest()->getParams());
					if ($this->errorMessage) {
						$this->view->showMessage($e->getMessage(), 'error');
					} else {
						$this->view->showMessage(MSG_ERROR, 'error');
					}
				}
			}
		} else if ($this->session->idLaudoFinal) {
			$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,'LaudosFinaisTCGeada');
		$LaudoFinalTCGeada = 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 = $LaudoFinalTCGeada->getDadosItens($arr);
	}
	
	public function formdadosquadraAction() {
		$this->getHelper('layout')->disableLayout();
		
		$idItem = $this->getRequest()->getParam('id_item');
		$this->view->idItem = $idItem;
		$this->view->idRevistoria = $this->session->idRevistoria;
		$this->view->idProposta = $this->getRequest()->getParam('id_proposta');
		$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,'LaudosFinaisTCGeadaItensSegurados');
			
			$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], 'ddMMyyyy'); 
			$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();
		
		$result = array();
		
		try {
			
			$dados = $this->getRequest()->getParams();
				
			$Safra = new Produto_Model_Safras();
			
			$ModelName = $Safra->getSafraModel($dados['id_proposta'], 'LaudosFinaisTCGeadaItensSegurados');
			$LaudoFinalItemSegurado = new $ModelName;
			
			$dados['id_item'] = $LaudoFinalItemSegurado->getIdItemSegurado($dados);
			
			/*
			 * Calcula o que falta 
			 */
			$dados = $this->calcula($dados);
			
			$dados['ds_observacao'] = $dados['ds_observacao_item'];
			$dados['vl_percent_capacidade_produtiva_restante'] = ($dados['fl_espigamento'] == 'antes' ? $dados['vl_percent_capacidade_produtiva_restante'] : ($dados['vl_percent_capacidade_produtiva_restante_pq'] ? $dados['vl_percent_capacidade_produtiva_restante_pq'] : $dados['vl_percent_capacidade_produtiva_restante_ed']));
	
			$ret = $LaudoFinalItemSegurado->saveItens($dados);
			
		
			if($dados['fl_espigamento'] == 'antes') {
				/*
				 *Deleta itens para manter integridade 
				 */
				$ModelName = $Safra->getSafraModel($dados['id_proposta'],'LaudosFinaisTCGeadaItensSeguradosApos');
				$ItemApos = new $ModelName;
				$ItemApos->delete($dados['id_item'], "id_laudo_final_item_segurado");
				
				$ModelName = $Safra->getSafraModel($dados['id_proposta'],'LaudosFinaisTCGeadaItensSeguradosAposEd');
				$ItemAposEd = new $ModelName;
				$ItemAposEd->delete($dados['id_item'], "id_laudo_final_item_segurado");
				
				$ModelName = $Safra->getSafraModel($dados['id_proposta'],'LaudosFinaisTCGeadaItensSeguradosAposEdAmostra');
				$ItemAmostraAposEd = new $ModelName;
				$ItemAmostraAposEd->delete($dados['id_item'], "id_laudo_final_item_segurado");
				
				$ModelName = $Safra->getSafraModel($dados['id_proposta'],'LaudosFinaisTCGeadaItensSeguradosAposPq');
				$ItemAposPq = new $ModelName;
				$ItemAposPq->delete($dados['id_item'], "id_laudo_final_item_segurado");
				
				$ModelName = $Safra->getSafraModel($dados['id_proposta'],'LaudosFinaisTCGeadaItensSeguradosAposPqAmostra');
				$ItemAmostraPq = new $ModelName; 
				$ItemAmostraPq->delete($dados['id_item'], "id_laudo_final_item_segurado");
			
				
				/*
				 * Salva o item e as amostras. ANTES 
				*/
	
				$nomeModel = $Safra->getSafraModel($dados['id_proposta'],'LaudosFinaisTCGeadaItensSeguradosAntes');
				$ItemAntes = new $nomeModel;
				$dados['ds_estadio_cultura'] = $dados['ds_estadio_antes'];
				$ret = $ItemAntes->save($dados);
				
				$nomeModel = $Safra->getSafraModel($dados['id_proposta'],'LaudosFinaisTCGeadaItensSeguradosAntesAmostra');
				$ItemAmostra = new $nomeModel;
				
				for($i = 1; $i < 11; $i++) {
					if( $dados['nr_plantas_stand_inicial_'. $i] != '' ||
						$dados['nr_plantas_destruidas_'. $i] != '' ||
						$dados['nr_perfilhos_destruidos_'. $i] != '') {
							$arr = array();
							$arr['id_item'] = $dados['id_item'];
							$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);
					}
					
					$perda_final = $dados['vl_percent_perda_total_espigas_desfolhamento'];
				}
			
			} else {		
				/*
				 * Deleta para manter integridade
				 */
				$ModelName = $Safra->getSafraModel($dados['id_proposta'],'LaudosFinaisTCGeadaItensSeguradosAntes');
				$ItemAntes = new $ModelName; 
				$ItemAntes->delete($dados['id_item'], "id_laudo_final_item_segurado");
				
				$ModelName = $Safra->getSafraModel($dados['id_proposta'],'LaudosFinaisTCGeadaItensSeguradosAntesAmostra');
				$ItemAmostraAntes = new $ModelName; 
				$ItemAmostraAntes->delete($dados['id_item'], "id_laudo_final_item_segurado");
				
				
				/*
				 * Salva Itens e amostras após o espigamento.
				 */
				$ModelName = $Safra->getSafraModel($dados['id_proposta'],'LaudosFinaisTCGeadaItensSeguradosApos');
				$ItemApos = new $ModelName; 
				$dados['ds_estadio_cultura'] = $dados['ds_estadio_apos'];
				$ItemApos->save($dados);
				
				
				/*
				 * Salva Espigas destruidas
				 */
				$ModelName = $Safra->getSafraModel($dados['id_proposta'],'LaudosFinaisTCGeadaItensSeguradosAposEd');
				$ItemAposEd = new $ModelName; 
				$dados['vl_percent_perda'] = ($dados['vl_percent_perda_ed'] * 100);
				$dados['vl_percent_capacidade_produtiva_restante'] = $dados['vl_percent_capacidade_produtiva_restante_ed'];
				$dados['vl_percent_perda_total'] = $dados['vl_percent_perda_total_ed'];
			
				$ItemAposEd->save($dados);
				
				$ModelName = $Safra->getSafraModel($dados['id_proposta'],'LaudosFinaisTCGeadaItensSeguradosAposEdAmostra');
				$ItemAmostraAposEd = new $ModelName;
				
				$ItemAmostraAposEd->delete($dados['id_item'], 'id_laudo_final_item_segurado');
				
				$i=1;
				for($i = 1; $i <= 10; $i++) {
					if( $dados['vl_percent_media_danos_ed_'.$i] != '' ) {
						$arr = array();
						$arr['id_item'] = $dados['id_item'];
						$arr['nr_amostra'] = $i;
						$arr['vl_percent_media_danos'] = $dados['vl_percent_media_danos_ed_'. $i];
						$ItemAmostraAposEd->save($arr);
					}
				}
				
				
				/*
				 * Salva Perda de Qualidade
				 */
				$ModelName = $Safra->getSafraModel($dados['id_proposta'],'LaudosFinaisTCGeadaItensSeguradosAposPq');
				$ItemAposPq = new $ModelName; 
				$dados['vl_percent_perda'] = ( $dados['vl_percent_perda_pq'] * 100);
				$dados['vl_percent_capacidade_produtiva_restante'] = $dados['vl_percent_capacidade_produtiva_restante_pq'];
				$ItemAposPq->save($dados);
				
				$ModelName = $Safra->getSafraModel($dados['id_proposta'],'LaudosFinaisTCGeadaItensSeguradosAposPqAmostra');
				$ItemAmostraAposPq = new $ModelName;
				 
				$ItemAmostraAposPq->delete($dados['id_item'], 'id_laudo_final_item_segurado');
				
				$i=1;
				for($i = 1; $i <=10; $i++) {
					if( $dados['vl_percent_media_danos_pq_'.$i] != '' ) {
						$arr = array();
						$arr['id_item'] = $dados['id_item'];
						$arr['nr_amostra'] = $i;
						$arr['vl_percent_media_danos'] = $dados['vl_percent_media_danos_pq_'. $i];
						$ItemAmostraAposPq->save($arr);
					}
				}
				
				$perda_final = (100 - $dados['vl_percent_capacidade_produtiva_restante']);
			}

			$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['id_item']);
			
			$ModelLaudo = new Sinistro_Model_LaudosFinais();
			$dados['id'] = $dados['id_laudo_final'];
			$ModelLaudo->save($dados);
			
			$result = array('status' => true);
			$result['message'] = MSG_SUCCESS;
			$this->getResponse()->setBody(Zend_Json::encode($result));
			
		} catch (Exception $e) {
			$result = array('status' => false);
			$result['message'] = MSG_ERROR."\n\n".$e->getMessage();
			$this->getResponse()->setBody(Zend_Json::encode($result));
		}	
	}
  	
  	
  	public function calcula($dados) {
  		if($dados['fl_espigamento'] == 'antes') {
  			$qtd_stand = 0;
  			$media_stand = 0.0;
  			$qtd_plantas = 0;
  			$media_plantas = 0.0;
  			$qtd_perfilhos = 0;
  			$media_perfilhos = 0.0;
  			
  			for($i = 1; $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 {

  			$vl_soma_percentuais_ed = 0.0;
  			$vl_soma_percentuais_pq = 0.0;
  	
  			$nr_amostras_ed = 0;
  			$nr_amostras_pq = 0;
  			
  			
  			for($i = 1; $i<11; $i++) {
  				if($dados['vl_percent_media_danos_ed_'. $i] != '') {
  					$vl_soma_percentuais_ed += $dados['vl_percent_media_danos_ed_'. $i];
  					$nr_amostras_ed++;
  				}
  				if($dados['vl_percent_media_danos_pq_'. $i] != '') {
  					$vl_soma_percentuais_pq += $dados['vl_percent_media_danos_pq_'. $i];
  					$nr_amostras_pq++;
  				}
  			}
  			
  			if ($nr_amostras_ed > 0 || $nr_amostras_pq > 0){
  				if ($nr_amostras_ed > 0){
  					$dados['nr_amostras'] = $nr_amostras_ed;
  					
  				} else {
  					$dados['nr_amostras'] = $nr_amostras_pq;
  					
  				}
  			}
  			
  			$dados['vl_soma_percentuais_ed'] = $vl_soma_percentuais_ed;
  			
  			$dados['vl_soma_percentuais_pq'] = $vl_soma_percentuais_pq;
  			
  			$dados['vl_percent_perda_ed'] = (($vl_soma_percentuais_ed != 0) ? ( ( $vl_soma_percentuais_ed / $dados['nr_amostras'] ) / 100) : 0);
  			
  			$dados['vl_percent_perda_total_ed'] = (($dados['vl_percent_perda_ed'] != 0) ? (($dados['vl_percent_perda_ed'] * 100) + $dados['vl_percent_dano_colmos']) : 0);
  			
			$dados['vl_percent_capacidade_produtiva_restante_ed'] = (100 - $dados['vl_percent_perda_total_ed']); // CPR
  			
			$dados['vl_percent_perda_pq'] = (($dados['nr_amostras'] == 0) ? 0 : (($dados['vl_soma_percentuais_pq']/$dados['nr_amostras']) / 100));
  		
			$dados['perda_real'] = (($dados['vl_percent_perda_pq'] != 0) ? ($dados['vl_percent_capacidade_produtiva_restante_ed'] * $dados['vl_percent_perda_pq']) : 0);
			
			$dados['vl_percent_capacidade_produtiva_restante_pq'] = ($dados['vl_percent_capacidade_produtiva_restante_ed'] - $dados['perda_real']);

  		}
  		return $dados;
  	}
  	
	public function formquadrasnaosalvasAction() {
		$this->getHelper('layout')->disableLayout();
		
		$idItem = $this->getRequest()->getParam('id_item');
		$idItensSelecionados = $this->getRequest()->getParam('id_itens_selecionados');
		
    	$Safra = new Produto_Model_Safras();
		$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisTCGeadaItensSegurados');
		$ItensTCGeada = new $nomeModel;
		if ($this->session->idRevistoria) {
			$this->view->itensSegurados = $ItensTCGeada->getItensRevistoriadosNaoSalvos($this->session->idProposta, $idItem, $this->session->idRevistoria, $idItensSelecionados);
		} else {
			if ($idItensSelecionados) {
				$this->view->itensSegurados = $ItensTCGeada->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'], 'yyyyMMdd');
					foreach ($avisos as $it) {
						$dtSinistro = Agro_Util::formatDate($it['dt_sinistro'], 'yyyyMMdd');
						
						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_geada
			/***************************************************/
	    	$Safra = new Produto_Model_Safras();
			$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisTCGeada');
			$LaudoFinalTCGeada = new $nomeModel;
			
			$Row = $LaudoFinalTCGeada->createRow();
			$Row->id_laudo_final = $LaudoFinal->id;
			
			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 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,'LaudosFinaisTCGeadaItensSegurados');
					$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);
				}
			} else {
				if ($this->session->idLaudoFinal) {
					
					/****************************************************/
					// Tabela safra12.laudos_finais_uva_granizo
					/***************************************************/
			    	$Safra = new Produto_Model_Safras();
					$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisTCGeada');
					$LaudoTCGEada = new $nomeModel;
					$LaudoTCGEada->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,'LaudosFinaisTCGeada');
			$Safra = new $nomeModel;
			
			$row = $Safra->getDataLaudoFinal($this->session->idLaudoFinal);

			return $row;
		}
	}
	
	public function populaCampos($post) {
		
		$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,'LaudosFinaisTCGeadaItensSegurados');
			$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 savedadosvistoriaAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		try {
			
			$result = array('status' => true);
			
			$idItem        = $this->getRequest()->getParam('id_item');
			$dtVistoria    = $this->getRequest()->getParam('dt_vistoria');
			$hrVistoria    = $this->getRequest()->getParam('hr_vistoria');
			$minVistoria   = $this->getRequest()->getParam('min_vistoria');
			$idVistoriador = $this->getRequest()->getParam('id_vistoriador');
			
			$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']       = $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_tc_geada_itens_segurados
			/***************************************************/
		   	
	    	$Safra = new Produto_Model_Safras();
			$nomeModel = $Safra->getSafraModel($this->session->idProposta,'LaudosFinaisTCGeadaItensSegurados');
			$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 'idItem: '.$idItem.'<br><pre>'.$e.'</pre>';
		}
	}	
}