<?

class Sinistro2_Model_LiquidacoesItensSeguradosCoberturas extends Agro_Db_Table_Abstract {
	protected $_schema = 'sinistro';
	protected $_name = 'liquidacoes_itens_segurados_coberturas';
	protected $_primary = array('id_liquidacao', 'id_item_segurado', 'id_cobertura');
	public $_order = 'id';
	
	public function save($dados){
		$Row = $this->find($dados['id_liquidacao'], $dados['id_item_segurado'], $dados['id_cobertura'])->current();
		
		if (!$Row) {
		    $Row = $this->createRow(array(
		      'id_liquidacao' => $dados['id_liquidacao'], 
		      'id_item_segurado' => $dados['id_item_segurado'], 
		      'id_cobertura' => $dados['id_cobertura']
		    ));
		}
		$Row->id_liquidacao = $dados["id_liquidacao"];
		$Row->id_item_segurado = $dados["id_item_segurado"];
		$Row->id_cobertura = $dados["id_cobertura"];
		$Row->vl_percent_franquia = round($dados["vl_percent_franquia"], 2);
		$Row->vl_franquia = floatval($dados["vl_franquia"]);
		$Row->vl_indenizacao = floatval($dados["vl_indenizacao"]);
		$Row->vl_prejuizo_total = floatval($dados["vl_prejuizo_total"]);
		$Row->vl_percent_indenizacao = round($dados["vl_percent_indenizacao"]);
		
		if($dados["fl_dependente"]) {
		    $Row->fl_dependente = $dados["fl_dependente"];
		}
		
		$Row->save();
		
		return $Row;
	}
	
    public function beforeDelete($idLiquidacao) {
        
        $Rows = $this->_db->fetchAll($this->getData('id_liquidacao = '.$idLiquidacao));
        
        $ModelLiquidacoesItensSeguradosCoberturasLF = new Sinistro2_Model_LiquidacoesItensSeguradosCoberturasLF();
        
        foreach ($Rows as $Row) {
            $ModelLiquidacoesItensSeguradosCoberturasLF->delete($Row['id'], "id_liquidacoes_itens_segurados_coberturas");
        }
    }
    
    public function getCoberturas($id_liquidacao){
		$ModelCoberturas = new Produto_Model_Coberturas();
		
		$coberturas = array();
		
		$Row = $this->fetchall("id_liquidacao = $id_liquidacao");
    
		if ($Row){
			foreach($Row as $liqCob){
				$cob = $ModelCoberturas->find($liqCob->id_cobertura)->current();
				
				if (!in_array($cob->ds_nome_cobertura, $coberturas)){
					$coberturas[] = $cob->ds_nome_cobertura;
				}
			}
		}
		
		return $coberturas;
    }
    
    public function getTotalIndenizacao($id_liquidacao){
    	$Select = $this->select()->setIntegrityCheck(false);
    	$Select->from($this->_schema.".".$this->_name, "sum(vl_indenizacao) as vl_indenizacao");
    	$Select->where("id_liquidacao=$id_liquidacao");
    	$Select->where("vl_indenizacao > 0"); 
    	// Solução paliativa (#1753): devido a formula de cálculo, para alguns casos, a indenização
    	//está ficando negativa. Esta cláusula desconsidera valores negativos para fazer a soma.
    	//TO-DO: verificar por que a fórmula resulta em um valor negativo.
    	return $this->_db->fetchOne($Select);
    }
}