<?php

class Sinistro_Model_CobrancaPreliminarFinalEssor extends Agro_Db_Table_Abstract {
	protected $_schema = 'sinistro';
	protected $_name = 'cobranca_relatorio';
	protected $_view = 'v_laudos_cobranca_preliminar_final';
	protected $_primary = 'id';
	//protected $_limit = 5;

	public function save($data) {

		$Row = $this->getRow($data['id_cobranca_relatorio']);

		$Row->nr_nota_fiscal = $data['nr_nota_fiscal'];
		$Row->vl_total_honorarios = Agro_Util::formatCurrencyDb($data['nota_honorarios']);
		$Row->vl_total_quilometragem = $data['nota_valor_km'] ? Agro_Util::formatCurrencyDb($data['nota_valor_km']) : 0;
		$Row->vl_total_despesas = $data['nota_despesas'] ? Agro_Util::formatCurrencyDb($data['nota_despesas']) : 0;
		$Row->id_status = $data['id_status'];
		$Row->tp_relatorio = 'F';

		$data['id_cobranca_relatorio'] = $Row->save();
		$idCobrancaRelatorio = $data['id_cobranca_relatorio'];

		$ModelCobrancaRelatorioStatus = new Sinistro_Model_CobrancaRelatorioStatus();
		$ModelCobrancaRelatorioStatus->save($data);

		$ModelCobrancaRelatorioVistorias = new Sinistro_Model_CobrancaRelatorioVistorias();	

		foreach($data['vistorias'] as $vistoria){
			$vistoria['id_cobranca_relatorio'] = $data['id_cobranca_relatorio'];
			try{
				$ModelCobrancaRelatorioVistorias->save($vistoria);
			}catch (Exception $e){
				die($e);
			}
		}

		return $idCobrancaRelatorio;
	}


	public function getData($where = false){
		$User = Zend_Auth::getInstance()->getIdentity();
		$empresas = new Sistema_Model_Empresas();
		$empresa = $empresas->getIdEmpresaUsuarioCorrente();

		$select = $this->select();

		if ($this->_view) {
			$select->setIntegrityCheck(false);
			$select->from("{$this->_schema}.{$this->_view}");
			$select->where('v_laudos_cobranca_preliminar_final.id_vistoria NOT IN (select id_vistoria from sinistro.cobranca_relatorio_vistorias)');
		}

		if ($User->tp_usuario == 'V'){
			$select->where('id_empresa = '.$empresa);
		} else {
			$select->where("id_empresa is not null");
		}

		if (is_array($where)) {
			foreach ($where as $clause) {
				if (is_array($clause)) {
					$field = $clause['field'];
					$operator = $clause['operator'];
					$value = $clause['value'];
					if($field == 'id_tipo_produto'){
						//ajuste para tirar as aspas simples que vem do getFilter quando utilizado o operador IN
						$select->where("$field $operator $value");
					}else{
						$select->where("$field $operator ?", $value);
					}
				} else {
					$select->where($clause, '');
				}
			}
		} elseif ($where != '') {
			$select->where($where);
		}
		if ($this->_limit) {
			$select->limit($this->_limit);
		}

		if($this->_order){
			$select->order($this->_order);	
		}else{
			$select->order(array('v_laudos_cobranca_preliminar_final.id_proposta desc', 'v_laudos_cobranca_preliminar_final.perito', 'v_laudos_cobranca_preliminar_final.id_vistoria'));
		}
		
		return $select;
	}

