<?php

class Sinistro_Model_AvisosSinistro extends Agro_Db_Table_Abstract {
	protected $_rowClass = 'Sinistro_Model_Row_AvisoSinistro';
	protected $_schema = 'sinistro';
	protected $_name = 'avisos';
	protected $_view = 'v_avisos';
	protected $_primary = 'id';
	public $_order = 'dt_criacao desc';

	public $_columnExcel = array(
		'id' => 'Aviso',
    	'id_proposta' => 'Proposta',
    	'nr_apolice' => 'Apólice',
    	'id_processo' => 'Processo',
    	'id_processo_seguradora' => 'Seguradora',
    	'ds_nome_proponente' => 'Segurado',
    	'dt_criacao' => 'Dt. Entrada',
    	'dt_sinistro' => 'Dt. Sinistro',
    	'ds_nome_produto' => 'Produto',
    	'ds_nome_municipio' => 'Município',
    	'ds_sigla' => 'UF',
	    'ds_status' => 'Status',
		'ds_nome_usuario' => 'Usuário'
	);

	public function loadAvisoSinistro($idAviso) {
		$data = array();
		if($idAviso) {
			$data = $this->getAvisoSinistro($idAviso);

			$AvisoEvento = new Sinistro_Model_AvisosEventos();
			$listAvisosEventos = $AvisoEvento->getAvisosEventos($idAviso);
			$data['eventos'] = $listAvisosEventos;

			$data['ds_motivo_recusa'] = $this->getAvisoRecusa($idAviso);
		}
		return $data;
	}

	public function getAvisoSinistro($idAviso) {
		$avisoFields = array('a.dt_criacao','a.id as id_aviso','a.id_proposta','a.dt_sinistro','a.ds_pessoa_contato','a.ds_telefone_contato','a.ds_observacoes','a.id_status', 'a.fl_ocorrencia_queda_parreiral', 'a.fl_ocorrencia_replantio', 'a.id_status');

		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('a'=>'sinistro.avisos'),$avisoFields);
		$select->join(array('sis'=>'sumario.itens_segurados'),'sis.id_proposta = a.id_proposta', array('vl_lmga'));
		$select->joinLeft(array('f'=>'sistema.funcionarios'),'a.id_usuario_criacao = f.id_usuario','f.ds_nome_funcionario');
		$select->joinLeft(array('e'=>'sistema.empresas'),'f.id_empresa = e.id','e.ds_nome_fantasia');
		$select->joinLeft(array('c'=>'sistema.corretores'),'c.id_usuario = a.id_usuario_criacao','c.ds_nome_fantasia as ds_nome_corretor');
		$select->joinLeft(array('pvp'=>'seguro.propostas_vistorias_previas'),'pvp.id_proposta = a.id_proposta','pvp.id as id_proposta_vistoria');
		$select->join(array('s'=>'sistema.status'),'s.id = a.id_status', array('cd_status', 'ds_status', 'ds_chave as ds_chave_status'));
		$select->joinLeft(array('ar'=>'sinistro.avisos_recusas'), 'ar.id_aviso = a.id', null);
		$select->joinLeft(array('trs'=>'atendimento.tipo_recusa_sinistro'),'trs.id = ar.id_tipo_recusa', 'ds_tipo_recusa');
		$select->where($this->getAdapter()->quoteInto('a.id = ?',$idAviso));

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

	public function getAvisoRecusa($idAviso) {
		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('sinistro.avisos_recusas'), 'ds_motivo_recusa');
		$select->where('id_aviso = ?', $idAviso);

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

	public function relacionarAvisoEvento($id, $idEvento){
		$AvisoEvento = new Sinistro_Model_AvisosEventos();
		$data = array();

		$data['id_aviso'] = $id;
		$data['id_evento'] = $idEvento;

		$AvisoEvento->insert($data);

	}

