<?

class Safra12_Model_LaudosFinaisTCGeadaItensSegurados extends Agro_Db_Table_Abstract {

	protected $_schema = 'safra12';
	protected $_name = 'laudos_finais_tc_geada_itens_segurados';
	protected $_primary = 'id';
	public $_order = 'id_laudo_final';

	
	public function saveItens($dados) {
		
		$sql = "select id from {$this->_schema}.{$this->_name} where id_laudo_final_item_segurado = {$dados['id_item']}";
		$id = $this->_db->fetchOne($sql);
		
		$Row = $this->getRow($id);
		
		
		$arr = array();
		$Row->id_laudo_final_item_segurado = $dados['id_item'];
		$Row->ds_coordenadas_geograficas = $dados['ds_coordenadas_geograficas'];
		$Row->vl_area_sinistrada = $dados['vl_area_sinistrada'];
		$Row->vl_percent_area_afetada = $dados['vl_percent_area_afetada'];
		$Row->vl_percent_capacidade_produtiva_restante = $dados['vl_percent_capacidade_produtiva_restante'];
		$Row->ds_observacao = $dados['ds_observacao'];
		$Row->fl_espigamento = $dados['fl_espigamento'];
		
		//salva o item
		return $Row->save();
		
	}
	
	
	
	public function getItensByLaudo($idLaudo) {
		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('lf'=>'sinistro.laudos_finais'), false);
		$select->join(array('lfit'=>'sinistro.laudos_finais_itens_segurados'), 'lfit.id_laudo_final = lf.id', '*');
		$select->joinLeft(array('ugit'=>$this->_schema . '.' . $this->_name), 'ugit.id_laudo_final_item_segurado = lfit.id', array('fl_indenizacao_fitossanitaria'));
		$select->join(array('it'=>'seguro.itens_segurados'), 'it.id = lfit.id_item_segurado', array('nr_item_segurado', 'ds_item_segurado', 'vl_area', 'vl_lmga'));
		$select->join(array('v'=>'produto.variedades'), 'v.id = it.id_variedade', array('ds_nome_variedade'));
		$select->where('lf.id = ?', $idLaudo);

