<?
/*
 * Liquidação Frutas 1 ( Caroço )
 */
class Safra12_Model_LIQ06 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;

	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(); 
		
	}
	
	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_prejuizo_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"]);

			foreach ($LAUDOS as $laudo){

				if($laudo['id_laudo_final_item_segurado']){

					if ($laudo["vl_percent_colhido"] > 0){
						$is_remanecente = ($is_remanecente - ( $is_remanecente * ( $laudo["vl_percent_colhido"] / 100 ) ) );
					}
				
					$prejuizo_laudo = ( $is_remanecente * ( $laudo["percentual_dano"] / 100 ) );
				
					$vl_prejuizo_total +=  $prejuizo_laudo;
			
					$is_remanecente = ($is_remanecente - ( $is_remanecente * ( $laudo["percentual_dano"] / 100) ) );
				
					$this->_ModelLiquidacoesItensSeguradosCoberturasLf->save(
						array(
							"id_liquidacoes_itens_segurados_coberturas" => $LiqISCob->id,
							"id_laudo_final_item_segurado" => $laudo['id_laudo_final_item_segurado'],
							"vl_prejuizo" => round( $prejuizo_laudo , 2)  
						)
					);
				}								
			}

			$LiqISCob->vl_franquia = round( ( ( $ItemSegurado->vl_lmga * $vl_percent_franquia ) / 100) ,2);
			
			$LiqISCob->vl_prejuizo_total = $vl_prejuizo_total;
			
			$LiqISCob->vl_indenizacao = ($LiqISCob->vl_prejuizo_total - $LiqISCob->vl_franquia > 0 ? $LiqISCob->vl_prejuizo_total - $LiqISCob->vl_franquia : 0);
			
			$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;
		
	}
}