	public function getDadosEmailAviso($idAviso){

		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('a'=>'sinistro.avisos'),array('id','dt_criacao'));
		$select->join(array('pc'=>'seguro.propostas_corretores'),'pc.id_proposta = a.id_proposta',false);
		$select->join(array('c'=>'sistema.corretores'),'c.id_usuario = pc.id_usuario',array('ds_email as ds_email_corretor','ds_nome_fantasia as ds_nome_corretor'));
		$select->join(array('p'=>'seguro.propostas'),'a.id_proposta = p.id', array('nr_apolice','seguro.id_proposta_mae(p.id) as id_proposta'));
		$select->join(array('pp'=>'seguro.propostas_proponentes'),'p.id = pp.id_proposta','ds_nome_proponente');
		$select->join(array('po'=>'seguro.propostas_propriedades'),'p.id = po.id_proposta',array('id_usuario_criacao','id_usuario_alteracao','dt_criacao','dt_alteracao','fl_ativo','fl_del','ds_nome_propriedade','ds_endereco','ds_endereco_cep','id_municipio','ds_endereco_bairro','ds_coordenadas','ds_referencia_localizacao','ds_pessoa_autorizada','ds_nome_outra_pessoa','ds_telefone_outra_pessoa','ds_endereco_nro','ds_endereco_complemento','ds_cpf_outra_pessoa'));
		$select->join(array('m'=>'sistema.municipios'),'m.id = po.id_municipio', 'ds_nome_municipio');
		$select->join(array('uf'=>'sistema.estados'),'uf.id = m.id_estado', 'ds_sigla');
		$select->join(array('pd'=>'produto.produtos'),'p.id_produto = pd.id','ds_nome_produto');
		$select->joinLeft(array('pr'=>'sinistro.processos'),'p.id = pr.id_proposta','pr.id as id_processo');
		$select->joinLeft(array('pre'=>'sinistro.processos_empresas'),'pre.id_processo = pr.id and pre.fl_ativo = true',false);
		$select->joinLeft(array('e'=>'sistema.empresas'),'e.id = pre.id_empresa',array('e.ds_nome_fantasia as ds_nome_vistoriadora','e.ds_email as ds_email_vistoriadora'));
		$select->joinLeft(array('ar'=>'sinistro.avisos_recusas'),'a.id = ar.id_aviso  and ar.fl_ativo = true','ds_motivo_recusa');
		$select->join(array('ae'=>'sinistro.avisos_eventos'),'ae.id_aviso = a.id', false);
		$select->join(array('ev'=>'produto.eventos'),'ae.id_evento = ev.id ', 'ds_nome_evento');
		$select->where($this->getAdapter()->quoteInto('a.id = ?',$idAviso));

