<?

class Sinistro_Model_LaudosFinaisItensSegurados extends Agro_Db_Table_Abstract {
	protected $_rowClass = 'Sinistro_Model_Row_LaudoFinalItemSegurado';
	protected $_schema = 'sinistro';
	protected $_name = 'laudos_finais_itens_segurados';
	protected $_primary = array('id_laudo_final', 'id_item_segurado');
	public $_order = 'id_laudo_final';
	
	public function save($dados) { 
		$ModelLF = new Sinistro_Model_LaudosFinais();
		
		try {
			$Adapter = new Zend_File_Transfer_Adapter_Http();
			$Adapter->setDestination(PATH_LAUDOS);
			$file = $Adapter->getFileInfo();

			$LaudoFinal = $ModelLF->find($dados['id_laudo_final'])->current();
			
			if ($LaudoFinal->verificaIntervaloVistoria($dados['dt_vistoria_data'])){
				
				$Row = $this->getRow($dados['id_laudo_final'], $dados['id_item_segurado']);
				
				//gerais
				$Row->id_laudo_final 					= $dados['id_laudo_final'];
				$Row->id_item_segurado 					= $dados['id_item_segurado'];
				$Row->fl_nao_vistoriada 				= ($dados['fl_nao_vistoriada'] ? 1 : 0);
				$Row->id_motivo_quadra_nao_vistoriada 	= ($dados['id_motivo_quadra_nao_vistoriada'] ? $dados['id_motivo_quadra_nao_vistoriada'] : null);
				$Row->dt_vistoria 						= $dados['dt_vistoria_data'] ? Agro_Util::formatDate($dados['dt_vistoria_data']." ".$dados['dt_vistoria_hora']." ".$dados['dt_vistoria_minutos'], Zend_Date::W3C) : null;
				$Row->fl_assinatura_regulador	 		= ($dados['fl_assinatura_regulador'] ? 1 : 0);
				$Row->fl_assinatura_segurado 			= ($dados['fl_assinatura_segurado'] ? 1 : 0);
				$Row->ds_observacao 					= $dados['ds_observacao'];
				$Row->ds_aspectos_gerais_cultura		= $dados['ds_aspectos_gerais_cultura'];					
				$Row->ds_coordenadas_geograficas 		= $dados['ds_coordenadas_geograficas'];
		        $Row->fl_avalia_danos_anteriores 		= ($dados["fl_avalia_danos_anteriores"] ? 1 : 0);
		        $Row->ds_observacao_assinatura_regulador= $dados["ds_observacao_assinatura_regulador"] ? $dados["ds_observacao_assinatura_regulador"] : null ;
		        $Row->ds_observacao_assinatura_segurado	= $dados["ds_observacao_assinatura_segurado"] ? $dados["ds_observacao_assinatura_segurado"] : null;				
				//
				
				//gambizinha para laudo LF019 Chocho :-/
				if($dados['fl_chocho']){
					$Row->vl_percent_perdas_chocho 			= $dados['vl_percent_perdas_chocho'];
					$Row->vl_percent_colhido_chocho			= $dados['vl_percent_colhido_chocho'];
				}else{
					$Row->vl_percent_perdas 				= $dados['vl_percent_perdas'];
					$Row->vl_percent_colhido 				= ($dados['vl_percent_colhido'] ? $dados['vl_percent_colhido'] : 0);
			        $Row->vl_percent_area_afetada 			= ($dados["vl_percent_area_afetada"] ? $dados["vl_percent_area_afetada"] : null);
			        $Row->vl_ha_area_afetada 				= ($dados["vl_ha_area_afetada"] ? $dados["vl_ha_area_afetada"] : null);
			        $Row->vl_area_sinistrada 				= $dados['vl_area_sinistrada'] ? $dados['vl_area_sinistrada'] : null;
			        $Row->vl_rendimento_final_lavoura 		= $dados["vl_rendimento_final_lavoura"];	
			        
			        //apenas replantio - LF026
			        $Row->vl_ha_area_replantada = $dados['vl_ha_area_replantada'];
				}

				if ($file["ds_nome_laudo_fisico"]["name"]){
						
					$newName = $this->geraNomeArquivoFisico($Row, $file["ds_nome_laudo_fisico"]["name"], $dados);
					
					if (APPLICATION_ENV != 'production') {
						$Adapter->addFilter('Rename', array('target' => PATH_LAUDOS_DEV.$newName, 'overwrite' => true));
					} else {
						$Adapter->addFilter('Rename', array('target' => PATH_LAUDOS."/".$newName, 'overwrite' => true));
					}
					
					try {
						if($Adapter->receive($file["ds_nome_laudo_fisico"]["name"])){
							if ($Row->ds_nome_laudo_fisico){
								unlink(PATH_LAUDOS."/".$Row->ds_nome_laudo_fisico);
							}
							$Row->ds_nome_laudo_fisico = $newName;
						}
					} catch (Exception $e) {
						dump($e);
					}	

				}
				
				//utilizado para digitação de itens segurados replicados
				if($dados['ds_nome_laudo_fisico']){
					$Row->ds_nome_laudo_fisico = $dados['ds_nome_laudo_fisico'];
				}
				
				//caso o percentual colhido seja 100%, marcar a flag para a liquidação não pagar 
				if($dados['vl_percent_colhido'] == 100.00 || $dados['vl_percent_colhido_chocho'] == 100.00){
					$Row->fl_nao_vistoriada = true;
					$Row->id_motivo_quadra_nao_vistoriada = 1;
				}
				
		        $Row->save();
		        
		        $dados['id_laudo_final_item_segurado'] = $Row->id;
				
		        if (array_key_exists('vistoriadores', $dados)) {
		             $Model_LaudosFinaisItensSeguradoFuncionarios = new Sinistro_Model_LaudosFinaisItensSeguradosFuncionarios();	             
		             $Model_LaudosFinaisItensSeguradoFuncionarios->delete($Row->id);
		             
		             foreach ($dados['vistoriadores'] as $idFuncionario) {
		                $Model_LaudosFinaisItensSeguradoFuncionarios->insert(
		                    array(
		                        'id_laudo_final_item_segurado'=>$Row->id,
		                        'id_funcionario'=>$idFuncionario
		                    )
		                );
		             }
		        }
		        
		        if ($Row->fl_avalia_danos_anteriores) {
		        	$AvisosRelacionados = new Sinistro_Model_LaudosFinaisItensSeguradosAvisosRelacionados();
		        	$AvisosRelacionados->save($dados);
		        }
		        
		        if ($dados['id_vistoria']) {				
	                // Relaciona item segurado com vistoria
	                $ModelVIS = new Sistema_Model_VistoriasItensSegurados();
	                $ModelVIS->save(array(
	                    'id_vistoria'       =>  $dados['id_vistoria'],
	                    'id_item_segurado'  =>  $dados['id_item_segurado']
	                ));
				}
				
				//Verifica se o Laudo Final está completo, e caso esteja, seta status para 'Aguardando envio'
				$Model_LaudosFinais = new Sinistro_Model_LaudosFinais();
				
				if ($Model_LaudosFinais->isComplete($dados['id_laudo_final'], $dados['fl_preliminar'])) {
		   			$LaudosFinais = new Sinistro_Model_LaudosFinais();
		    		$LaudoFinal = $Model_LaudosFinais->find($dados['id_laudo_final'])->current();
		    		$LaudoFinal->id_status = $LaudosFinais->getIdStatus('PENDENTE_ENVIO', 'LF');
		    		$LaudoFinal->save();
				}
				
				return $Row->id;
				
			} else {
				$this->setMessage("O intervalo entre vistorias não pode ser superior a 4 dias.");
				return false;
			} 
			
		} catch (Exception $e) {
			dump($e);
			$this->setMessage("Não foi possível salvar o Item Segurado.<br>Erro: {$e->getMessage()}");
			return false;
		}	
	}
	
