<?
/**
 * @name Regulacao_Model_LIQ17
 * @author Tonismar R Bernardo
 * @since 23/01/2018
 */
class Regulacao_Model_LIQ17 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 Sinistro2_Model_Liquidacoes(); 
		$this->_ModelLiquidacoesItensSeguradosCoberturas = new Sinistro2_Model_LiquidacoesItensSeguradosCoberturas();
		$this->_ModelLiquidacoesItensSeguradosCoberturasLf = new Sinistro2_Model_LiquidacoesItensSeguradosCoberturasLF();
		
		$this->_ModelPropostaCoberturas = new Seguro_Model_PropostasCoberturas();
		$this->_ModelItemSegurado = new Seguro_Model_ItensSegurados();

		$this->_ModelLfIS = new Sinistro2_Model_LaudosFinaisItensSegurados();
    }
    
    public function liquidar($dados) {
		$result = array("status"=>true, "message"=>"", "execute"=>"");
		
		$Liq = $this->_ModelLiquidacoes->find($dados["id_liquidacao"])->current();
        
		if (2==1){
			$result["status"] = false;
			$result["message"] = "Esta liquidação não permite mais de um laudo. Para tal, utilize a liquidação manual";
		} else {

			try {
                
                foreach ($dados['itens'] as $k => $it) { 
                    if (is_array($it)) {
                        $this->getAdapter()->beginTransaction();
	
					    $ItemSegurado = $this->_ModelItemSegurado->find($k)->current();
					    
					    $LFIS = $this->_ModelLfIS->getByID($dados["itens"][$ItemSegurado->id]['id_laudo_final_item_segurado']);
					    
					    $vl_percent_franquia = $this->_ModelPropostaCoberturas->getFranquiaByPropostaCobertura($dados['id_proposta'], $dados['id_cobertura']);

					    $vl_franquia = ($ItemSegurado->vl_lmga * $vl_percent_franquia)/100;

					    $LiqISCob = $this->_ModelLiquidacoesItensSeguradosCoberturas->save(
					    	array(
					    		'id_usuario_criacao'     => $Liq->id_usuario_criacao,
					    		'id_liquidacao'          => $dados['id_liquidacao'],
					    		'id_item_segurado'       => $k,
					    		'id_cobertura'           => $dados['id_cobertura'],
					    		'vl_percent_franquia'    => $vl_percent_franquia,
					    		'vl_franquia'            => $vl_franquia,
					    		'vl_indenizacao'         => 0,
					    		'vl_prejuizo_total'      => 0,
					    		'vl_percent_indenizacao' => 0
					    	)
					    );

					    $this->_ModelLiquidacoesItensSeguradosCoberturasLf->save(
					    	array(
					    		'id_usuario_criacao'                        => $Liq->id_usuario_criacao,
					    		'id_liquidacoes_itens_segurados_coberturas' => $LiqISCob->id,
					    		'id_laudo_final_item_segurado'              => $dados['itens'][$ItemSegurado->id]['id_laudo_final_item_segurado'],
					    		'vl_prejuizo'                               => 0
					    	)
					    );

					    $laudo = $dados['itens'][$ItemSegurado->id];

					    if (floatval($laudo['vl_rendimento_final_lavoura']) <= 0) {
					    	$LiqISCob->vl_indenizacao = $ItemSegurado->vl_lmga;
					    	$LiqISCob->vl_percent_indenizacao = 100;
//					    } elseif (floatval($laudo['vl_rendimento_final_lavoura']) > floatval($it['vl_producao_garantida'])) {
//					    	$LiqISCob->vl_indenizacao = 0;
//					    	$LiqISCob->vl_percent_indenizacao = 0;
					    } else {
					    	$LiqISCob->vl_indenizacao = round(($ItemSegurado->vl_lmga * $dados['percentual_indenizacao'])/100, 4);
					    	$LiqISCob->vl_percent_indenizacao = round($it['percent_indenizacao'], 2);
					    }

					    $LiqISCob->save();

                        $this->getAdapter()->commit();
                    }
				}

				$result['message'] = 'Liquidação realizada com sucesso.';


			} 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;
    }
}