		$data = $this->fetchRow($select);
		return $data;

	}

	public function getAvisosByCobertura($idCobertura, $idProposta, $tpVistoria, $flAllAvisos = true) {
		$data = array();
		if($idCobertura && $idProposta) {
			$select = "
                select
                    a.id,
                    to_char(a.dt_sinistro, 'DD/MM/YYYY') as dt_sinistro,
                    to_char(a.dt_sinistro, 'HH24:MI') as hr_sinistro
                from
                    sinistro.avisos a,
                    sistema.status st,
                    sinistro.avisos_eventos ae,
                    produto.coberturas_eventos ce
                where
                    a.id_proposta = $idProposta and
                    st.id = a.id_status and
                    st.ds_chave = 'ACEITO' and
                    ae.id_aviso = a.id and
                    ce.id_evento = ae.id_evento and
                    ce.id_cobertura = $idCobertura";

            if (!$flAllAvisos) {
                $select .= "
                    and
                    a.id not in (
                        select
                            a.id
                        from
                            sinistro.avisos a,
                            sinistro.vistorias_avisos va,
                            sistema.vistorias v,
                            sistema.vistorias_coberturas vc,
                            sistema.tipos_vistoria tv
                        where
                            a.id_proposta = $idProposta and
                            va.id_aviso = a.id and
                            v.id = va.id_vistoria and
                            vc.id_vistoria = v.id and
                            vc.id_cobertura = $idCobertura and
                            tv.id = v.id_tipo and
                            tv.ds_chave_tipos_vistoria = '$tpVistoria'
                    )";
            }

            $select .= "
                group by
                    a.id,
                    dt_sinistro,
                    hr_sinistro
            ";

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

		return $data;
	}

	public function getAvisosByVistoriaCobertura($idProposta, $idCobertura, $idVistoria) {
		$data = array();
		if($idProposta && $idCobertura && $idVistoria){
			$select = "
				select
					av.id,
                    to_char(av.dt_sinistro, 'DD/MM/YYYY') as dt_sinistro,
                    to_char(av.dt_sinistro, 'HH24:MI') as hr_sinistro,
                    true as checked
				from
					sinistro.avisos	av
					inner join
					   sinistro.vistorias_avisos va on
					       va.id_aviso = av.id
					inner join
					   sistema.vistorias_coberturas vc on
					       vc.id_vistoria = va.id_vistoria
				where
					vc.id_cobertura = $idCobertura and
					av.id_proposta  = $idProposta and
					va.id_vistoria  = $idVistoria
				group by
					av.id,
                    dt_sinistro,
                    hr_sinistro
			";

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

	public function getAvisosByLaudoPreliminar($idLaudoPreliminar){
		$data = array();
		if($idLaudoPreliminar){
			$select = $this->select();
			$select->setIntegrityCheck(false);
			$select->from(array('av'=>'sinistro.avisos'),'av.id');
			$select->join(array('va'=>'sinistro.vistorias_avisos'),'av.id = va.id_aviso',false);
			$select->join(array('vl'=>'sistema.vistorias_laudos_preliminares'),'va.id_vistoria = vl.id_vistoria');

			if(is_array($idLaudoPreliminar)){
				if(count($idLaudoPreliminar) > 0){
					$select->where('vl.id_laudo_preliminar in (' . implode(',',$idLaudoPreliminar) . ')');
					$data = $this->_db->fetchCol($select);

				}
			}else{
				$select->where($this->getAdapter()->quoteInto('vl.id_laudo_preliminar = ?',$idLaudoPreliminar));
				$data = $this->_db->fetchCol($select);
			}
		}
		return $data;
	}

	public function getVistoriaByAvisos($idAviso){
		$data = array();
		if($idAviso){
			$select = $this->select();
			$select->setIntegrityCheck(false);
			$select->from(array('av'=>'sinistro.avisos'), false);
			$select->join(array('va'=>'sinistro.vistorias_avisos'),'av.id = va.id_aviso', 'va.id_vistoria');

			if(is_array($idAviso)){
				if(count($idAviso) > 0){
					$select->where('va.id_aviso in (' . implode(',', $idAviso) . ')');
					$data = $this->_db->fetchCol($select);

				}
			}else{
				$select->where($this->getAdapter()->quoteInto('va.id_aviso = ?', $idAviso));
				$data = $this->_db->fetchCol($select);
			}
		}
		return $data;
	}

	public function getAvisosByVistoria($idVistoria){
		$data = array();
		if($idVistoria){
			$select = $this->select();
			$select->setIntegrityCheck(false);
			$select->from(array('av'=>'sinistro.avisos'), false);
			$select->join(array('va'=>'sinistro.vistorias_avisos'),'av.id = va.id_aviso', 'va.id_aviso');

			if(is_array($idVistoria)){
				if(count($idVistoria) > 0){
					$select->where('va.id_vistoria in (' . implode(',', $idVistoria) . ')');
					$data = $this->_db->fetchCol($select);

				}
			}else{
				$select->where($this->getAdapter()->quoteInto('va.id_vistoria = ?', $idVistoria));
				$data = $this->_db->fetchCol($select);
			}
		}

		return $data;
	}

	public function getAvisosForAgendamentoVistFinal($idCobertura,$idProposta){
		$data = array();

		if($idCobertura && $idProposta){

			$fields = array(
				'av.id as id_aviso',
				'to_char(av.dt_sinistro, \'DD/MM/YYYY\') as dt_sinistro',
				'to_char(av.dt_sinistro, \'HH24:MI\') as hr_sinistro'
			);
			$select = $this->select();
			$select->setIntegrityCheck(false);
			$select->from(array('av'=>'sinistro.avisos'),$fields);
			$select->join(array('ae'=>'sinistro.avisos_eventos'),'av.id = ae.id_aviso', false);
			$select->join(array('s'=>'sistema.status'),'s.id = av.id_status', false);
			$select->join(array('ce'=>'produto.coberturas_eventos'),'ce.id_evento = ae.id_evento', false);
			$select->where('ce.id_cobertura = ?', $idCobertura);
			$select->where('av.id_proposta = ?', $idProposta);
			$select->where("s.ds_chave = 'ACEITO'");
			$select->group(array('av.id', 'dt_sinistro', 'hr_sinistro'));

			$data = $this->fetchAll($select)->toArray();

		}
		return $data;
	}

	public function getVistoriasByLaudoPreliminar($idLaudoPreliminar) {
		$data = array();
		if($idLaudoPreliminar){
			$select = "
				select
					v.id as id_vistoria,
					to_char(v.dt_inicio, 'DD/MM/YYYY') as dt_inicio,
					to_char(v.dt_fim, 'DD/MM/YYYY') as dt_fim
				from
					sinistro.avisos	as av join
					sinistro.vistorias_avisos as va on av.id = va.id_aviso join
					sistema.vistorias_coberturas as vc on va.id_vistoria = vc.id_vistoria join
					sistema.vistorias_laudos_preliminares as vlp on vlp.id_vistoria = vc.id_vistoria join
					sistema.vistorias as v on v.id = vlp.id_vistoria join
					sistema.tipos_vistoria tv on tv.id = v.id_tipo
				where
					tv.ds_chave_tipos_vistoria = 'PRELIMINAR' and
					av.fl_ativo     = true
			";
			if(is_array($idLaudoPreliminar)){
				$select .= " and vlp.id_laudo_preliminar in (" . implode(",", $idLaudoPreliminar) . ") ";
			}else{
				$select .= " and vlp.id_laudo_preliminar = ". $idLaudoPreliminar;
			}

			$select .= "
				group by
					v.id,
					dt_inicio,
					dt_fim
			";

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

	public function getCoberturasByAviso($idProposta, $idAviso) {

		$data = array();
		if($idProposta && $idAviso){
			$select = "
				select
					c.id as id_cobertura,
					c.ds_nome_cobertura,

					pdc.fl_vistoria_preliminar

				from
					/*tabela que tem o id_proposta*/
					sinistro.avisos as av inner join

					/*busca as coberturas da proposta*/
					seguro.propostas_coberturas as pc on pc.id_proposta = av.id_proposta inner join
					produto.coberturas as c on c.id = pc.id_cobertura inner join

					/*filtra pelos eventos das coberturas*/
					sinistro.avisos_eventos as ae on ae.id_aviso = av.id inner join
					produto.coberturas_eventos as ce on ce.id_evento = ae.id_evento and ce.id_cobertura = c.id inner join

					/*filtra por produto*/
					seguro.propostas pr on pr.id = av.id_proposta inner join
					produto.produtos pd on pd.id = pr.id_produto inner join
					produto.produtos_coberturas pdc on pdc.id_cobertura = c.id and pdc.id_produto = pr.id_produto
				where
					av.id_proposta = $idProposta and
					av.id = $idAviso and
					pdc.fl_cobertura_dependente = false and
					c.fl_ativo = true
				order by
					pdc.fl_vistoria_preliminar,
					c.ds_nome_cobertura
			";

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

		return $data;
	}

	public function getAvisosByCoberturaVistoriaPreliminar($idProposta, $idCobertura, $dtVistoria = null) {
		$data = array();
		if($idCobertura && $idProposta){
			$select = "
				select
					av.id as id_aviso,
					to_char(av.dt_sinistro, 'DD/MM/YYYY') as dt_sinistro,
					to_char(av.dt_sinistro, 'HH24:MI') as hr_sinistro,
					va.id_vistoria
				from
					sinistro.avisos	as av left join
					sinistro.vistorias_avisos as va on av.id = va.id_aviso left join
					sistema.vistorias as v on v.id = va.id_vistoria left join
					sistema.tipos_vistoria as tv on tv.id = v.id_tipo
				where
					av.id in(
						select
							ae.id_aviso
						from
							sinistro.avisos_eventos ae inner join
							produto.coberturas_eventos ce on ce.id_evento = ae.id_evento
						where
							ce.id_cobertura = $idCobertura
					) and
					av.id_proposta  = $idProposta and
					av.id_status = 28 and
					av.fl_ativo     = true and
					(tv.ds_chave_tipos_vistoria is null or tv.ds_chave_tipos_vistoria = 'PRELIMINAR')
			";

			if($dtVistoria){
				$select .= ' and av.dt_sinistro < '.$dtVistoria;
			}

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

	public function getAvisosByCoberturasSemVistPreliminar($idProposta, $idCobertura) {
		$data = array();
		if($idCobertura && $idProposta){
			$select = "
				select
					av.id as id_aviso,
					to_char(av.dt_sinistro, 'DD/MM/YYYY') as dt_sinistro,
					to_char(av.dt_sinistro, 'HH24:MI') as hr_sinistro,
					va.id_vistoria
				from
					sinistro.avisos	as av left join
					sinistro.vistorias_avisos as va on av.id = va.id_aviso left join
					sistema.vistorias as v on v.id = va.id_vistoria left join
					sistema.tipos_vistoria as tv on tv.id = v.id_tipo
				where
					av.id in(
						select
							ae.id_aviso
						from
							sinistro.avisos_eventos ae inner join
							produto.coberturas_eventos ce on ce.id_evento = ae.id_evento
						where
							ce.id_cobertura = $idCobertura
					) and
					av.id_proposta  = $idProposta and
					av.id_status = 28 and
					av.fl_ativo     = true and
					(tv.ds_chave_tipos_vistoria is null or tv.ds_chave_tipos_vistoria = 'FINAL')
			";

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

	public function getDtSinistroAvisos($idProposta){

		$result = '';
		if ($idProposta) {
			$select = $this->select();
			$select->setIntegrityCheck(false);

			$select->from(array('a'=>'sinistro.avisos'), 'to_char(a.dt_sinistro, \'dd/MM/yyyy\') as dt_sinistro');

			$select->where('a.id_proposta = ?', $idProposta);
			$select->group('dt_sinistro');

			$rs = $this->fetchAll($select);

			if ($rs) {
				$result = $rs->toArray();
			}
		}

		return $result;
	}

	public function getAvisosByProposta($idProposta, $dsChave){
		$data = array();

		if($idProposta){
			$select = $this->select();
			$select->setIntegrityCheck(false);

			$select->from(array('av'=>'sinistro.avisos'), array('id', "to_char(av.dt_sinistro, 'dd/MM/yyyy HH24:MI') as dt_sinistro", "to_char(dt_aceitacao, 'dd/MM/yyyy HH24:MI') as dt_aceitacao", "to_char(av.dt_criacao, 'dd/MM/yyyy HH24:MI') as dt_envio", "fl_dispensa_preliminar"));
			$select->join(array('s'=>'sistema.status'),'s.id = av.id_status', 's.ds_status as ds_status');
			$select->join(array('u'=>'sistema.usuarios'),'u.id = av.id_usuario_criacao', 'ds_nome_usuario as ds_nome_usuario_envio');
			$select->join(array('u2'=>'sistema.usuarios'),'u2.id = av.id_usuario_alteracao', 'ds_nome_usuario as ds_nome_usuario_aceite');
			$select->where('av.id_proposta = ?',$idProposta);
			$select->where('s.ds_chave = ?', $dsChave);
			$select->order('av.id');

			$rs = $this->fetchAll($select);
			if ($rs) {
				$data = $rs->toArray();
			}
		}

		return $data;
	}

    public function getAvisosByPropostaDataAviso($idProposta, $idAviso, $dtAviso){
        $data = array();

        if($idProposta){
            $select = $this->select();
            $select->setIntegrityCheck(false);

            $select->from(array('av'=>'sinistro.avisos'), array('id', "to_char(av.dt_sinistro, 'dd/MM/yyyy HH24:MI') as dt_sinistro", "to_char(dt_aceitacao, 'dd/MM/yyyy HH24:MI') as dt_aceitacao", "to_char(av.dt_criacao, 'dd/MM/yyyy HH24:MI') as dt_envio"));
            $select->join(array('s'=>'sistema.status'),'s.id = av.id_status', array('s.ds_status'));
            $select->where('av.id_proposta = ?',$idProposta);
            $select->where('av.id <> ?',$idAviso);
            $select->where("to_char(dt_sinistro, 'YYYY-MM-DD') = ?",$dtAviso);
            $rs = $this->fetchAll($select);
            if ($rs) {
                $data = $rs->toArray();
            }
        }

        return $data;
    }

    public function getVistoriadoraByCpfCnpjSeguradoSafra($cpf_cnpj, $idSafra) {

        $select = $this->select();
        $select->setIntegrityCheck(false);
        $select->from(array('pp'=>'seguro.propostas_proponentes'), null);
        $select->join(array('pr'=>'seguro.propostas'),'pr.id = pp.id_proposta and pr.fl_ativo = true', null);
        $select->join(array('po'=>'seguro.proponentes'),'po.cpf_cnpj = pp.cpf_cnpj', null);
        $select->join(array('pd'=>'produto.produtos'), 'pd.id = pr.id_produto', null);
        $select->join(array('p'=>'sinistro.processos'), 'p.id_proposta = pp.id_proposta and p.fl_ativo = true', null);
        $select->join(array('pe'=>'sinistro.processos_empresas'), 'pe.id_processo = p.id and pe.fl_ativo = true', null);
        $select->join(array('e'=>'sistema.empresas'), 'e.id = pe.id_empresa and e.fl_ativo = true', array('e.id','e.ds_nome_fantasia'));
        $select->where('pp.cpf_cnpj = ?', $cpf_cnpj);
        $select->where('pd.id_safra = ?', $idSafra);
        $Row = $this->fetchRow($select);

        if($Row) {
            return $Row;
        } else {
            return false;
        }

    }

    public function getMunicipiosAvisos($where) {
        $select = $this->select();
        $select->setIntegrityCheck(false);
        $select->from($this->_schema.'.'.$this->_view,array('id_municipio','ds_nome_municipio'));

		if (is_array($where)) {
			foreach ($where as $clause) {
				if (is_array($clause)) {
					$field = $clause['field'];
					$operator = $clause['operator'];
					$value = $clause['value'];

					if (is_numeric($value)) {
						$select->where("$field $operator ?", $value);
					} else {
						$select->where("normalize($field) $operator normalize(?)", $value);
					}


				} else {
					$select->where($clause, '');
				}
			}
		} elseif ($where != '') {
			$select->where($where);
		}
        $select->group(array('id_municipio','ds_nome_municipio'));
        $select->order('ds_nome_municipio');

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

    public function getEstadosAvisos($where) {
        $select = $this->select();
        $select->setIntegrityCheck(false);
        $select->from($this->_schema.'.'.$this->_view,array('id_estado','ds_sigla'));

        if (is_array($where)) {
            foreach ($where as $clause) {
                if (is_array($clause)) {
                    $field = $clause['field'];
                    $operator = $clause['operator'];
                    $value = $clause['value'];

                    if (is_numeric($value)) {
                        $select->where("$field $operator ?", $value);
                    } else {
                        $select->where("normalize($field) $operator normalize(?)", $value);
                    }

                } else {
                    $select->where($clause, '');
                }
            }
        } elseif ($where != '') {
            $select->where($where);
        }
        $select->group(array('id_estado','ds_sigla'));
        $select->order('ds_sigla');

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

	public function getEmpresaPrevia($idProposta) {
        $select = $this->select()->setIntegrityCheck(false);
		$select->from(array('pvp'=>'seguro.propostas_vistorias_previas'), null);
		$select->join(array('ve'=>'sistema.vistorias_empresas'), 've.id_vistoria = pvp.id_vistoria', null);
		$select->join(array('e'=>'sistema.empresas'), 'e.id = ve.id_empresa', 'ds_nome_fantasia');
		$select->where('pvp.id_proposta = ?', $idProposta);
		$select->where('pvp.fl_ativo = true');

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

	public function hasAvisoSinistroAnteriorByIdProposta($idProposta, $dtSinistro) {
        $select = $this->select()->setIntegrityCheck(false);
		$select->from(array('a'=>'sinistro.avisos'), 'id');
		$select->where('a.id_proposta = ?', $idProposta);
		$select->where('a.dt_sinistro > ?', $dtSinistro);
		$select->where('a.id_status != ?', Agro_Util::status("CANCELADO", "SA"));

		if ($this->_db->fetchOne($select)) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * Busca o aviso mais antigo cadastrado.
	 * Usado inicialmente para travar agendamentos com data anterior a do aviso.
	 *
	 * @param $params
	 */
	public function buscaDataAceitacaoAvisoMaisAntigo($params){
		$sql = "select
					min(a.dt_aceitacao)
				from
					sinistro.avisos a
				where
					a.id_proposta = (select p.id_proposta from sinistro.processos p where p.id={$params["id_processo"]})";

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

	public function getIdPropostaByIdAviso($id_aviso){
		$Aviso = $this->find($id_aviso)->current();
		$propostas = $Aviso->id_proposta;

		return $propostas;
	}

	public function getIdPropostaMaeByIdAviso($id_aviso){
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('a'=>'sinistro.v_avisos'), array('id_proposta_mae','id_proposta'));
		$select->where('a.id = ?', $id_aviso);

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


	public function checkDispensaPreliminar($idAviso){
	    $select = $this->select()->setIntegrityCheck(false);
		$select->from(array('a'=>'sinistro.avisos'), 'fl_dispensa_preliminar');
		$select->where('a.id = ?', $idAviso);

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

	}

	public function checkAndCancelProcesso($idProposta){
	    $select = $this->select()->setIntegrityCheck(false);
	    $select->from(array('a'=>'sinistro.avisos'), 'id');
		$select->where('a.id_proposta = ?', $idProposta);
		$select->where('a.id_status in (27,28)');

		$avisos = $this->fetchAll($select);

		if(count($avisos) == 1){
			return true;
		}

		return false;
	}


	public function setAvisoVisto($idAviso){

		$Row = $this->getRow($idAviso);
		if($Row->fl_novo == 'true'){
			$Row->fl_novo = 'false';
			$Row->save();
		}
	}

	public function getData($where=false) {
		$User = Zend_Auth::getInstance()->getIdentity();

		$select = $this->select();

		if ($this->_view) {
			$select->setIntegrityCheck(false);
			$select->from("{$this->_schema}.{$this->_view}");
		}

		if ($User->tp_usuario == 'V') {
			$select->where('id_empresa_vistoriadora = ?', $User->id_empresa);
			$select->where('id_processo is not null');
		}

		if ($this->_order) {
			$select->order($this->_order);
		}

		//$select->group(array('ds_nome_usuario_responsavel', 'ds_nome_cliente', 'fl_ativo', 'fl_del', 'id', 'dt_criacao', 'dt_sinistro', 'id_proposta', 'dt_vigencia', 'nr_apolice',  'id_processo', 'id_processo_seguradora', 'ds_nome_proponente', 'cpf_cnpj', 'id_produto', 'ds_nome_produto', 'ds_nome_usuario',  'id_corretor',  'id_usuario_corretor', 'ds_nome_corretor', 'id_safra', 'id_status', 'ds_nome_municipio', 'ds_sigla',  'id_estado', 'id_municipio', 'ds_endereco', 'ds_status', 'id_endosso', 'fl_pasta_aberta', 'id_usuario_proposta_corretor', 'vl_lmga',  'ds_eventos', 'ds_empresa_previa', 'ds_empresa_cpf_segurado'));
		$this->getWhere($select, $where);

		return $select;
	}

	public function checkAvisoByProposta($idProposta) {
        $select = $this->select()->setIntegrityCheck(false);
        $select->from(array('a'=>'sinistro.avisos'), 'count(id) as count');
        $select->where('a.id_proposta = ?', $idProposta);
        return $this->_db->fetchOne($select);
	}


    public function countNewAvisos() {
        $sql = "
				  select
				        se.ds_sigla,
				         pc.ds_nome_cultura,
				         count(sa.id) as total
				    from sinistro.avisos sa
				    join seguro.propostas sp
				      on sa.id_proposta = sp.id
				    join produto.produtos pp
				      on sp.id_produto = pp.id
				    join produto.produtos_geral ppg
				      on pp.id_produto_geral = ppg.id
				    join produto.culturas pc
				      on ppg.id_cultura = pc.id
				    join seguro.propostas_propriedades spp
				      on sp.id = spp.id_proposta
				    join sistema.municipios sm
				      on spp.id_municipio = sm.id
				    join sistema.estados se
				      on sm.id_estado = se.id
				    join sinistro.avisos_eventos sae
				      on sae.id_aviso = sa.id
				    join produto.eventos pev
				      on pev.id = sae.id_evento
				   where sa.fl_novo is true
				     and TO_CHAR(sa.dt_criacao, 'DD/MM/YYYY') = TO_CHAR(now(), 'DD/MM/YYYY')
				group by se.ds_sigla,
				         pc.ds_nome_cultura
				having count(sa.id) >= 10
				order by se.ds_sigla, pc.ds_nome_cultura, total desc
        ";

        $data = $this->_db->fetchAll($sql);

        return $data;
    }
}
