<?
/**
 * @name SafraX_Model_LIQ11
 * @desc Liquidação Trigo, Cevada e Milho S2
 * @author Vinicius Marconi V. Berni
 * @since 17/08/2011
 */
class Safra13_Model_LIQ11 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 $_ModelLfIS;
	
	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->_ModelLfIS = new Sinistro_Model_LaudosFinaisItensSegurados();
	}
	
	public function liquidar($dados){
		$result = array("status"=>true, "message"=>"", "execute"=>"");
		
		if (count($dados["laudos"]) > 1){
			$result["status"] = false;
			$result["message"] = "Esta liquidação contempla casos que possuam somente 1 laudo, para os demais liquidar manualmente.";
			
		} elseif ($dados["laudos"][0]["ds_chave_cobertura"] != "COB_GEADA"){
			$result["status"] = false;
			$result["message"] = "Esta liquidação contempla casos de GEADA, demais coberturas devem ser liquidadas manualmente.";
						
		} else {
			$LFIS 			= $this->_ModelLfIS->getByID($dados["laudos"][0]['id_laudo_final_item_segurado']);
			$Liquidacao 	= $this->_ModelLiquidacoes->find($dados["id_liquidacao"])->current();
			$ItemSegurado 	= $this->_ModelItemSegurado->find($dados['id_item_segurado'])->current();
			$IsComplemento 	= $ItemSegurado->complemento();
			
			$this->getAdapter()->beginTransaction();
			
			try {
				
				$percent_area_afetada = (($LFIS->vl_area_sinistrada * 100) / $ItemSegurado->vl_area); 
				
				/*
				 * LMGA da área atingida no evento 
				 * Area Atingida X LMGA
				 */
				$is_sinistrada = (($percent_area_afetada *  $ItemSegurado->vl_lmga) / 100);
				
				/*
				 * Franquia 
				 */
				$vl_percent_franquia = $this->_ModelPropostaCoberturas->getFranquiaByPropostaCobertura($dados['id_proposta'], $dados["id_cobertura"]);
				$vl_franquia = ($is_sinistrada * $vl_percent_franquia)/100;
				
				/*
				 * Prejuizo
				 * LMGA da área sinistrada X % de dano do laudo
				 */
				$vl_prejuizo = Agro_Util::round(($dados["laudos"][0]["percentual_dano"] * $is_sinistrada) /100, 2);
				
				/*
				 * Indenização
				 * Prejuizo - Franquia
				 */
				$vl_indenizacao =  Agro_Util::round($vl_prejuizo - $vl_franquia, 2);
				
				$LiqISCob =  $this->_ModelLiquidacoesItensSeguradosCoberturas->save(
					array(
						"id_usuario_criacao"	 => $Liq->id_usuario_criacao,
						"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" 			 => $vl_franquia,
						"vl_indenizacao" 		 => $vl_indenizacao,
						"vl_prejuizo_total" 	 => $vl_prejuizo,
						"vl_percent_indenizacao" => $percent_area_afetada
					)
				);
	
				$this->_ModelLiquidacoesItensSeguradosCoberturasLf->save(
					array(
						"id_usuario_criacao"	=> $Liq->id_usuario_criacao,
						"id_liquidacoes_itens_segurados_coberturas" => $LiqISCob->id,
						"id_laudo_final_item_segurado" => $dados["laudos"][0]['id_laudo_final_item_segurado'],
						"vl_prejuizo" => $vl_prejuizo 
					)
				);
				
				
				
				$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;		
	}
}