	public function getViewData($where = false){
		$User = Zend_Auth::getInstance()->getIdentity();
		$empresas = new Sistema_Model_Empresas();
		$empresa = $empresas->getIdEmpresaUsuarioCorrente();

		$select = $this->select();

		if ($this->_view) {
			$select->setIntegrityCheck(false);
			$select->from("{$this->_schema}.{$this->_view}");
			$select->where('v_laudos_cobranca_preliminar_final.id_vistoria NOT IN (select id_vistoria from sinistro.cobranca_relatorio_vistorias)');

		}

		if ($User->tp_usuario == 'V'){
			$select->where('v_laudos_cobranca_preliminar_final.id_empresa = '.$empresa);
		}

		if (is_array($where)) {
			foreach ($where as $clause) {
				if (is_array($clause)) {
					$field = $clause['field'];
					$operator = $clause['operator'];
					$value = $clause['value'];
					$select->where("$field $operator ?", $value);
				} else {
					$select->where($clause, '');
				}
			}
		} elseif ($where != '') {
			$select->where($where);
		}

		if($this->_order){
			$select->order($this->_order);	
		}else{
			$select->order(array('v_laudos_cobranca_preliminar_final.id_proposta desc', 'v_laudos_cobranca_preliminar_final.perito', 'v_laudos_cobranca_preliminar_final.id_vistoria'));
		}

		if ($this->_limit) {
			$select->limit($this->_limit);

		}

		return $select;
	}

	public function buscaDados($idVistoria){
		$select = $this->select()->setIntegrityCheck(false);

		$select->from("{$this->_schema}.{$this->_view}");
    	$select->join(array('cob'=>'produto.coberturas'),'cob.id = v_laudos_cobranca_preliminar_final.id_cobertura','ds_chave_cobertura');
		$select->where('v_laudos_cobranca_preliminar_final.id_vistoria = ?', $idVistoria);
		$select->order(array($this->_view.'.id_proposta desc', 'perito', 'id_vistoria DESC'));
    	$dados = $this->_db->fetchRow($select);

    	return $dados;
	}

	public function getAreaTotalVistoriada($idProposta,$itens=''){
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('is'=>'seguro.itens_segurados'),'SUM(vl_area)');
		if($itens){
			$select->where('nr_item_segurado IN ('.$itens.')');
		}
		$select->where('id_proposta = ?', $idProposta);
		$select->where('vl_lmga > ?', 0);