		return $this->fetchAll($select)->toArray();
	}
			
	public function delete($idLaudoFinalItemSegurado) {
		$this->_db->query("delete from {$this->_schema}.{$this->_name} where id_laudo_final_item_segurado = $idLaudoFinalItemSegurado");
	}

	/*public function find($idLaudoFinal, $idItem) {
		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('item'=>'sinistro.laudos_finais_itens_segurados'), array('id as id_laudo_final_item_segurado', 'id_item_segurado', 'dt_vistoria', 'vl_percent_perdas', 'ds_observacao', 'fl_assinatura_regulador', 'fl_assinatura_segurado'));
		$select->joinLeft(
			array(	'it'=>"$this->_schema.$this->_name"),
				 	'it.id_laudo_final_item_segurado = item.id','*');
		$select->where('item.id_laudo_final = ?', $idLaudoFinal);
		$select->where('item.id_item_segurado = ?', $idItem);
		
		if ($this->fetchRow($select)) {
			return $this->fetchRow($select)->toArray();
		} else {
			return array();
		}
	}*/

	public function getItensNaoSalvos($idProposta, $idItensSelecionados, $idItem, $idLaudoFinal) {
		$select = "
					select 	
						item.id_proposta,
						item.id,
						item.nr_item_segurado,
						item.ds_item_segurado,
						item.vl_area,
						item.vl_lmga,
						v.ds_nome_variedade
					from 
						   seguro.itens_segurados item
					inner join produto.variedades v on (v.id = item.id_variedade)
					where 
						item.id_proposta = $idProposta
						and item.fl_ativo = true
						and item.id not in (
									select 
										lfis.id_item_segurado
									from 
										sinistro.laudos_finais_itens_segurados lfis
									where 
										lfis.id_laudo_final = $idLaudoFinal
								)
						and item.id != $idItem
						and item.id in ($idItensSelecionados)
			
					order by
						item.id
		";

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

	public function getItensRevistoriadosNaoSalvos($idProposta, $idItem, $idRevistoria, $idItensSelecionados) {
		$select = "
				SELECT 	
					it.id_proposta,
					it.id,
					it.nr_item_segurado,
					it.ds_item_segurado,
					it.vl_area,
					it.vl_lmga,
					v.ds_nome_variedade
				FROM 
						   seguro.itens_segurados AS it
					INNER JOIN produto.variedades AS v  ON  
							v.id = it.id_variedade	
					INNER JOIN sinistro.laudos_finais_itens_segurados AS lfis ON
							lfis.id_item_segurado = it.id
					INNER JOIN sistema.vistorias_itens_segurados AS vis ON
							vis.id_item_segurado = it.id
					INNER JOIN sistema.vistorias_laudos_finais AS vlf ON
							vlf.id_vistoria = vis.id_vistoria and vlf.id_laudo_final = lfis.id_laudo_final
		
				WHERE
					    it.id_proposta = $idProposta
					AND vis.id_vistoria IN (
								SELECT 
									rv.id_vistoria
								FROM
									sistema.revistorias_vistorias rv
								WHERE
									rv.id_revistoria = $idRevistoria
							)
					AND it.id NOT IN (
							SELECT 
								lfis.id_item_segurado
							FROM
							           seguro.itens_segurados                 AS it 
							INNER JOIN sinistro.laudos_finais_itens_segurados AS lfis ON
									lfis.id_item_segurado = it.id
							WHERE 
								it.id_proposta = $idProposta
							)	
					AND it.id != $idItem
					and it.id in ($idItensSelecionados)
				order by it.id
		";

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

	public function getMaiorPercentColhidoLF($idProposta, $idCobertura, $idItem, $dtVistoria) {

		$select = "
				select 
					max(lfis.vl_percent_colhido) as vl_percent_colhido
				from
					sinistro.avisos av
					inner join sinistro.vistorias_avisos va on va.id_aviso = av.id
					inner join sistema.vistorias_coberturas vc on vc.id_vistoria = va.id_vistoria
					inner join sistema.vistorias_laudos_finais vlf on vlf.id_vistoria = va.id_vistoria
					inner join sinistro.laudos_finais_itens_segurados lfis on lfis.id_laudo_final = vlf.id_laudo_final
					inner join safra12.laudos_finais_uva_granizo_itens_segurados lfugis on lfugis.id_laudo_final_item_segurado = lfis.id
				where
					av.id_proposta = $idProposta and
					vc.id_cobertura = $idCobertura and
					lfis.id_item_segurado = $idItem and
					lfis.dt_vistoria < '$dtVistoria'
		";	
	
		return $this->_db->fetchOne($select);
	}
		
	public function getMaiorPercentColhidoRevistoria($idProposta, $idCobertura, $idItem, $dtVistoria) {

		$select = "
				select 
					max(lfis.vl_percent_colhido) as vl_percent_colhido
				from
					sinistro.avisos av
					inner join sinistro.vistorias_avisos va on va.id_aviso = av.id
					inner join sistema.vistorias_coberturas vc on vc.id_vistoria = va.id_vistoria
					inner join sistema.revistorias_vistorias rv on rv.id_vistoria = va.id_vistoria
					inner join sistema.vistorias_laudos_finais vlf on vlf.id_vistoria = rv.id_revistoria
					inner join sinistro.laudos_finais_itens_segurados lfis on lfis.id_laudo_final = vlf.id_laudo_final
					inner join sinistro.laudos_finais_itens_segurados_revistoria lfisrv on lfisrv.id_laudo_final_item_segurado = lfis.id
					inner join safra12.laudos_finais_uva_granizo_itens_segurados lfugis on lfugis.id_laudo_final_item_segurado = lfis.id
				where
					av.id_proposta = $idProposta and
					vc.id_cobertura = $idCobertura and
					lfis.id_item_segurado = $idItem and
					lfis.dt_vistoria < '$dtVistoria' and
					lfisrv.fl_substitui_laudo_anterior = true
		";	
	
		return $this->_db->fetchOne($select);
	}
	
	public function getIdItemSegurado($dados) {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array("lfis"=>"sinistro.laudos_finais_itens_segurados"), "id");
		$Select->where("id_item_segurado = ?", $dados['id_item']); 
		$Select->where("id_laudo_final = ?", $dados['id_laudo_final']);
	
		return $this->_db->fetchOne($Select);

	}
	
	public function getItemSegurado($dados) {
		$ItemSegurado = array();
		
		/*
		 * Busca laudos_finais_itens_segurados
		 */
		$SelectLfItensSegurados = $this->select()->setIntegrityCheck(false);
		$SelectLfItensSegurados->from(array('lfis'=>'sinistro.laudos_finais_itens_segurados'), array('lfis.id', 'lfis.dt_vistoria', 'lfis.vl_percent_colhido', 'lfis.vl_percent_perdas'));
		$SelectLfItensSegurados->where('lfis.id_item_segurado = ?', $dados['idItem']);
		$SelectLfItensSegurados->where('lfis.id_laudo_final = ?', $dados['id_laudo_final']);
		
		$Row_LftItensSegurados = $this->fetchRow($SelectLfItensSegurados);
		
		if (!$Row_LftItensSegurados){return false;}; // Se não achou, encerra a execução.
		
		/*
		 * Busca laudos_finais_tc_geada_itens_segurados
		 */
		$SelectLftcGeadaItensSegurado = $this->select()->setIntegrityCheck(false);
		$SelectLftcGeadaItensSegurado->from(array('tcis'=>$this->_schema.'.laudos_finais_tc_geada_itens_segurados'));
		$SelectLftcGeadaItensSegurado->where('tcis.id_laudo_final_item_segurado = ?', $Row_LftItensSegurados->id);
		
		$ItemSegurado = $this->fetchRow($SelectLftcGeadaItensSegurado)->toArray();
		
		$ItemSegurado['dt_vistoria'] = $Row_LftItensSegurados->dt_vistoria;
		$ItemSegurado['vl_percent_colhido'] = $Row_LftItensSegurados->vl_percent_colhido;
		$ItemSegurado['perda_final'] = Agro_Util::formatDbCurrency($valor=$Row_LftItensSegurados->vl_percent_perdas, $precision=2, $decimal='.'); 

		/*
		 *  Preenche dados Antes Espigamento
		 */
		if ($ItemSegurado['fl_espigamento'] == 'antes'){
			/*
			 * LaudosFinaisTCGeadaItensSeguradosAntes
			 */
			$ModelName = ucwords($this->_schema) . '_Model_LaudosFinaisTCGeadaItensSeguradosAntes';
			$LfTCGeadaItensSeguradosAntes = new $ModelName;
			$Rs = $LfTCGeadaItensSeguradosAntes->getItemById($Row_LftItensSegurados->id);
			
			$ItemSegurado =(is_array($Rs) ? array_merge($ItemSegurado, $Rs) : $ItemSegurado);
			
			/*
			 * LaudosFinaisTCGeadaItensSeguradosAntesAmostra
			 */
			$ModelName = ucwords($this->_schema) . '_Model_LaudosFinaisTCGeadaItensSeguradosAntesAmostra';
			$LfTCGeadaItensSeguradosAntesAmostras = new $ModelName;
			$Rs = $LfTCGeadaItensSeguradosAntesAmostras->getAmostras($Row_LftItensSegurados->id);
			
			$ItemSegurado['amostras'] = (is_array($Rs) ? $Rs : null);
		
		/*
		* Preenche dados Após Espigamento
		*/		
		} else {
			/*
			 * LaudosFinaisTCGeadaItensSeguradosApos
			 */
			$ModelName = ucwords($this->_schema) . '_Model_LaudosFinaisTCGeadaItensSeguradosApos';
			$LfTCGeadaItensSeguradosApos = new $ModelName;
			$Rs = $LfTCGeadaItensSeguradosApos->getItemById($Row_LftItensSegurados->id);
			
			$ItemSegurado = ($Rs ? array_merge($ItemSegurado, $Rs) : $ItemSegurado);
			
			/*
			 * LaudosFinaisTCGeadaItensSeguradosAposEd
			 */
			$ModelName = ucwords($this->_schema) . '_Model_LaudosFinaisTCGeadaItensSeguradosAposEd';
			$LfTCGeadaItensSeguradosAposEd = new $ModelName;
			$Rs = $LfTCGeadaItensSeguradosAposEd->getItemById($Row_LftItensSegurados->id);
			
			$Rs['vl_percent_perda_ed'] = $Rs['vl_percent_perda'];
			unset($Rs['vl_percent_perda']); 
			
			$Rs['vl_soma_percentuais_ed'] = $Rs['vl_soma_percentuais'];
			unset($Rs['vl_soma_percentuais']); 
			
			$ItemSegurado['vl_percent_capacidade_produtiva_restante_ed'] = $Rs['vl_percent_capacidade_produtiva_restante'];
			
			$ItemSegurado = ($Rs ? array_merge($ItemSegurado, $Rs) : $ItemSegurado);
			
			/*
			 * LaudosFinaisTCGeadaItensSeguradosAposPq
			 */
			$ModelName = ucwords($this->_schema) . '_Model_LaudosFinaisTCGeadaItensSeguradosAposPq';
			$LfTCGeadaItensSeguradosAposPq = new $ModelName;
			$Rs = $LfTCGeadaItensSeguradosAposPq->getItemById($Row_LftItensSegurados->id);
			
			$Rs['vl_percent_perda_pq'] = $Rs['vl_percent_perda'];
			unset($Rs['vl_percent_perda']);
			
			$Rs['vl_soma_percentuais_pq'] = $Rs['vl_soma_percentuais'];
			unset($Rs['vl_soma_percentuais']); 
			
			$ItemSegurado = ($Rs ? array_merge($ItemSegurado, $Rs) : $ItemSegurado);
			
			/*
			 * Lembrar disto, talvez precise
			 * 
				$arr = $Rs;
				$arr['vl_percent_capacidade_produtiva_restante_pq'] = $arr['vl_percent_capacidade_produtiva_restante'];
				$arr['vl_percent_perda_pq'] = $arr['vl_percent_perda'];
				unset($arr['vl_percent_perda']);
				unset($arr['vl_percent_capacidade_produtiva_restante']);
				$ret = array_merge($ret, $arr);
			*/
			
			/*
			 * LaudosFinaisTCGeadaItensSeguradosAposEdAmostra
			 */
			$ModelName = ucwords($this->_schema) . '_Model_LaudosFinaisTCGeadaItensSeguradosAposEdAmostra';
			$LfTCGeadaItensSeguradosAposEdAmostra = new $ModelName;
			$Rs = $LfTCGeadaItensSeguradosAposEdAmostra->getAmostras($Row_LftItensSegurados->id);
			$ItemSegurado['amostras_ed'] = $Rs;
			
			/*
			 * LaudosFinaisTCGeadaItensSeguradosAposPqAmostra
			 */
			$ModelName = ucwords($this->_schema) . '_Model_LaudosFinaisTCGeadaItensSeguradosAposPqAmostra';
			$LfTCGeadaItensSeguradosAposPqAmostra = new $ModelName;
			$Rs = $LfTCGeadaItensSeguradosAposPqAmostra->getAmostras($Row_LftItensSegurados->id);
			$ItemSegurado['amostras_pq'] = $Rs;	
			
			$perda_real_ed = (($ItemSegurado['vl_soma_percentuais_ed'] != 0) ? $ItemSegurado['vl_percent_perda_total'] : 0); 
			$perda_real_pq = (($ItemSegurado['vl_percent_perda_pq'] !=0 ? (($ItemSegurado['vl_percent_capacidade_produtiva_restante_ed'] * $ItemSegurado['vl_percent_perda_pq'])/100): 0));
			
			$ItemSegurado['perda_real_ed'] = Agro_Util::formatDbCurrency($valor=$perda_real_ed, $precision=2, $decimal='.'); 
			$ItemSegurado['perda_real_pq'] = Agro_Util::formatDbCurrency($valor=$perda_real_pq, $precision=2, $decimal='.'); 
			
			
		}
		/*
		 * Demais informações
		 */
		$ItemSegurado['id'] = $Row_LftItensSegurados->id;
		
		/*
		 * Busca informaçoes fo laudo
		 */
		$SelectLaudo = $this->select()->setIntegrityCheck(false);
		$SelectLaudo->from(array('l' => 'sinistro.laudos_finais'), array('ds_observacao', 'fl_assinatura_regulador', 'fl_assinatura_segurado', 'fl_evento_nao_constatado'));
		$SelectLaudo->where("id = ?", $dados['id_laudo_final']);
		
		$Row = $this->fetchRow($SelectLaudo);
		
		$ItemSegurado = ($Row ? array_merge($ItemSegurado, $Row->toArray()) : $ItemSegurado);
		
		
		return $ItemSegurado;
		
	}
}