<?php

class Sinistro2_Model_CobrancaPrevia extends Agro_Db_Table_Abstract {
	protected $_schema = 'sinistro';
	protected $_name = 'cobranca_relatorio';
	protected $_view = 'v_laudos_cobranca_previa';
	protected $_primary = 'id';
	//protected $_limit = 20;

	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 = 'P';

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

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

		$ModelCobrancaRelatorioVistorias = new Sinistro2_Model_CobrancaRelatorioVistorias();

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

		return $idCobrancaRelatorio;
	}


	public function getData($where = false){

		$User = Zend_Auth::getInstance()->getIdentity();
		$empresas = new Sistema_Model_Empresas();
		$empresa = $empresas->getIdEmpresaUsuarioCorrente();

		$select = $this->select()->setIntegrityCheck(false);

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

		if ($User->tp_usuario == 'V' || $User->tp_usuario == 'M'){
			$select->where($this->_view.'.id_empresa = '.$empresa);
		}

		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->_order) {
			$select->order($this->_order);
		}
		if ($this->_limit) {
			$select->limit($this->_limit);
		}

		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_previa.id_vistoria NOT IN (select id_vistoria from sinistro.cobranca_relatorio_vistorias)');

		}

		if ($User->tp_usuario == 'V' || $User->tp_usuario == 'M'){
			$select->where($this->_view.'.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);
		}

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

		}

		return $select;
	}

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

		$select->from("{$this->_schema}.{$this->_view}");
    	$select->join(array('cob'=>'produto.coberturas'),'cob.id = v_laudos_cobranca_previa.id_cobertura','ds_chave_cobertura');
		$select->where('v_laudos_cobranca_previa.id_vistoria = ?', $idLaudo);
		$select->order('v_laudos_cobranca_previa.dt_laudo_order desc');

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

    	return $dados;
	}

	public function getAreaTotalVistoriada($idVistoria, $schema){

		$select = "select
                        sum(lvpis.vl_area_vistoriada)
                    from
                        {$schema}.lvp001_itens_segurados lvpis,
                        {$schema}.lvp001 lvp,
                        seguro.propostas_vistorias_previas pvp
                    where
                        lvpis.id_laudo_previa = lvp.id and
                        lvp.id_proposta_vistoria = pvp.id and
                        pvp.id_vistoria = $idVistoria
				";

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

	}

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

		$select->from(array('cgv'=>'sinistro.cobranca_grupos_vistoria'),array('cgv.id','cgv.ds_nome_grupo_vistoria'));
		$select->join(array('cgvc'=>'sinistro.cobranca_grupos_vistoria_culturas'),'cgv.id = cgvc.id_grupo_vistoria', false);
		$select->where('cgvc.id_cultura = ?', $idCultura);
		$select->where('cgv.id_seguradora = ?', 6);
		if($dtVistoria){
			$select->where("to_date(?, 'DD-MM-YYYY') between dt_inicio_grupo and dt_expira_grupo", $dtVistoria);
		}

		$result = $this->fetchRow($select);
		if($result){
			return $result->toArray();
		}
	}

	public function getGrupoVistoriaEspecial($dtVistoria){
		$select = $this->select()->setIntegrityCheck(false);

		$select->from(array('cgv'=>'sinistro.cobranca_grupos_vistoria'),array('cgv.id','cgv.ds_nome_grupo_vistoria'));
		$select->join(array('cgvc'=>'sinistro.cobranca_grupos_vistoria_culturas'),'cgv.id = cgvc.id_grupo_vistoria', false);
		$select->where('cgv.ds_chave = ?', 'MACA_COB_PRINCIPAL');
		$select->where('cgv.id_seguradora = ?', 6);
		$select->where("to_date(?, 'DD-MM-YYYY') between dt_inicio_grupo and dt_expira_grupo", $dtVistoria);

		$result = $this->fetchRow($select);
		if($result){
			return $result->toArray();
		}
	}

	public function getTipoVistoria($dsTipoVistoria){
		if($dsTipoVistoria == 'Previa' || $dsTipoVistoria == ''){ $dsTipoVistoria = 'Prévia';}

		$select = $this->select()->setIntegrityCheck(false);

		$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['idGrupoVistoria'])){
				$dados['idGrupoVistoria'] = $dados['idGrupoVistoria']['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){
		$select = $this->select()->setIntegrityCheck(false);

		$select->from(array('cgv'=>'sinistro.cobranca_grupos_vistoria'),'cgv.vl_custo_quilometragem');
		$select->where('cgv.id = ?', $idGrupoVistoria['id']);

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

	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'=>'seguro.propostas_vistorias_previas'),"pvp.id_vistoria = crv.id_vistoria",false);
		$select->join(array('pr'=>'seguro.propostas'),"pr.id = pvp.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 = 'P'");

		if ($User->tp_usuario == 'V' || $User->tp_usuario == 'M'){
			$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"));

		$select->join("{$this->_schema}.{$this->_view}","{$this->_view}.id_vistoria = crv.id_vistoria",array("v_laudos_cobranca_previa.id_cobertura",
							 "v_laudos_cobranca_previa.id_cultura","v_laudos_cobranca_previa.id_empresa",
							 "v_laudos_cobranca_previa.id_estado","v_laudos_cobranca_previa.ds_nome_cultura",
							 "v_laudos_cobranca_previa.ds_nome_fantasia","v_laudos_cobranca_previa.ds_nome_municipio","v_laudos_cobranca_previa.ds_nome_proponente",
							 "v_laudos_cobranca_previa.ds_sigla","v_laudos_cobranca_previa.id_proposta","v_laudos_cobranca_previa.id_tipo_produto", "v_laudos_cobranca_previa.dt_laudo_order",
							 "v_laudos_cobranca_previa.id_tipo_produto","v_laudos_cobranca_previa.id_vistoria","v_laudos_cobranca_previa.perito","v_laudos_cobranca_previa.dt_vistoria","v_laudos_cobranca_previa.ds_safra" ));
		$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_previa.id_empresa = ?", $idEmpresa);
		}

		$select->order("v_laudos_cobranca_previa.dt_laudo_order desc");

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

		foreach($dados as $key => $value){
			$dados[$key]['tp_vistoria'] = "Prévia";
		}

    	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 getItensVariedade($idVistoria,$schema){

		$select = $this->select()->setIntegrityCheck(false)->distinct(true);
		$select->from(array("lvpis"=>"{$schema}.lvp001_itens_segurados"),null);
		$select->join(array("lvp"=>"{$schema}.lvp001"),"lvpis.id_laudo_previa = lvp.id",false);
		$select->join(array("pvp"=>"seguro.propostas_vistorias_previas"),'lvp.id_proposta_vistoria = pvp.id',false);
		$select->join(array("v"=>"produto.variedades"),'v.id = lvpis.id_variedade',('ds_nome_variedade'));
		$select->where("pvp.id_vistoria = ?", $idVistoria);

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

		foreach($dados as $key => $value){
			$dsVariedaes .= $value[ds_nome_variedade].", ";
		}

		unset($select);

		$select = $this->select()->setIntegrityCheck(false)->distinct(true);
		$select->from(array("lvpis"=>"{$schema}.lvp001_itens_segurados"),('nr_quadra'));
		$select->join(array("lvp"=>"{$schema}.lvp001"),"lvpis.id_laudo_previa = lvp.id",false);
		$select->join(array("pvp"=>"seguro.propostas_vistorias_previas"),'lvp.id_proposta_vistoria = pvp.id',false);
		$select->where("pvp.id_vistoria = ?", $idVistoria);

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

		foreach($dados as $key => $value){
			$dsItens .= trim($value[nr_quadra]).", ";
		}

       	return array('variedade' => substr($dsVariedaes,0,-2), 'itens' => substr($dsItens,0,-2));

	}

	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;
		}
	}

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

		$select->from(array('v'=>'sinistro.v_laudos_cobranca_previa'),array('dt_vistoria','id_vistoria_previa_laudo'));
		$select->where("id_vistoria = ?", $idVistoria);

		return $this->_db->fetchAll($select);

	}

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

		$select->from(array('crs'=>'sinistro.cobranca_relatorio_vistorias'),false);
		$select->join(array('vp'=>'sistema.vistorias_empresas'),'vp.id_vistoria = crs.id_vistoria','id_empresa');
		$select->where("crs.id_cobranca_relatorio = ?", $idRelatorio);
		$select->where("vp.fl_ativo = true");

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

	public function getIdVistoriaPreviaLaudo($id){
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('crv'=>'sinistro.cobranca_relatorio_vistorias'),'id_laudo');
		$select->where("id = ?", $id);

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

	}


}