		return $this->_db->fetchOne($select);
	}

	public function getGrupoVistoria($idCultura, $dtVistoria=null, $chaveCobertura, $nomeCultura, $idEstado, $idSeguradora){	
		
		$select = $this->select()->setIntegrityCheck(false);

		$select->from(array('cgv'=>'sinistro.cobranca_grupos_vistoria'),array('cgv.id','cgv.ds_nome_grupo_vistoria','vl_maximo_refeicao','vl_maximo_hospedagem'));
		$select->join(array('cgvc'=>'sinistro.cobranca_grupos_vistoria_culturas'),'cgv.id = cgvc.id_grupo_vistoria', false);
		$select->join(array('cgve'=>'sinistro.cobranca_grupos_vistoria_estados'),'cgv.id = cgve.id_grupo_vistoria', false);
		
		if($nomeCultura == 'Maça' && $chaveCobertura == "COB_GRANIZO"){
			$select->where('cgv.ds_chave = ?', 'MACA_COB_PRINCIPAL');	
		}else{
			$select->where('cgvc.id_cultura = ?', $idCultura);
		}
		
		if($dtVistoria){
			$select->where("to_date(?, 'DD-MM-YYYY') between dt_inicio_grupo and dt_expira_grupo", $dtVistoria);
		}

		$select->where("cgve.id_estado = ?", $idEstado);

		//ESSOR 181
		$select->where('cgv.id_seguradora = ?', $idSeguradora);
		
		$result = $this->fetchRow($select);

		if($result){
			return $result->toArray();
		}
	}

	public function getTipoVistoria($dsTipoVistoria){
		$select = $this->select()->setIntegrityCheck(false);
		
		if($dsTipoVistoria == 'F'){
			$dsTipoVistoria == 'Final';
		}else if ($dsTipoVistoria == 'P'){
			$dsTipoVistoria == 'Prévia';
		}
		
		$select->from(array('ctv'=>'sinistro.cobranca_tipos_vistoria'),'ctv.id');
		$select->where('ctv.ds_tipo_vistoria = ?', $dsTipoVistoria);

		return $this->fetchRow($select)->id;
	}

	public function getValorVistoria($dados){
		try{
			if(is_array($dados['grupoVistoria'])){
				$dados['idGrupoVistoria'] = $dados['grupoVistoria']['id'];
			}

			$select = $this->select()->setIntegrityCheck(false);
			$select->from(array('cvv'=>'sinistro.cobranca_valores_vistoria'),array('cvv.vl_custo_vistoria','fl_multiplica_area'));
			$select->where('cvv.id_tipo_vistoria = ?', $dados['idTipoVistoria']);
			$select->where('cvv.id_grupo_vistoria = ?', $dados['idGrupoVistoria']);
			$select->where('cvv.vl_area_minima <= ?', $dados['itensAreaTotal']);
			$select->where('cvv.vl_area_maxima >= ?', $dados['itensAreaTotal']);

			return $this->_db->fetchRow($select);
		}catch (Exception $e){
			$erro = "<strong>Indisponível</strong>";
			return $erro;
		}
	}

	public function getValorKmVistoria($idGrupoVistoria){
	    if($idGrupoVistoria){
        	$select = $this->select()->setIntegrityCheck(false);
		    $select->from(array('cgv'=>'sinistro.cobranca_grupos_vistoria'),'cgv.vl_custo_quilometragem');
		    $select->where('cgv.id = ?', $idGrupoVistoria);

		    return $this->_db->fetchOne($select);
	    } else {
	        die('Grupo de Vistoria não encontrado.');
	    }
	}

	public function getRelatoriosGerados($where = false){
		$User = Zend_Auth::getInstance()->getIdentity();
		$empresas = new Sistema_Model_Empresas();
		$empresa = $empresas->getIdEmpresaUsuarioCorrente();

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('cr'=>'sinistro.cobranca_relatorio'),array('cr.id','nr_nota_fiscal','vl_total_honorarios','vl_total_despesas','vl_total_quilometragem','cr.id_status','tp_relatorio'));
		$select->join(array('s'=>'sistema.status'),'cr.id_status = s.id','ds_status');
		$select->join(array('ts'=>'sistema.tipo_status'),'ts.id = s.id_tipo_status',false);
		$select->join(array('crs'=>'sinistro.cobranca_relatorio_status'),'crs.id_cobranca_relatorio = cr.id',false);
		$select->join(array('crv'=>'sinistro.cobranca_relatorio_vistorias'),'crv.id_cobranca_relatorio = cr.id',false);
		$select->join(array('v'=>'sistema.vistorias'),'v.id = crv.id_vistoria',false);
		$select->join(array('tv'=>'sistema.tipos_vistoria'),'tv.id = v.id_tipo',false);
        $select->join(array('ve'=>'sistema.vistorias_empresas'),"ve.id_vistoria = crv.id_vistoria",false);
		$select->join(array('e'=>'sistema.empresas'),"e.id = ve.id_empresa",false);
		$select->join(array('pvp'=>'sinistro.vistorias_processos'),"pvp.id_vistoria = crv.id_vistoria",false);
		$select->join(array('pro'=>'sinistro.processos'),"pro.id = pvp.id_processo",false);
		$select->join(array('pr'=>'seguro.propostas'),"pr.id = pro.id_proposta",false);
		$select->join(array('pd'=>'produto.produtos'),"pd.id = pr.id_produto AND pd.id_safra > 13",false);
		$select->group(array('cr.id', 'cr.nr_nota_fiscal', 'cr.vl_total_honorarios', 'cr.vl_total_despesas', 'cr.vl_total_quilometragem', 'cr.id_status', 's.ds_status','tp_relatorio'));
		$select->where("crs.fl_ativo = true");
		$select->where("cr.tp_relatorio = 'F'");


		if ($User->tp_usuario == 'V'){
			$select->where('ve.id_empresa = '.$empresa);
			$select->group(array('cr.id','s.ds_status','nr_nota_fiscal','vl_total_honorarios',
								 'vl_total_despesas','vl_total_quilometragem','cr.id_status','tp_relatorio'));
		}

		$select->order('cr.id');

		if (is_array($where)) {
			foreach ($where as $clause) {
				if (is_array($clause)) {
					$field = $clause['field'];
					$operator = $clause['operator'];
					$value = $clause['value'];
					$select->where("$field $operator ?", $value);

				} else {
					$select->where($clause, '');
				}
			}
		} elseif ($where != '') {
			$select->where($where);
		}

    	$dados = $this->_db->fetchAll($select);
    	return $dados;
	}

	public function buscaDadosNotaFiscal($idRelatorio){
	    
	    $idEmpresa = $this->getEmpresaRelatorio($idRelatorio);
	    
		$select = $this->select()->setIntegrityCheck(false)->distinct(true);

		$select->from(array('cr'=>'sinistro.cobranca_relatorio'),array("cr.id","cr.id_status","cr.dt_criacao","cr.dt_alteracao","cr.id_usuario_criacao",
						  	 "cr.nr_nota_fiscal","cr.vl_total_despesas","cr.vl_total_honorarios","cr.vl_total_quilometragem"));
		$select->join(array('crv'=>'sinistro.cobranca_relatorio_vistorias'),'crv.id_cobranca_relatorio = cr.id',array("crv.dt_alteracao","crv.dt_criacao","crv.id_cobranca_relatorio","crv.id_usuario_criacao",
							 "crv.id_vistoria","crv.vl_alimentacao","crv.vl_custo_quilometragem","crv.vl_honorarios",
							 "crv.vl_hotel","crv.vl_pedagio","crv.vl_quilometragem","crv.id", "crv.vl_despesas"));
		$select->join("{$this->_schema}.{$this->_view}","{$this->_view}.id_vistoria = crv.id_vistoria",array("v_laudos_cobranca_preliminar_final.id_cobertura",
							 "v_laudos_cobranca_preliminar_final.evento_nao_constatado", "v_laudos_cobranca_preliminar_final.id_cultura","v_laudos_cobranca_preliminar_final.id_empresa",
							 "v_laudos_cobranca_preliminar_final.id_estado","v_laudos_cobranca_preliminar_final.id_processo",
							 "v_laudos_cobranca_preliminar_final.ds_nome_cultura","v_laudos_cobranca_preliminar_final.ds_nome_fantasia",
							 "v_laudos_cobranca_preliminar_final.ds_nome_municipio","v_laudos_cobranca_preliminar_final.ds_nome_proponente",
							 "v_laudos_cobranca_preliminar_final.ds_sigla","v_laudos_cobranca_preliminar_final.dt_vistoria",
							 "v_laudos_cobranca_preliminar_final.id_processo_seguradora","v_laudos_cobranca_preliminar_final.id_proposta","v_laudos_cobranca_preliminar_final.id_proposta_mae",
							 "v_laudos_cobranca_preliminar_final.id_produto","v_laudos_cobranca_preliminar_final.id_tipo_produto",
							 "v_laudos_cobranca_preliminar_final.id_vistoria","v_laudos_cobranca_preliminar_final.itens","v_laudos_cobranca_preliminar_final.vl_area_vistoriada",
							 "v_laudos_cobranca_preliminar_final.tp_vistoria","v_laudos_cobranca_preliminar_final.variedade","v_laudos_cobranca_preliminar_final.perito"));
		$select->join(array('crs'=>'sinistro.cobranca_relatorio_status'),'crs.id_cobranca_relatorio = crv.id_cobranca_relatorio',false);
		$select->where("cr.id = ?", $idRelatorio);
		
		if($idEmpresa){
		    $select->where("v_laudos_cobranca_preliminar_final.id_empresa = ?", $idEmpresa);
		}
		/*
		$select->group(array("id_processo","cr.id","cr.id_status","cr.dt_criacao","cr.dt_alteracao","cr.id_usuario_criacao",
						  	 "cr.nr_nota_fiscal","cr.vl_total_despesas","cr.vl_total_honorarios","cr.vl_total_quilometragem",
							 "crv.dt_alteracao","crv.dt_criacao","crv.id_cobranca_relatorio","crv.id_usuario_criacao",
							 "crv.id_vistoria","crv.vl_alimentacao","crv.vl_custo_quilometragem","crv.vl_honorarios",
							 "crv.vl_hotel","crv.vl_pedagio","crv.vl_quilometragem","crv.id","v_laudos_cobranca_preliminar_final.id_cobertura",
							 "v_laudos_cobranca_preliminar_final.evento_nao_constatado", "v_laudos_cobranca_preliminar_final.id_cultura","v_laudos_cobranca_preliminar_final.id_empresa",
							 "v_laudos_cobranca_preliminar_final.id_estado","v_laudos_cobranca_preliminar_final.id_processo",
							 "v_laudos_cobranca_preliminar_final.ds_nome_cultura","v_laudos_cobranca_preliminar_final.ds_nome_fantasia",
							 "v_laudos_cobranca_preliminar_final.ds_nome_municipio","v_laudos_cobranca_preliminar_final.ds_nome_proponente",
							 "v_laudos_cobranca_preliminar_final.ds_sigla","v_laudos_cobranca_preliminar_final.dt_vistoria",
							 "v_laudos_cobranca_preliminar_final.id_processo_seguradora","v_laudos_cobranca_preliminar_final.id_proposta",
							 "v_laudos_cobranca_preliminar_final.id_produto","v_laudos_cobranca_preliminar_final.id_tipo_produto",
							 "v_laudos_cobranca_preliminar_final.id_vistoria","v_laudos_cobranca_preliminar_final.itens","v_laudos_cobranca_preliminar_final.vl_area_vistoriada",
							 "v_laudos_cobranca_preliminar_final.tp_vistoria","v_laudos_cobranca_preliminar_final.variedade","v_laudos_cobranca_preliminar_final.perito", "crv.vl_despesas"));
*/

		$select->order(array('id_proposta desc', 'perito'));

		$dados = $this->_db->fetchAll($select);

    	return $dados;
	}

	public function atualizaStatusRelatorio($idRelatorio,$idStatus){
		try{
			$this->_db->query("UPDATE sinistro.cobranca_relatorio SET id_status = $idStatus
						   		WHERE id = ".$idRelatorio);
			return true;
		}catch (Exception $e){
			die($e);
		}
	}

	
	public function getDataTransmissao($idRelatorio){
		$select = $this->select()->setIntegrityCheck(false);

		$select->from(array('crs'=>'sinistro.cobranca_relatorio_status'),'crs.dt_criacao');
		$select->join(array('cr'=>'sinistro.cobranca_relatorio'),'crs.id_cobranca_relatorio = cr.id',false);
		$select->where("crs.id_cobranca_relatorio = ?", $idRelatorio);
		$select->where("crs.fl_ativo = true");

    	return $this->_db->fetchOne($select);
	}
	
	public function getEmpresaRelatorio($idRelatorio){
		$select = $this->select()->setIntegrityCheck(false);

		$select->from(array('crs'=>'sinistro.cobranca_relatorio_vistorias'),false);
		$select->join(array('vp'=>'sinistro.vistorias_processos'),'vp.id_vistoria = crs.id_vistoria',false);
		$select->join(array('po'=>'sinistro.processos'),'po.id = vp.id_processo',false);
		$select->join(array('pe'=>'sinistro.processos_empresas'),'pe.id_processo = po.id', 'id_empresa');
		$select->where("crs.id_cobranca_relatorio = ?", $idRelatorio);
		$select->where("pe.fl_ativo = true");

    	return $this->_db->fetchOne($select);
	}

	
	public function deleteRelatorio($idRelatorio){
		try{
			$this->_db->query("delete from sinistro.cobranca_relatorio_status where id_cobranca_relatorio = $idRelatorio");
			$this->_db->query("delete from sinistro.cobranca_relatorio_vistorias where id_cobranca_relatorio = $idRelatorio");
			$this->_db->query("delete from sinistro.cobranca_relatorio_arquivos where id_cobranca_relatorio = $idRelatorio");
			$this->_db->query("delete from sinistro.cobranca_relatorio where id = $idRelatorio");

			return true;

		}catch(Exception $e){
			return false;
		}
	}
	
}