	public function geraNomeArquivoFisico($Row, $nome_arquivo_original, $params){

		if ($Row->ds_nome_laudo_fisico){
			$nome = explode(".", $Row->ds_nome_laudo_fisico);		
			$nome = $nome[0];
			
			$extensao = explode(".", $nome_arquivo_original);
			$extensao = $extensao[1];
			
			return $nome.".".$extensao;

		} else {
			$Model = new Seguro_Model_ItensSegurados();
			$IS = $Model->find($Row->id_item_segurado)->current();
			
			$Propostas  = new Seguro_Model_Propostas();
			$Proposta   = $Propostas->find($IS->id_proposta)->current();
			
			//$count = $this->fetchAll("id_item_segurado={$Row->id_item_segurado} and id <> $Row->id and ds_nome_laudo_fisico is not null")->count();
			//$count = $this->fetchAll("id_laudo_final= ".$Row->id_laudo_final." and ds_nome_laudo_fisico is not null")->count();
			$count = count($this->contaLaudosByProcesso($params['id_processo']));
			$count++;
			
			$extensao = explode(".", $nome_arquivo_original);
			$extensao = $extensao[1];
			
			return strtoupper(str_pad($Proposta->id_proposta_mae($IS->id_proposta), 6, "0", STR_PAD_LEFT)."_VF_".str_pad($count, 3, "0", STR_PAD_LEFT)."_".$IS->nr_item_segurado.".".$extensao);				
			
		}
	}
	
