<?php
class Relatorio_Model_Atendimento extends Agro_Db_Table_Relatorios {
	protected $_name = 'atendimento.chamados';
	protected $_primary = 'id';

    public function relatorioProponentes($dados){

		$filtro  = ($dados['cpf_cnpj']) ? "sp.cpf_cnpj='".$dados['cpf_cnpj']."' and " : '';
		$filtro .= ($dados['ds_nome_proponente']) ? "sp.ds_nome_proponente ilike '%".$dados['ds_nome_proponente']."%' and " : '';
		$filtro .= ($dados['fl_restricao']) ? 'sp.fl_restricao = true and ' : null;

		$sql = "select
					sp.ds_nome_proponente,
					sp.cpf_cnpj,
					CASE
				        WHEN sp.fl_validacao_receita = true THEN 'SIM'
				        ELSE 'NÃO'
				    END as fl_validacao_receita,
					CASE
				        WHEN sp.fl_inadimplente = true THEN 'SIM'
				        ELSE 'NÃO'
				    END as fl_inadimplente,
					CASE
				        WHEN sp.fl_restricao = true THEN 'SIM'
				        ELSE 'NÃO'
				    END as fl_restricao,				    
				    restricoes.ds_descricao,
				    restricoes.id_proposta,
				    restricoes.ds_nome_corretor,
				    restricoes.ds_nome_agronomo,
				    restricoes.ds_nome_perito,
				    restricoes.restricoes
				from
					seguro.proponentes sp
				left join (
					select spr.id_proponente,
						   spr.id_proposta,
						   regexp_replace(spr.ds_descricao, '\r|\n', ' ', 'g') as ds_descricao,
						   sc.ds_nome_corretor,
						   sfa.ds_nome_funcionario as ds_nome_agronomo,
						   sfv.ds_nome_funcionario as ds_nome_perito,
						   string_agg(rt.ds_nome_restricao, ', ') as restricoes
					  from seguro.proponentes_restricoes_tecnicas spr
					  join sistema.corretores sc
					    on spr.id_corretor = sc.id
					  left join sistema.funcionarios sfa
					    on spr.id_funcionario_agronomo = sfa.id 
					  left join sistema.funcionarios sfv 
					    on spr.id_funcionario_perito = sfv.id 
					  join seguro.restricoes_tecnicas_proponentes_restricoes_tecnicas rtprt 
					    on rtprt.id_proponente_restricao = spr.id 
					  join seguro.restricoes_tecnicas rt
					    on rtprt.id_restricao = rt.id 
					  group by 1,2,3,4,5,6
				) as restricoes on restricoes.id_proponente = sp.id
				where
					".$filtro."
					sp.fl_ativo=true
				order by
					sp.ds_nome_proponente
				";

		return $this->fetchAll($sql);
	}

    public function relatorioCPFConferencia($dados){

    	$filtro  = ($id_safra)   ? "pd.id_safra=".$id_safra." and " : '';

		if(is_array($arProduto)){
			$filtro .= "pd.id in (".implode("," , $arProduto).") and ";
		}
		$sql = "
                select
                    pr.id,
                    pp.ds_nome_proponente,
                    lpad(replace(replace(replace(pp.cpf_cnpj,'.',''),'-',''),'/',''),11,'0') as cpf_cnpj,
                    pd.ds_nome_produto,
                    pr.dt_vigencia_inicio,
                    to_char(pr.dt_transmissao, 'DD/MM/YYYY') as dt_transmissao,
                    se.ds_sigla,
				    se2.ds_sigla as ds_sigla_propriedade,
                    to_char(pp.dt_nascimento, 'dd/mm/yyyy') as dt_nascimento
                from
                    seguro.propostas pr,
                    seguro.propostas_proponentes pp,
				    seguro.propostas_propriedades po,
                    seguro.proponentes p,
                    produto.produtos pd,
                    sistema.municipios sm,
                    sistema.estados se,
                    sistema.municipios sm2,
                    sistema.estados se2
                where
                	".$filtro."
                	p.fl_validacao_receita = false and
                    pr.id_status = 3 and
                    pp.cpf_cnpj = p.cpf_cnpj and
                    pp.id_proposta = pr.id and
                	po.id_proposta = pr.id and
                    pd.id = pr.id_produto and
                    sm.id = pp.id_municipio and
                    se.id = sm.id_estado and
                    sm2.id = po.id_municipio and
                    se2.id = sm2.id_estado
                order by
                    pr.id
				";

		return $this->fetchAll($sql);
	}

