<?php

class Sinistro2_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 Sinistro2_Model_CobrancaRelatorioStatus();
		$ModelCobrancaRelatorioStatus->save($data);

		$ModelCobrancaRelatorioVistorias = new Sinistro2_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();
        $perito = '';
		
		$select = $this->select();

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

		if (($User->tp_usuario == 'V') || ($User->tp_usuario == 'M')){
			$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)) {
                    if ($clause['field'] === 'id_perito') {
                        $perito = $clause['value'];
                        continue;
                    }

					$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 (!empty($perito)) {
            $group = [
                  'v_laudos_cobranca_preliminar_final.id_cobertura'
                , 'v_laudos_cobranca_preliminar_final.id_processo'
                , 'v_laudos_cobranca_preliminar_final.id_proposta_mae'
                , 'v_laudos_cobranca_preliminar_final.ds_nome_proponente'
                , 'v_laudos_cobranca_preliminar_final.ds_nome_municipio'
                , 'v_laudos_cobranca_preliminar_final.ds_sigla'
                , 'v_laudos_cobranca_preliminar_final.ds_nome_fantasia'
                , 'v_laudos_cobranca_preliminar_final.id_empresa'
                , 'v_laudos_cobranca_preliminar_final.id_vistoria'
                , 'v_laudos_cobranca_preliminar_final.ds_nome_cultura'
                , 'v_laudos_cobranca_preliminar_final.itens'
                , 'v_laudos_cobranca_preliminar_final.variedade'
                , 'v_laudos_cobranca_preliminar_final.vl_area_vistoriada'
                , 'v_laudos_cobranca_preliminar_final.tp_vistoria'
                , 'v_laudos_cobranca_preliminar_final.id_tipo_produto'
                , 'v_laudos_cobranca_preliminar_final.id_cultura'
                , 'v_laudos_cobranca_preliminar_final.id_proposta'
                , 'v_laudos_cobranca_preliminar_final.id_estado'
                , 'v_laudos_cobranca_preliminar_final.id_processo_seguradora'
                , 'v_laudos_cobranca_preliminar_final.dt_vistoria'
                , 'v_laudos_cobranca_preliminar_final.municipio_perito'
                , 'v_laudos_cobranca_preliminar_final.perito'
                , 'v_laudos_cobranca_preliminar_final.auxiliar'
                , 'v_laudos_cobranca_preliminar_final.evento_nao_constatado'
                , 'v_laudos_cobranca_preliminar_final.id_produto'
                , 'v_laudos_cobranca_preliminar_final.id_seguradora'
                , 'v_laudos_cobranca_preliminar_final.id_produto_geral'
                , 'v_laudos_cobranca_preliminar_final.cpf_cnpj_empresa'
                , 'v_laudos_cobranca_preliminar_final.nr_apolice'
                , 'v_laudos_cobranca_preliminar_final.ds_nome_municipio_empresa'
                , 'v_laudos_cobranca_preliminar_final.ds_sigla_uf_empresa'
                , 'v_laudos_cobranca_preliminar_final.id_municipio'
                , 'v_laudos_cobranca_preliminar_final.id_perito'
                , 'v_laudos_cobranca_preliminar_final.data_criacao_proposta'
            ];
            $select->group(implode(', ', $group));
            $select->having("ARRAY_AGG(v_laudos_cobranca_preliminar_final.id_perito) && ARRAY ['{$perito}'::varchar]");
        }

		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' || $User->tp_usuario == 'M'){
			$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 ASC', '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(Zend_Db_Select $selectVistorias) {
		$select = $this->select()
			->setIntegrityCheck(false)
			->from(['dados_laudos' => $selectVistorias])
			->join(array('cob'=>'produto.coberturas'),'cob.id = dados_laudos.id_cobertura','ds_chave_cobertura')
			->joinLeft(array('va' => 'sinistro.vistorias_avisos'), 'va.id_vistoria = dados_laudos.id_vistoria', ['id_aviso'])
			->joinLeft(array('ae' => 'sinistro.avisos_eventos'), 'ae.id_aviso = va.id_aviso', 'ae.id_evento')
			->order(array('dados_laudos.id_proposta desc', 'perito', 'id_vistoria DESC'));

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

	public function getAreaTotalVistoriada($idProposta,$itens=''){
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('iss'=>'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, $tipoProduto = null)
    {
		$tiposProdutos = [Produto_Model_Tipos::GRAOS, Produto_Model_Tipos::MULTIRRISCO];
		$coberturasMultirrisco = [
		  Produto_Model_Coberturas::COB_MULTIRISCO_CHAVE,
          Produto_Model_Coberturas::COB_MULTIRISCO_II_CHAVE,
          Produto_Model_Coberturas::COB_MULTIRRISCO_RAIO_VARIACAO_EXT_TEMP_CHAVE
        ];
		$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 == Produto_Model_Coberturas::COB_GRANIZO_CHAVE) {
			$select->where('cgv.ds_chave = ?', 'MACA_COB_PRINCIPAL');
		} elseif(Agro_Util::validaDataInicioFim('01/08/2021', $dtVistoria)) {
            if (in_array($chaveCobertura, $coberturasMultirrisco) && in_array($tipoProduto, $tiposProdutos)) {
                $select->where("cgv.ds_chave ilike '%MULTIRRISCO%'");
            } elseif (!in_array($chaveCobertura, $coberturasMultirrisco) && in_array($tipoProduto, $tiposProdutos)) {
                $select->where('cgvc.id_cultura = ?', $idCultura);
                $select->where("cgv.ds_chave not ilike '%MULTIRRISCO%'");
            } else {
                $select->where('cgvc.id_cultura = ?', $idCultura);
            }
        } 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{
		    $this->checaPagamentoVistoriaPreliminarIntervalo($dados);
		    
			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','vl_total_maximo'));
			$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']);

			$Row = $this->_db->fetchRow($select);
			
			if (!is_null($this->checaPagamentoVistoriaPreliminarIntervalo($dados))) {
		        $Row['vl_custo_vistoria'] = '0.00';
			}
			
			return $Row;
		}catch (Exception $e){
			$erro = "<strong>Indisponível</strong>";
			return $erro;
		}
	}
	
	// Verifica se não existe uma vistoria preliminar no interval de até 4 dias
	// Para mesma proposta, mesma cobertura, mesmo evento
	private function checaPagamentoVistoriaPreliminarIntervalo($dados) {
	    try {
	        
	        if ($dados['idTipoVistoria'] == 2 && !empty($dados['id_evento'])) {
    	        $sql = "SELECT pc.id_proposta, v.id, v.id_tipo, vc.id_cobertura, ae.id_evento, lf.dt_vistoria
            	        FROM sistema.vistorias v
            	        JOIN sistema.vistorias_coberturas vc
            	        ON v.id = vc.id_vistoria
            	        JOIN sinistro.vistorias_processos vp
            	        ON vp.id_vistoria = v.id
            	        JOIN sinistro.processos pc
            	        ON pc.id = vp.id_processo
            	        JOIN sinistro.vistorias_avisos va
            	        ON va.id_vistoria = v.id
            	        JOIN sinistro.avisos_eventos ae
            	        ON ae.id_aviso = va.id_aviso
            	        JOIN sistema.vistorias_laudos_finais vlf
            	        ON vlf.id_vistoria = v.id
            	        JOIN sinistro.laudos_finais lf
            	        ON lf.id_processo = pc.id
            	        AND lf.id_cobertura = vc.id_cobertura
            	        AND lf.id = vlf.id_laudo_final
            	        WHERE v.id <> ".$dados['id_vistoria']."
                        AND v.id_tipo = 3
                        AND vc.id_cobertura = ".$dados['id_cobertura']."
                        AND seguro.id_proposta_mae(pc.id_proposta) = ".$dados['id_proposta_mae']."
                        AND ae.id_evento = ".$dados['id_evento']."
            	        AND lf.dt_vistoria IS NOT NULL
                        AND (date_part('day', lf.dt_vistoria::timestamp - '".$dados['dt_vistoria']."'::timestamp) <= 4 AND date_part('day', lf.dt_vistoria::timestamp - '".$dados['dt_vistoria']."'::timestamp) >= 0)";
    	        
    	        $Row = $this->_db->fetchRow($sql);
    	        
    	        return $Row['id_proposta'];
	        } else {
	            return null;
	        }
	        
	    } catch (Exception $e) {
	        return $e->getMessage();
	    }
	}

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

		$subqueryComprovantes = $this->select()
			->setIntegrityCheck(false)
			->from(['scrv' => 'sinistro.cobranca_relatorio_vistorias'], 'scrv.id_cobranca_relatorio')
			->join(
				['svd' => 'sinistro.vistoriador_despesa'],
				'svd.id_vistoria = scrv.id_vistoria',
				'max(svd.id) as id_vistoriador_despesa'
			)
			->join(
				['svda' => 'sinistro.vistoriador_despesa_arquivo'],
				'svd.id = svda.id_vistoriador_despesa',
				false
			)
			->group('scrv.id_cobranca_relatorio');

		$subqueryJustificativaKm = $this->select()
			->setIntegrityCheck(false)
			->from(['scrv' => 'sinistro.cobranca_relatorio_vistorias'], 'scrv.id_cobranca_relatorio')
			->join(
				['svd' => 'sinistro.vistoriador_despesa'],
				'svd.id_vistoria = scrv.id_vistoria',
				'max(svd.id) as id_vistoriador_despesa'
			)
			->join(['sptd' => 'sinistro.parametro_tipo_despesa'], 'sptd.id = svd.id_parametro_tipo_despesa', false)
			->join(['stp' => 'sinistro.tipo_despesa'], 'stp.id = sptd.id_tipo_despesa', false)
			->where('stp.id = ?', Sinistro2_Model_TipoDespesa::TIPO_DESPESA_KM)
			->where("ds_justificativa <> '' AND ds_justificativa IS NOT NULL")
			->group('scrv.id_cobranca_relatorio');

		$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->joinLeft(array('subq' => $subqueryComprovantes), 'subq.id_cobranca_relatorio = cr.id', '(CASE WHEN subq.id_vistoriador_despesa IS NOT NULL THEN 1 ELSE 0 END) as possui_comprovantes_despesas');
		$select->joinLeft(array('subqkm' => $subqueryJustificativaKm), 'subqkm.id_cobranca_relatorio = cr.id', '(CASE WHEN subqkm.id_vistoriador_despesa IS NOT NULL THEN 1 ELSE 0 END) as possui_justificativas_km');
		$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", 'id as id_empresa');
		$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 > 16",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','e.id', 'subq.id_vistoriador_despesa', 'subqkm.id_vistoriador_despesa'));
		$select->where("crs.fl_ativo = true");
		$select->where("cr.tp_relatorio = 'F'");

		$select->joinLeft(array('svd'=>'sinistro.vistoriador_despesa'),'svd.id_vistoria = crv.id_vistoria',false);

		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 DESC');

		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(?int $idRelatorio)
    {
	    $idEmpresa = $this->getEmpresaRelatorio($idRelatorio);
	    
		$select = $this->select()->setIntegrityCheck(false)->distinct();

		$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",
							 "to_char(v_laudos_cobranca_preliminar_final.dt_vistoria, 'dd/mm/yyyy') as dt_laudo_order",
							 "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","v_laudos_cobranca_preliminar_final.auxiliar"));
		$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->order(array('id_proposta desc', 'perito'));

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

	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'=>'sistema.vistorias_empresas'),'vp.id_vistoria = crs.id_vistoria', 'id_empresa');
		$select->where("crs.id_cobranca_relatorio = ?", $idRelatorio);

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

	
	public function deleteRelatorio($idRelatorio){
		try{
			$vistorias = (new Sinistro2_Model_CobrancaRelatorioVistorias())->getByIdCobrancaRelatorio($idRelatorio);
			// Remove vínculos com despesas
			if (!empty($vistorias)) {
				$idsVistorias = array_column($vistorias, 'id_vistoria');
				$this->_db->query('update sinistro.vistoriador_despesa set id_vistoria = null where id_vistoria IN ('. implode(', ', $idsVistorias) .')');
			}

			$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 existeTalhaoDispensado($id_vistoria){
		try {
			$select = $this->select()->setIntegrityCheck(false);
			$select->from(array('lfis' => 'sinistro.laudos_finais_itens_segurados'), 'count(*) as nro_itens');
			$select->join(array('lf' => 'sinistro.laudos_finais'), 'lfis.id_laudo_final = lf.id', false);
			$select->join(array('vp' => 'sinistro.vistorias_processos'), 'lf.id_processo = vp.id_processo', false);
			$select->where('lfis.id_motivo_quadra_nao_vistoriada = 2');
			$select->where('vp.id_vistoria = ?', $id_vistoria);
			
			return $this->_db->fetchOne($select);
		} catch (Exception $e) {
			return false;
		}
	}
	
	
}