<?
/*
 * Liquidação Queda de parreiral
 */
class Safra13_Model_LIQ09 extends Agro_Db_Table_Abstract {
	protected $_schema = 'sinistro';
	protected $_name = 'tipo_liquidacao';
	protected $_primary = 'id';
	public $_order = 'ds_nome_tipo_liquidacao';
	
	private $_ModelLiquidacoes;
	private $_ModelLiquidacoesItensSegurados;
	private $_ModelLiquidacoesItensSeguradosCoberturas;
	private $_ModelLiquidacoesItensSeguradosCoberturasLf;
	private $_ModelPropostaCoberturas;
	private $_ModelItemSegurado;
	private $_ModelLaudoFinalQP;
	private $_ModelLaudoFinalQPIS;
	
	public function init(){
		parent::init();
		
		$this->_ModelLiquidacoes = new Sinistro_Model_Liquidacoes(); 
		$this->_ModelLiquidacoesItensSeguradosCoberturas = new Sinistro_Model_LiquidacoesItensSeguradosCoberturas();
		$this->_ModelLiquidacoesItensSeguradosCoberturasLf = new Sinistro_Model_LiquidacoesItensSeguradosCoberturasLF();
		
		$this->_ModelPropostaCoberturas = new Seguro_Model_PropostasCoberturas();
		$this->_ModelItemSegurado = new Seguro_Model_ItensSegurados(); 
		
		$this->_ModelLaudoFinalQP = new Safra13_Model_LaudosFinaisUvaQuedaParreiral();
		$this->_ModelLaudoFinalQPIS = new Safra13_Model_LaudosFinaisUvaQuedaParreiralItensSegurados();		
	}
	
	public function liquidar(array $dados){
		$result = array("status"=>true, "message"=>"", "execute"=>"");
	
		$ItemSegurado = $this->_ModelItemSegurado->find($dados['id_item_segurado'])->current();
		
		$this->getAdapter()->beginTransaction();
		
		try {
			$vl_percent_franquia = $this->_ModelPropostaCoberturas->getFranquiaByPropostaCobertura($dados['id_proposta'], $dados["id_cobertura"]);
			
			$is_remanecente = $ItemSegurado->vl_lmga;
			
			$vl_reembolso_total = 0.0;
			
			$LiqISCob =  $this->_ModelLiquidacoesItensSeguradosCoberturas->save(
				array(
					"id_liquidacao" 		=> $dados["id_liquidacao"],
					"id_item_segurado" 		=> $dados["id_item_segurado"],
					"id_cobertura" 			=> $dados["id_cobertura"],
					"vl_percent_franquia" 	=> $vl_percent_franquia,
					"vl_franquia" 			=> 0,
					"vl_indenizacao" 		=> 0,
					"vl_prejuizo_total" 	=> 0
				)
			);
			
			//$LAUDOS = $this->ajustaLaudos($dados["laudos"]);
			$LAUDOS = $dados["laudos"];
			
			foreach ($LAUDOS as $laudo){

				$vl_reembolso_parcial = 0.0;
				
				if($laudo['id_laudo_final_item_segurado']){
					
					$ItemSpec = $this->_ModelLaudoFinalQPIS->fetchRow("id_laudo_final_item_segurado ={$laudo['id_laudo_final_item_segurado']}");
					 
					if ($ItemSpec->tp_conducao == "L"){
						
						if (($ItemSpec->vl_percent_estrutura_afetada >= 30) && ($ItemSpec->vl_deslocamento_vertical >= 50)){
							$vl_reembolso_parcial = $is_remanecente * 0.2;
							$is_remanecente = $is_remanecente * 0.8;
							
						} else {
							$vl_reembolso_parcial = 0;
						}
						
					} elseif ($ItemSpec->tp_conducao == "E"){
						$arrEspacamento = explode("x", $ItemSegurado->ds_espacamento);
						$vl_espacamento = ($arrEspacamento[1] > $arrEspacamento[0] ? $arrEspacamento[1] : $arrEspacamento[0]);
						
						$metros_lineares_hec = 10000 / $vl_espacamento;
						
						$metros_lineares = $metros_lineares_hec * $ItemSegurado->vl_area;
						
						$minimo_caido = $ItemSpec->vl_metros_lineares_caidos * 0.05;
				
						if ($ItemSpec->vl_metros_lineares_caidos >= $minimo_caido){
							$vl_reembolso_parcial = ((($ItemSpec->vl_metros_lineares_caidos / $metros_lineares) * 0.2 ) * $is_remanecente);
							
						} else {
							$vl_reembolso_parcial = 0;
						}
						
						$is_remanecente = $is_remanecente * 0.8;
						
					} else {
						die("Tipo de condução não informada no laudo.");
						//die($ItemSpec->tp_conducao);
					}
	
					$this->_ModelLiquidacoesItensSeguradosCoberturasLf->save(
						array(
							"id_liquidacoes_itens_segurados_coberturas" => $LiqISCob->id,
							"id_laudo_final_item_segurado" => $laudo['id_laudo_final_item_segurado'],
							"vl_prejuizo" => 0 
						)
					);
					
					
					
					$vl_reembolso_total += $vl_reembolso_parcial;
				}								
			}

			$LiqISCob->vl_franquia = 0;
			
			$LiqISCob->vl_prejuizo_total = 0;
			
			$LiqISCob->vl_indenizacao = round($vl_reembolso_total, 2);
			
			$LiqISCob->save();
		
			$result['message'] = "Liquidação realizada com sucesso";
			
			$this->getAdapter()->commit();
			
		} catch (Exception $e) {
			$this->getAdapter()->rollBack();
			$result['status'] = false;
			$result['message'] = "Não foi possível realizar a liquidação. \n {$e->getMessage()}";
			
		}
		
		return $result; 
	}
	
	
	/*
	 * Havendo mais de um laudo com percentual colhido 0% seleciona-se o ultimo pois 
	 * este possui o dano acumulado
	 */
	public function ajustaLaudos(array $laudos){
		$result = array();
		$result[0] = array();
		
		foreach ($laudos as $laudo){
			if ($laudo["vl_percent_colhido"] <= 0){
				$result[0] = $laudo;
				
			} else {
				$result[] = $laudo;
				
			}
		}
		
		return $result;
		
	}
	
	public function liberarReembolsoEspaldeira($espacamento, $area, $metros_caidos){
;
	}
}