    public function relatorioCorretores($dados){

    	$filtro1  = ($dados['id_estado_pesquisa']) ? "e.id='".$dados['id_estado_pesquisa']."' " : '';
		$filtro2 .= ($dados['status'] != '') ? "c.fl_ativo = '".$dados['status']."'" : null;

		if($filtro1){ $filtro = 'WHERE '.$filtro1;}
		if($filtro1 && $filtro2){ $filtro = $filtro.' AND '.$filtro2;}
		if($filtro2 && !$filtro1){ $filtro = 'WHERE '.$filtro2;}

		$sql = "SELECT
					c.id,
					c.cpf_cnpj,
					c.ds_nome_fantasia,
					c.ds_nome_abreviado,
					c.ds_nome_responsavel,
				    c.ds_nome_corretor as ds_razao_social,
					c.ds_email,
                    c.ds_email_responsavel,
				    c.nr_susep,
					e.ds_nome_estado,
					m.ds_nome_municipio,
					us.ds_nome_usuario,
					CASE
                    	WHEN c.tp_pessoa = 'F' THEN 'Física'
                        ELSE 'Jurídica'
                    END as tp_pessoa,
					to_char(c.dt_criacao, 'dd/MM/yyyy') as dt_criacao,
					to_char(coalesce(c.dt_alteracao, c.dt_criacao), 'dd/MM/yyyy') as dt_alteracao,
					ss.ds_status,
					CASE
				        WHEN c.fl_ativo = true THEN 'SIM'
				        ELSE 'NÃO'
				    END as ativo
				FROM
					sistema.corretores c
                INNER JOIN
                		sistema.usuarios u ON u.id = c.id_usuario
                INNER JOIN
                	sistema.corretores_enderecos ce ON ce.id_corretor = c.id
				INNER JOIN
                	sistema.municipios m ON m.id = ce.id_municipio
                INNER JOIN
                	sistema.estados e ON e.id = m.id_estado
                INNER JOIN
                	sistema.usuarios us ON us.id = c.id_usuario
                INNER JOIN
                    sistema.status ss ON ss.id = c.id_status

					".$filtro."
				ORDER BY
					c.ds_nome_corretor
				";
		return $this->fetchAll($sql);
	}