	public function geraNomeArquivoFisicoEventoNaoConstatado($Row, $nome_arquivo_original, $params){

		if ($Row->ds_nome_laudo_fisico){
			$nome = explode(".", $Row->ds_nome_laudo_fisico);		
			$nome = $nome[0];
			
			$extensao = explode(".", $nome_arquivo_original);
			$extensao = $extensao[1];
			
			return $nome.".".$extensao;

		} else {
			$Propostas  = new Seguro_Model_Propostas();
			$Proposta   = $Propostas->find($params['id_proposta'])->current();			
			
			//$count = $this->fetchAll("id_item_segurado={$Row->id_item_segurado} and id <> $Row->id and ds_nome_laudo_fisico is not null")->count();
			//$count = $this->fetchAll("id_laudo_final= ".$Row->id_laudo_final." and ds_nome_laudo_fisico_chocho is not null")->count();
			$count = count($this->contaLaudosByProcesso($params['id_processo']));
			$count++;
			
			$extensao = explode(".", $nome_arquivo_original);
			$extensao = $extensao[1];
			
			return strtoupper(str_pad($Proposta->id_proposta_mae($params['id_proposta']), 6, "0", STR_PAD_LEFT)."_VF_".str_pad($count, 3, "0", STR_PAD_LEFT)."_EV_N_CONST.".$extensao);				
			
		}
	}	
	
	public function geraNomeArquivoFisicoChocho($Row, $nome_arquivo_original, $params){

		if ($Row->ds_nome_laudo_fisico_chocho){
			$nome = explode(".", $Row->ds_nome_laudo_fisico_chocho);		
			$nome = $nome[0];
			
			$extensao = explode(".", $nome_arquivo_original);
			$extensao = $extensao[1];
			
			return $nome.".".$extensao;

		} else {
			$Model = new Seguro_Model_ItensSegurados();
			$IS = $Model->find($Row->id_item_segurado)->current();
			
			//$count = $this->fetchAll("id_item_segurado={$Row->id_item_segurado} and id <> $Row->id and ds_nome_laudo_fisico is not null")->count();
			//$count = $this->fetchAll("id_laudo_final= ".$Row->id_laudo_final." and ds_nome_laudo_fisico_chocho is not null")->count();
			$count = count($this->contaLaudosChochoByProcesso($params['id_processo']));
			$count++;
			
			$extensao = explode(".", $nome_arquivo_original);
			$extensao = $extensao[1];
			
			return strtoupper(str_pad($IS->id_proposta, 6, "0", STR_PAD_LEFT)."_VF_".str_pad($count, 3, "0", STR_PAD_LEFT)."_".$IS->nr_item_segurado."_CH.".$extensao);				
			
		}
	}	
	
	
	public function getRow($idLaudoFinal, $idItemSegurado) {
	    $Row = false;
	    if($idLaudoFinal && $idItemSegurado) {
	        $Row = parent::find($idLaudoFinal, $idItemSegurado)->current();
	    }
	    if (!$Row) {
	        $Row = $this->createRow();
	    }
	    
	    return $Row;
	}
	
	public function setMotivoNaoVistoriado($id, $id_motivo=null){
		$Row = parent::find($id)->current();
		$Row->id_motivo_quadra_nao_vistoriada = $id_motivo;
		
		return $Row->save();
	}
	
	public function clear($idLaudoFinal) {
		return $this->getAdapter()->query("delete from sinistro.laudos_finais_itens_segurados where id_laudo_final = $idLaudoFinal");
	}
	