    public function getComerciais($id_corretor)
    {
        $sql = "SELECT f.ds_nome_funcionario
                  FROM sistema.corretores AS c
				       INNER JOIN sistema.funcionarios f ON f.id_usuario = c.id_comercial
                 WHERE (c.id = {$id_corretor})
                 UNION ALL
                SELECT f.ds_nome_funcionario
                  FROM sistema.corretores_comercial AS cc
                       INNER JOIN sistema.corretores AS c ON c.id = cc.id_corretor
				       INNER JOIN sistema.funcionarios f ON f.id_usuario = cc.id_comercial
                WHERE (c.id = {$id_corretor})";

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

	public function relatorioEmpresaVistoriadora($dados){
    	$filtro1  = ($dados['id_estado_pesquisa']) ? "es.id='".$dados['id_estado_pesquisa']."' " : '';
		$filtro2 .= ($dados['status'] != '') ? "e.fl_ativo = '".$dados['status']."'" : null;

		if($filtro1){ $filtro = 'WHERE '.$filtro1;}
		if($filtro1 && $filtro2){ $filtro = $filtro.' AND '.$filtro2;}
		if($filtro2 && !$filtro1){ $filtro = 'WHERE '.$filtro2;}
		if(!$filtro){
			$filtro = 'WHERE e.id_categoria = 10';
		}else{
			$filtro .= ' AND e.id_categoria = 10';
		}

		$sql = "SELECT
					e.id,
					e.ds_nome_fantasia,
					e.ds_nome_responsavel,
					e.ds_email_responsavel,
					es.ds_nome_estado,
					m.ds_nome_municipio,
					CASE
				        WHEN e.fl_ativo = true THEN 'SIM'
				        ELSE 'NÃO'
				    END as ativo
				FROM sistema.empresas e
				INNER JOIN
				    sistema.municipios m ON m.id = e.id_municipio
				INNER JOIN
				    sistema.estados es ON m.id_estado = es.id
					".$filtro."
				ORDER BY
					e.ds_nome_fantasia
				";

		return $this->fetchAll($sql);
	}

    public function relatorioChamados($dados) {
    	$Chamados = new Atendimento_Model_Chamado();
    	$Rs = $Chamados->relatorioChamados($dados);

    	$return = array();
    	if ($Rs->count()) {
    		foreach ($Rs as $Row) {
    			$return[$Row->id] = array(
					'id_proposta' => $Row->id_proposta,
    				'id_proposta_mae' => $Row->id_proposta_mae,
    			    'nr_apolice' => $Row->nr_apolice,
       			    'ds_chave' => $Row->ds_chave,
				    'cd_status' => $Row->cd_status,
    				'ds_nome_produto' => $Row->ds_nome_produto,
					'id' => $Row->id,
					'ds_tipo_chamado' => $Row->ds_tipo_chamado,
			        'ds_nome_departamento' => $Row->ds_nome_departamento,
			        'ds_destinatario' => $Row->destinatario(),
			        'digitador' => $Row->digitador,
					'ds_status' => $Row->ds_status,
    				'criador' => $Row->ds_nome_usuario,
    				'criado_em' => Agro_Util::formatDate($Row->dt_criacao, 'dd/MM/yyyy HH:mm:ss'),
					'ultima_alteracao' => $Row->ds_nome_usuario_alteracao,
    				'ultima_alteracao_em' =>  Agro_Util::formatDate($Row->dt_alteracao, 'dd/MM/yyyy HH:mm:ss'),
   					'id_empresa_alteracao' => $Row->id_empresa_alteracao,
    				'ds_nome_corretor' => $Row->corretor(),
    				'ds_empresa_vistoriadora' => $Row->ds_nome_fantasia,
    			    'ds_empresa_vistoriadora_previa' => $Row->ds_nome_fantasia_previa,
    			    'ds_nome_responsavel' => $Row->ds_nome_responsavel,
    				'tp_usuario' => $Row->tp_usuario,
    			    'ds_descricao_ultimo_log' => str_ireplace(["\r","\n",'\r','\n'], '', $Row->ds_descricao_ultimo_log),
					'dt_final_prazo' => $Row->dt_final_prazo
    			);
    		}
    	}

		return $return;
	}

	public function relatorioChamadosPrevia($dados) {
		$Chamados = new Atendimento_Model_Chamado();
		$Rs = $Chamados->relatorioChamadosPrevia($dados);

		$return = array();
		if ($Rs->count()) {
			foreach ($Rs as $Row) {

				$return[$Row->id] = array(
						'id_proposta' => $Row->id_proposta,
						'nr_apolice' => $Row->nr_apolice,
						'ds_chave' => $Row->ds_chave,
						'cd_status' => $Row->cd_status,
						'id' => $Row->id,
						'ds_tipo_chamado' => $Row->ds_tipo_chamado,
						'ds_nome_departamento' => $Row->ds_nome_departamento,
						'ds_destinatario' => $Row->destinatario(),
						'ds_status' => $Row->ds_status,
						'criador' => $Row->ds_nome_usuario,
						'criado_em' => $Row->dt_criacao,
						'ultima_alteracao' => $Row->ds_nome_usuario_alteracao,
						'ultima_alteracao_em' => $Row->dt_alteracao,
						'ds_nome_corretor' => $Row->corretor(),
						'ds_empresa_vistoriadora' => $Row->ds_nome_fantasia_previa,
						'ds_nome_responsavel' => $Row->ds_nome_responsavel
				);
			}
		}

		return $return;
	}

	public function relatorioPendencias(int $id_safra = null, array $arProduto = null, array $idStatusProposta = null, array $idPendencias = null)
    {
        $usuarioLogado = Zend_Auth::getInstance()->getIdentity();
        $filtro = [];

        if (!empty($id_safra)) {
            $filtro[] = "pd.id_safra = {$id_safra}";
        }

        if (!empty($arProduto)) {
            $filtro[] = "pd.id in (" . implode(", ", $arProduto) . ")";
        }

        if (!empty($idStatusProposta)) {
            $filtro[] = "pr.id_status in (" . implode(", ", $idStatusProposta) . ")";
        }

        if (!empty($idPendencias)) {
            $filtro[] = "ap.id in (" . implode(", ", $idPendencias) . ")";
        }

        if ($usuarioLogado->tp_usuario == 'C') {
            $filtro[] = "pc.id_usuario = " . $usuarioLogado->id;
        }

        if ($usuarioLogado->tp_usuario == 'P') {
            $filtro[] = "pr.id_usuario_criacao = " . $usuarioLogado->id;
        }


        $where = !empty($filtro) ? " AND " . implode(' AND ', $filtro) : '';

        $sql = "select
				     pr.id as id_proposta
		            ,pr.nr_apolice
				    ,to_char(pr.dt_vigencia_inicio,'DD/MM/YYYY') as dt_vigencia_inicio
				    ,to_char(dt_transmissao,'DD/MM/YYYY') as dt_transmissao
				    ,pr.id_status
				    ,c.ds_nome_cultura
				    ,co.ds_nome_abreviado as ds_nome_fantasia
				    ,u.tp_usuario
				    ,u.ds_nome_usuario
				    ,pp.ds_nome_proponente
				    ,to_char(pe.dt_prazo,'DD/MM/YYYY') as dt_prazo
				    ,pe.id_pendencia
				    ,ap.ds_nome_pendencia
				    ,to_char(pr.dt_transmissao + interval '25 day', 'DD/MM/YYYY') AS dt_aceitacao 
				    ,st.cd_status || ' - ' || st.ds_status as status_proposta
				from seguro.propostas pr
					 inner join seguro.propostas_parcelas spb ON pr.id = spb.id_proposta 
					                                         AND spb.nr_parcela = 1 
					                                         AND spb.fl_ativo = true				
				     inner join seguro.propostas_corretores pc ON pc.id_proposta = pr.id
				     inner join produto.produtos pd ON pd.id = pr.id_produto
				     inner join produto.produtos_geral pg ON pg.id = pd.id_produto_geral
				     inner join produto.culturas c ON c.id = pg.id_cultura
				     inner join sistema.usuarios u ON u.id = pr.id_usuario_criacao
				     inner join seguro.propostas_proponentes pp ON pp.id_proposta = pr.id
				     inner join sistema.corretores co ON co.id_usuario = pc.id_usuario
				     inner join seguro.propostas_status ps ON ps.id_proposta = pr.id
					 inner join seguro.propostas_pendencias pe ON pe.id_proposta_status = ps.id
				     inner join atendimento.pendencias ap ON ap.id  = pe.id_pendencia
				     inner join sistema.status st ON st.id = pr.id_status
				where pc.id_usuario  <> 487 --(corretor teste)
                    {$where}
				order by
				    pr.id asc
				";

        return $this->fetchAll($sql);
    }

	public function propostasFisicas($id_safra="",$arProduto=""){

		$filtro  = ($id_safra)   ? "pd.id_safra=".$id_safra." and " : '';
		
		if(is_array($arProduto)){
			$filtro .= "pd.id in (".implode("," , $arProduto).") and ";
		}

		$sql = "
				select  
					seguro.id_proposta_mae(pr.id) as id_proposta_mae,
					seguro.id_proposta_mae_completo(pr.id) as id_proposta_completo,
					pr.id as id_proposta,
					seguro.nr_endosso(pr.id, pr.id_endosso) as nr_endosso,
					pr.dt_vigencia_inicio,
					pr.id_versao,
					pp.ds_nome_proponente,
					co.ds_nome_fantasia as ds_nome_corretor,
					case when pr.id_usuario_criacao <> pc.id_usuario then u.ds_nome_usuario end as sublogin,
					st.ds_chave,
					contagem.versao
				FROM 
					seguro.propostas pr
					JOIN seguro.propostas_proponentes pp ON pr.id = pp.id_proposta
					JOIN produto.produtos pd ON pd.id = pr.id_produto
					JOIN seguro.propostas_corretores pc ON pc.id_proposta = pr.id
					JOIN sistema.corretores co ON co.id_usuario = pc.id_usuario
					JOIN sistema.status st ON st.id = pr.id_status
					JOIN sistema.usuarios u	ON u.id = pr.id_usuario_criacao
					JOIN (select id_proposta,count(id_proposta) as versao from seguro.propostas_versoes group by id_proposta) as contagem ON contagem.id_proposta = pr.id
				where
					".$filtro."
					pc.id_usuario <> 487
					and st.ds_chave not in ('PROPOSTA_INCOMPLETA' , 'ORCAMENTO_ENDOSSO', 'ENDOSSO_INCOMPLETO', 'SOLICITACAO_CANCELADA')
				order by
				        seguro.id_proposta_mae(pr.id), seguro.nr_endosso(pr.id, pr.id_endosso)				
				";
		return $this->fetchAll($sql);
	}

    public function relatorioSolicitacaoEndossos($params)
    {
        $User = Zend_Auth::getInstance()->getIdentity();

        if (count($params['id_safra'])>0) {
        	$safras = implode(',',$params['id_safra']);
        }

        $statusValidosAviso = implode(', ', [
          Sinistro2_Model_AvisosSinistro::ID_STATUS_SA_ACEITO,
          Sinistro2_Model_AvisosSinistro::ID_STATUS_SA_FECHADO,
          Sinistro2_Model_AvisosSinistro::ID_STATUS_SA_PENDENTE,
          Sinistro2_Model_AvisosSinistro::ID_STATUS_SA_RECUSADO,
        ]);
        
        $this->_db->query("CREATE temp TABLE avisos AS (
			 SELECT
			     seguro.id_proposta_mae(avisos.id_proposta) AS id_proposta
			 FROM
			     sinistro.avisos
			     INNER JOIN seguro.propostas AS pr ON pr.id = avisos.id_proposta
			     INNER JOIN seguro.propostas_endosso AS pe ON pe.id_proposta = pr.id and pe.fl_proposta_vigente=true
			     INNER JOIN produto.produtos AS pd ON pd.id = pr.id_produto ". (!is_null($safras) ? "and pd.id_safra in (".$safras.")" : "").
			 "WHERE
        		(avisos.fl_ativo = true)
        		AND (avisos.fl_del = false)
        		". ($safras ? "AND (pd.id_safra in (".$safras."))" : "").
        		"AND (avisos.id_status in ({$statusValidosAviso}))
        	GROUP BY avisos.id_proposta
		)");
		
		$this->_db->query("SELECT seguro.sumario_parcelas(0);");

        $case  = 'CASE ';
        $sqlCase = $this->getAdapter();
        $case .= $sqlCase->quoteInto('WHEN ds_nome_arquivo is NULL THEN \'Não\' ', '', Zend_Db::INT_TYPE);
        $case .= 'ELSE \'Sim\' END ';

        $case2  = 'CASE ';
        $sqlCase2 = $this->getAdapter();
        $case2 .= $sqlCase2->quoteInto('WHEN fl_cancelamento_corretor is NULL THEN \'Não\' WHEN fl_cancelamento_corretor = false THEN \'Não\' ', '', Zend_Db::INT_TYPE);
        $case2 .= 'ELSE \'Sim\' END ';

        $case3 = 'CASE ';
        $sqlCase3 = $this->getAdapter();
        $case3 .= $sqlCase3->quoteInto('WHEN avisos.id_proposta > 0 THEN \'Sim\' ', '', Zend_Db::INT_TYPE);
		$case3 .= 'ELSE \'Não\' END ';
		
		$case5 = 'CASE ';
		$sqlCase5 = $this->getAdapter();
		$case5 .= $sqlCase5->quoteInto('WHEN ss_subvencao_estadual.ds_chave = \'' . Seguro_Model_PropostasSubvencao::DS_CHAVE_SEM_SUBVENCAO . '\' THEN \'-\' ', '', Zend_Db::INT_TYPE);
		$case5 .= 'ELSE ss_subvencao_estadual.ds_status END';

		$case7 = 'CASE ';
		$sqlCase7 = $this->getAdapter();
		$case7 .= $sqlCase7->quoteInto('WHEN ss_subvencao_federal.ds_chave = \'' . Seguro_Model_PropostasSubvencao::DS_CHAVE_SEM_SUBVENCAO . '\' THEN \'-\' ', '', Zend_Db::INT_TYPE);
		$case7 .= 'ELSE ss_subvencao_federal.ds_status END';

		$subStatusPropostaMae = $this->select()->setIntegrityCheck(false)
		->from(array('pr' => 'seguro.propostas'), array('id'))
		->join(array('s' => 'sistema.status'), 's.id = pr.id_status', array('cd_status'));

        $camposEndossoTipoSolicitacao = [
            'ds_orientacao',
            "CASE
               WHEN spes.id_tipo_solicitacao in(" . Endosso_Model_TiposSolicitacao::ID_COM_MOVIMENTO_PREMIO . ", " . Endosso_Model_TiposSolicitacao::ID_SEM_MOVIMENTO_PREMIO . ")
                 THEN 'Alteração de Apólice'
                 ELSE sets.ds_tipo_endosso
              END AS ds_tipo_endosso",
        ];

		$select = $this->select()->distinct(true)->setIntegrityCheck(false);
        $select->from(
            array(
                'spes' => 'seguro.propostas_endosso_solicitacao'),
                array(
                    'id',
                    'id_proposta',
                    'regexp_replace(ds_descricao,E\'[\\n\\r;]+\',\' \',\'g\') as ds_descricao',
                    'ds_arquivo',
                    'id_tipo_solicitacao',
                    'seguro.id_proposta_mae(spes.id_proposta) as id_proposta_mae',
                    'id_status',
                    'id_tipo_solicitacao',
                    'to_char(spes.dt_criacao, \'dd/mm/yyyy\') as dt_criacao',
                    'to_char(spes.dt_alteracao, \'dd/mm/yyyy\') as dt_alteracao'
                )
        );
        $select->join(array('sets' => 'seguro.endosso_tipo_solicitacao'), 'sets.id = spes.id_tipo_solicitacao', $camposEndossoTipoSolicitacao);
        $select->join(array('sp' => 'seguro.propostas'), 'sp.id = spes.id_proposta', '');
		$select->join(array('pp' => 'produto.produtos'), 'pp.id = sp.id_produto', 'ds_nome_abreviado');
		$select->join(array('ppg' => 'produto.produtos_geral'), 'ppg.id = pp.id_produto_geral', false);
		$select->join(array('pc' => 'produto.culturas'), 'pc.id = ppg.id_cultura', 'ds_nome_cultura');
        $select->join(array('ss' => 'sistema.status'), 'ss.id = spes.id_status', 'ds_status');
        $select->join(array('spp' => 'seguro.propostas_propriedades'), 'spp.id_proposta = sp.id', '');
        $select->join(array('sm' => 'sistema.municipios'), 'sm.id = spp.id_municipio', 'ds_nome_municipio');
        $select->join(array('se' => 'sistema.estados'), 'se.id = sm.id_estado', 'ds_sigla');
        $select->join(array('spr' => 'seguro.propostas_endosso_solicitacao_status'), 'spr.id_solicitacao = spes.id', array('regexp_replace(spr.ds_observacao,E\'[\\n\\r;]+\',\' \',\'g\') as ds_observacao', 'fl_cancelamento_corretor' => new Zend_Db_Expr($case2)));
        $select->join(array('us' => 'sistema.usuarios'), 'spes.id_usuario_criacao = us.id', 'ds_nome_usuario');
        $select->join(array('spc' => 'seguro.propostas_corretores'), 'sp.id = spc.id_proposta', null);
        $select->join(array('usc' => 'sistema.usuarios'), 'usc.id = spc.id_usuario', null);
        $select->join(array('sc' => 'sistema.corretores'), 'sc.id_usuario = usc.id', 'ds_nome_corretor');
		$select->joinLeft(array('usresp' => 'sistema.usuarios'), 'spes.id_usuario_responsavel = usresp.id', 'ds_nome_usuario as responsavel');
        $select->joinLeft(array('spesa' =>  'seguro.propostas_endosso_solicitacao_arquivos'), 'spesa.id_solicitacao = spes.id and spesa.fl_ativo = true', array('ds_nome_arquivo', 'assinada' => new Zend_Db_Expr($case), 'to_char(spesa.dt_criacao, \'dd/mm/yyyy\') as dt_criacao_arquivo'));
		$select->joinLeft(array('spre' => 'sistema.prepostos'), 'us.id = spre.id_usuario', 'ds_nome_preposto');
		$select->joinLeft(array('sps' => 'seguro.propostas_subvencao'), 'sps.id_proposta = sp.id_proposta_mae', false);
		$select->joinLeft(array('ss_subvencao_estadual' => 'sistema.status'), 'ss_subvencao_estadual.id = sps.id_status_subvencao_estadual', array('quest_sub_estadual' => new Zend_Db_Expr($case5)));
		$select->joinLeft(array('ss_subvencao_federal' => 'sistema.status'), 'ss_subvencao_federal.id = sps.id_status_subvencao_federal', false);
		$select->joinLeft(array('pca' => 'seguro.propostas_consulta_cadin'), 'pca.fl_ativo = true AND pca.id_proposta = sp.id_proposta_mae', 'fl_sucesso');
		$select->joinLeft(array('pat' => 'sumario_parcelas'), 'pat.id_endosso = sp.id_endosso', array('subvencao_concedida' => new Zend_Db_Expr($case7)));
        $select->join(array('st' => new Zend_Db_Expr("($subStatusPropostaMae)")), 'st.id = sp.id_proposta_mae', 'cd_status');
        $select->joinLeft(array('avisos' => 'avisos'), 'avisos.id_proposta = seguro.id_proposta_mae(spes.id_proposta)', array('aviso' => new Zend_Db_Expr($case3)));

        $select->where('spr.fl_ativo = true');

        if ($User->tp_usuario === Sistema_Model_Usuarios::TIPO_USUARIO_PREPOSTO) {
            $select->where('spre.id_usuario = ?', $User->id);
        }

        if ($User->tp_usuario === Sistema_Model_Usuarios::TIPO_USUARIO_CORRETOR) {
            $select->where('sc.id_usuario = ?', $User->id);
        }

        if ($params['id_solicitacao']) {
            $select->where('spes.id = ?', $params['id_solicitacao']);
        }

        if ($params['id_proposta']) {
            $select->where('spes.id_proposta = ?', $params['id_proposta']);
        }

        if ($params['id_produto']) {
             $select->where('pp.id = ?', $params['id_produto']);
        }

        if ($params['id_status']) {
            $select->where('ss.id in ('.implode(",",$params['id_status']).')');
        }

        if ($params['assinada']) {
            $select->where('spesa.ds_nome_arquivo is '.($params['assinada'] == 'S' ? 'not null' : 'null'));
        }
        
        if ($params['id_tipo_solicitacao']) {
            $filtroTipoSolicitacao = [];
            foreach ($params['id_tipo_solicitacao'] as $idTipoSolicitacao) {
                if ((int) $idTipoSolicitacao === Endosso_Model_TiposSolicitacao::ID_STATUS_ALTERACAO_APOLICE) {
                    $filtroTipoSolicitacao[] = Endosso_Model_TiposSolicitacao::ID_COM_MOVIMENTO_PREMIO;
                    $filtroTipoSolicitacao[] = Endosso_Model_TiposSolicitacao::ID_SEM_MOVIMENTO_PREMIO;
                    $filtroTipoSolicitacao[] = Endosso_Model_TiposSolicitacao::ID_STATUS_ALTERACAO_APOLICE;
                } else {
                    $filtroTipoSolicitacao[] = $idTipoSolicitacao;
                }
            }

        	$select->where('sets.id in ('.implode(",", $filtroTipoSolicitacao).')');
        }
        
        if ($safras) {
        	$select->where('pp.id_safra in ('.$safras.')');
        }

		if ($params['sou_responsavel']) {
			$select->where('spes.id_usuario_responsavel = ?', $User->id);
			$select->where('spes.id_status <> ?', 74);
		}

        $select->order(array('seguro.id_proposta_mae(spes.id_proposta)', 'spes.id'));

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

    public function relatorioDaf($id_safra="", $arProduto=""){

    	$filtro  = ($id_safra)   ? "pd.id_safra=".$id_safra." and " : '';

    	if(is_array($arProduto)){
    		$filtro .= "pd.id in (".implode("," , $arProduto).") and ";
    	}

    	$sql = "select
				     pr.id as id_proposta
				    ,to_char(dt_vigencia_inicio,'DD/MM/YYYY') as dt_vigencia_inicio
    			    ,to_char(dt_transmissao,'DD/MM/YYYY') as dt_transmissao
				    ,replace(replace(replace(pp.cpf_cnpj,'.',''),'-',''),'/','') as cpf_cnpj
				    ,pp.ds_nome_proponente
				    ,e1.ds_sigla
				    ,daf.quest_daf
				from
				     seguro.propostas_endosso pe
				    ,seguro.propostas pr
				    left join (select case when ds_resposta='1' then 'Sim' else 'Não' end as quest_daf, id_proposta from seguro.propostas_questionario where id_atributo_rn  = 155) as daf on daf.id_proposta = pr.id
				    ,seguro.propostas_propriedades po
				    ,seguro.propostas_proponentes pp
				    ,seguro.propostas_corretores pc
				    ,produto.produtos pd
				    ,produto.safras sf
				    ,sistema.municipios m1
				    ,sistema.estados e1
				    ,sistema.status st
				    ,sistema.usuarios u
				where
				    	".$filtro."
				        st.ds_chave = 'ENVIADA_AGUARDANDO_CONF'
				    and pe.fl_proposta_vigente = true
				    and pc.id_usuario  <> 487
				    and pe.id_proposta = pr.id
				    and po.id_proposta = pr.id
				    and pp.id_proposta = pr.id
				    and pc.id_proposta = pr.id
				    and pd.id          = pr.id_produto
				    and sf.id          = pd.id_safra
				    and m1.id          = po.id_municipio
				    and e1.id          = m1.id_estado
				    and st.id          = pr.id_status
				    and pr.id_usuario_criacao = u.id
				order by
				    pr.id
    	";
    	return $this->fetchAll($sql);
    }
}