	public function setTotal($idLaudoFinal) {
		try {
			// Limpa as quadras existentes
			$this->clear($idLaudoFinal);
			
			// Instancia o laudo final
			$LaudosFinais = new Sinistro_Model_LaudosFinais();
			
			// Busca o laudo do banco
			$LaudoFinal = $LaudosFinais->getRow($idLaudoFinal);
			$LaudoFinal->fl_area_atingida = 'T';
			$LaudoFinal->save();
			
			// Busca o processo para chegar nos itens
			$Processo = $LaudoFinal->processo();
			
			// busca os itens
			$itens = $Processo->itens_segurados(); 
			
			// Salva os itens da proposta nos itens do laudo
			if (is_array($itens) && count($itens)) {
				foreach ($itens as $idx => $item) {
					$this->save(array('id_laudo_final' => $idLaudoFinal, 'id_item_segurado' => $item['id']));
				}
			}
			
			return true;
		} catch (Exception $e) {
			die($e);
		}
	}
	
	public function setParcial($idLaudoFinal, $itensSegurados) {
		$LaudosFinais = new Sinistro_Model_LaudosFinais();
		
		try {
			// Busca o Laudo
			$LaudoFinal = $LaudosFinais->getRow($idLaudoFinal);
			$LaudoFinal->fl_area_atingida = 'P';
			$LaudoFinal->save();
			
			// Limpa as quadras existentes
			$this->clear($idLaudoFinal);
			
			// Salva os itens da proposta nos itens do laudo
			if (is_array($itensSegurados) && count($itensSegurados)) {
				foreach ($itensSegurados as $itemSegurado) {
					$this->save(array('id_laudo_final' => $idLaudoFinal, 'id_item_segurado' => $itemSegurado));
				}
			}
			
			return true;
		} catch (Exception $e) {
			die($e);
		}
	}
	
	/**
	 * @todo CONCERTAR ESTE AMADORISMO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	 */
	public function find($idLaudo, $idItem) {
		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('lf'=>$this->_schema . '.' . $this->_name), '*');
		$select->where('lf.id_laudo_final = ?', $idLaudo);
		$select->where('lf.id_item_segurado = ?', $idItem);
		
		if ($this->fetchRow($select)) {
			return $this->fetchRow($select)->toArray();
		} else {
			return array();
		}
	}
	
	/**
	 * Bacalhau em casacata!!!!!
	 */
	public function getByID($id){
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('lf'=>$this->_schema . '.' . $this->_name));
		$select->where("lf.id = $id");
		
		return $this->fetchRow($select);
	}

	public function delete($idLaudoFinal, $idItem = null) {
		if ($idLaudoFinal){
			$sql = "delete from {$this->_schema}.{$this->_name} where id_laudo_final = $idLaudoFinal";
		
			if ($idItem) {
				if (is_array($idItem)) {
					$sql .= " and id_item_segurado in (" . implode(',', $idItem) . ")";
				} else {
					$sql .= " and id_item_segurado = $idItem";
				}
			}
			
			$this->_db->query($sql);
		}
	}

	public function deleteItem($idLaudoFinalItemSegurado) {
		$sql = "delete from {$this->_schema}.{$this->_name} where id = $idLaudoFinalItemSegurado";

		$this->_db->query($sql);
	}

	public function getMenorDtVistoria($idLaudoFinal) {
		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('lf'=>$this->_schema . '.' . $this->_name), '*');
		$select->where('lf.id_laudo_final = ?', $idLaudoFinal);
		$select->order('lf.dt_vistoria');
		$select->limit('1');
				
		if ($this->fetchRow($select)) {
			return $this->fetchRow($select)->toArray();
		} else {
			return array();		
		}
	}

	public function hasDtVistoriaIntervaloMaior15DiasMesmaVistoria($idVistoria, $dtAnterior15Dias, $dtPosterior15Dias) {
		
		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('lfis'=>$this->_schema . '.' . $this->_name), '*');
		$select->join(array('vl'=>"sistema.vistorias_laudos_finais"),'vl.id_laudo_final = lfis.id_laudo_final', false);
		$select->where('vl.id_vistoria = ?', $idVistoria);
		$select->where('lfis.dt_vistoria < to_timestamp(\' '.$dtAnterior15Dias.' \', \'dd/mm/yyyy\') or lfis.dt_vistoria > to_timestamp(\' '.$dtPosterior15Dias.' \', \'dd/mm/yyyy\')');
		
		$rs = $this->fetchAll($select);
		if ($rs) {
			$dados = $rs->toArray();
			if (count($dados) > 0) {
				return true;
			} else {
				return false;		
			}
		} else {
			return false;
		}
	}

	public function hasDtVistoriaIntervaloMaior15DiasOutrasVistorias($idVistoria, $dtAnterior15Dias, $dtPosterior15Dias) {
		
		$data = array();
		$select = "
				select 
					lfis.* 
				from 
		   			       sinistro.vistorias_avisos vav 
				inner join sistema.vistorias_laudos_finais vlf on vlf.id_vistoria = vav.id_vistoria
				inner join sinistro.laudos_finais_itens_segurados lfis on lfis.id_laudo_final = vlf.id_laudo_final
				inner join sistema.vistorias v on v.id = vav.id_vistoria
				inner join sistema.tipos_vistoria tv on tv.id = v.id_tipo
				where
					tv.ds_chave_tipos_vistoria='FINAL' and
					v.id != $idVistoria and
					(lfis.dt_vistoria < to_timestamp('$dtAnterior15Dias', 'dd/mm/yyyy') or lfis.dt_vistoria > to_timestamp('$dtPosterior15Dias', 'dd/mm/yyyy')) and
					vav.id_aviso in(
								select 
									a.id
								from
				   					       sinistro.avisos a
								inner join sinistro.vistorias_avisos va on va.id_aviso = a.id
								where
									va.id_vistoria = $idVistoria
					)
		";
		
		$data = $this->_db->fetchAll($select);
		if ($data) {
			if (count($data) > 0) {
				return true;
			} else {
				return false;		
			}
		} else {
			return false;
		}
	}
	
	
	public function setMotivo($dados) {
		
		$Model = new Sinistro_Model_LaudosFinaisItensSegurados();
		//feio pra caralho, eu sei... um dia o Samir arruma isso ;-)
  		$sql = "insert into 
  					sinistro.laudos_finais_itens_segurados 
  					(id_laudo_final, id_item_segurado, id_motivo_quadra_nao_vistoriada) 
  				values
  					({$dados['id_laudo_final']}, {$dados['id']}, {$dados['id_motivo_quadra_nao_vistoriada']})";
		
		/*
		$sql = "update 
					sinistro.laudos_finais_itens_segurados
				set
					id_motivo_quadra_nao_vistoriada = {$dados['id_motivo_quadra_nao_vistoriada']}
				where
					id_item_segurado = {$dados['id']} and
					id_laudo_final = {$dados['id_laudo_final']}";*/
		return $this->_db->query($sql);
	}
	
	public function getDataLaudoFinalItemSegurado($idLaudoFinalItemSegurado) {
		$ModelAvisosRelacionados = new Sinistro_Model_LaudosFinaisItensSeguradosAvisosRelacionados();

		$caseAssinado = new Zend_Db_Expr('(CASE WHEN fl_assinado IS NULL THEN NULL WHEN fl_assinado IS TRUE THEN 1 ELSE 0 END) AS fl_assinado');
		
	    $select = $this->select()->setIntegrityCheck(false);
        $select->from(
            array(
                'lfis'=>$this->_schema.'.'.$this->_name
            ),
            array(
            	'id_item_segurado',
                'vl_percent_perdas',
                'fl_nao_vistoriada',
                'id_motivo_quadra_nao_vistoriada',
                'dt_vistoria',
                'fl_assinatura_regulador',
                'fl_assinatura_segurado',
                'ds_observacao',
            	'ds_aspectos_gerais_cultura',
                'vl_percent_colhido',
                'vl_area_sinistrada',
            	'vl_percent_area_afetada',
                'ds_coordenadas_geograficas',
                "to_char(dt_vistoria, 'dd/mm/yyyy') as dt_vistoria_data",
                "to_char(dt_vistoria, 'HH24') as dt_vistoria_hora",
                "to_char(dt_vistoria, 'MI') as dt_vistoria_minutos",
            	"vl_rendimento_final_lavoura",
            	"fl_avalia_danos_anteriores",
            	'ds_observacao_assinatura_regulador',
            	'ds_observacao_assinatura_segurado',
            	'vl_ha_area_afetada',
            	'ds_nome_laudo_fisico',
            	'vl_percent_perdas_chocho',
            	'vl_percent_colhido_chocho',
				'vl_area_vistoriada',
				'id_laudo_final',
				'vl_area_declarada',
				"(CASE WHEN fl_zoneamento_valido IS NULL THEN null WHEN fl_zoneamento_valido IS true THEN 1 else 0 END) AS fl_zoneamento_valido",
				$caseAssinado,
            )
        );
        $select->where('id = ?', $idLaudoFinalItemSegurado);

        $dataLaudoFinalItemSegurado = $this->fetchRow($select)->toArray();

        $Model_LaudosFinaisItensSeguradosFuncionarios = new Sinistro_Model_LaudosFinaisItensSeguradosFuncionarios();

        $vistoriadores = $Model_LaudosFinaisItensSeguradosFuncionarios->getArrayVistoriadoresByIdLaudoFinalItemSegurado($idLaudoFinalItemSegurado);

        if(count($vistoriadores) > 0) {
            $dataLaudoFinalItemSegurado['vistoriadores'] = $vistoriadores;
        }

        $avisos_relacionados = $ModelAvisosRelacionados->fetchAll("id_laudo_final_item_segurado=$idLaudoFinalItemSegurado");

        $dataLaudoFinalItemSegurado['avisos_relacionados'] = array();

        if ($avisos_relacionados){
        	foreach ($avisos_relacionados  as $aviso){
        		$dataLaudoFinalItemSegurado['avisos_relacionados'][] = $aviso["id_aviso"];
        	}	
        } 

        return $dataLaudoFinalItemSegurado;
    }

	public function valida($params){
		$dados = $params;

		if ($dados["vl_area_sinistrada"]){
			$ModelIS = new Seguro_Model_ItensSegurados();
			$IS = $ModelIS->find($dados["id_item_segurado"])->current();

			if ($dados["vl_area_sinistrada"] > $IS->vl_area){
				$this->setMessage("A área sinistrada não pode ser superior à área do talhão");
				$dados=false;
			}
		}

		return $dados;
	}

    public function getMinMaxDtVistoriaByIdLaudoFinal($idLaudoFinal, $idLaudoFinalItemSegurado = null) {
        $select = $this->select()->setIntegrityCheck(false);
        $select->from(array('lfis'=>'sinistro.laudos_finais_itens_segurados'), array('min(lfis.dt_vistoria) as min_dt_vistoria', 'max(lfis.dt_vistoria) as max_dt_vistoria'));
        $select->where('lfis.id_laudo_final = ?', $idLaudoFinal);
        if ($idLaudoFinalItemSegurado) {
            $select->where('lfis.id != ?', $idLaudoFinalItemSegurado);
        }
        
        return $this->_db->fetchRow($select);
    }
    
    public function contaLaudosByProcesso($idProcesso) {
        $select = $this->select()->setIntegrityCheck(false);
        $select->from(array('pro'=>'sinistro.processos'), false);
        $select->join(array('lf'=>'sinistro.laudos_finais'),'pro.id = lf.id_processo', 'id');
        $select->join(array('lfis'=>'sinistro.laudos_finais_itens_segurados'),'lf.id = lfis.id_laudo_final', false);
        $select->where('pro.id = ?', $idProcesso);
        $select->where('lfis.ds_nome_laudo_fisico != ?', 'null');

        return $this->_db->fetchAll($select);
    }    

    public function contaLaudosChochoByProcesso($idProcesso) {
        $select = $this->select()->setIntegrityCheck(false);
        $select->from(array('pro'=>'sinistro.processos'), false);
        $select->join(array('lf'=>'sinistro.laudos_finais'),'pro.id = lf.id_processo', 'id');
        $select->join(array('lfis'=>'sinistro.laudos_finais_itens_segurados'),'lf.id = lfis.id_laudo_final', false);
        $select->where('pro.id = ?', $idProcesso);
        $select->where('lfis.ds_nome_laudo_fisico != ?', 'null');

        return $this->_db->fetchAll($select);
    }    
    
    public function getLaudoEscaneado($idLaudoFinal) {
    	$select = $this->select()->setIntegrityCheck(false);
    	$select->from(array('lf'   => 'sinistro.laudos_finais'), null);
    	$select->join(array('vlf'  => 'sistema.vistorias_laudos_finais'),'vlf.id_laudo_final = lf.id', null);
    	$select->join(array('v'    => 'sistema.vistorias'),'v.id = vlf.id_vistoria', null);
    	$select->join(array('vis'  => 'sistema.vistorias_itens_segurados'),'vis.id_vistoria = v.id', null);
    	$select->joinLeft(array('lfis' => 'sinistro.laudos_finais_itens_segurados'),'vis.id_item_segurado = lfis.id_item_segurado and lf.id = lfis.id_laudo_final', 'ds_nome_laudo_fisico');
    	$select->where('lf.id = ?', $idLaudoFinal);

    	return $this->_db->fetchAll($select);
    }    
    
}