<?php

class Agronet_Model_Index extends Agro_Db_Table_Abstract {
	protected $_schema = 'sistema';
	protected $_name = 'status';
	protected $_primary = 'id';

	public $_user;

	public function init(){
		parent::init();
		$this->_user = Zend_Auth::getInstance()->getIdentity();
	}

	public function getLimitesSubvencao(){
	    $Model = new Produto_Model_ValidacoesSubvencaoGrupos();
	    return $Model->getData();
	}

	public function getChamadosSinistro($id_safra) {

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('c' => 'atendimento.chamados'), 'count(c.id) as quantidade');
		$select->join(array('s' => 'sistema.status'), 'c.id_status = s.id', array('s.ds_status', 'id'));
		$select->join(array('t' => 'sistema.tipo_status'), "s.id_tipo_status = t.id and t.ds_chave = 'CH'", false);
		$select->join(array('u' => 'sistema.usuarios'), 'c.id_usuario_criacao = u.id', false);
		$select->join(array('pr' => 'seguro.propostas'), 'pr.id = c.id_proposta', false);
		$select->join(array('prd' => 'produto.produtos'), 'prd.id = pr.id_produto', false);
		$select->where("prd.id_safra = $id_safra");
		$select->where("id_parent is null");
		$select->where("c.id_departamento = (?)", 23);
		$select->group(array('s.ds_status', 's.id'));
		$select->order('s.ds_status');

		if($this->_user->id_empresa != 20 && ($this->_user->tp_usuario == 'V' || $this->_user->tp_usuario == 'M')){
			$select->join(array('cd' => 'atendimento.chamados_destinatario'), 'cd.id_chamado = c.id', false);
			$select->where("cd.id_empresa = (?)", $this->_user->id_empresa);
		}

		if ($this->_user->tp_usuario == 'C') {
			$select->join(array('pc' => 'seguro.propostas_corretores'), 'c.id_proposta = pc.id_proposta', false);
			$select->join(array('cd' => 'atendimento.chamados_destinatario'), 'c.id = cd.id_chamado', false);
			$select->where("cd.ds_tipo_destinatario = ?", 'C');
			$select->where("pc.id_usuario = ?", $this->_user->id);
		} elseif ($this->_user->tp_usuario == 'P') {
			$select->where("pr.id_usuario_criacao = ?", $this->_user->id);
		}

		$Rs = $this->fetchAll($select)->toArray();

		return $Rs;
	}

	public function getChamadosSinistroNovos($id_safra) {
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('c' => 'atendimento.chamados'), 'count(c.id) as quantidade');
		$select->join(array('u' => 'sistema.usuarios'), 'c.id_usuario_criacao = u.id', false);
		$select->join(array('pr' => 'seguro.propostas'), 'pr.id = c.id_proposta', false);
		$select->join(array('prd' => 'produto.produtos'), 'prd.id = pr.id_produto', false);
		$select->where("c.id_status = 58"); //chamados Novos
		$select->where("prd.id_safra >= $id_safra");
		$select->where("id_parent is null");
		$select->where("c.id_departamento = (?)", 23);

		if($this->_user->id_empresa != 20 && ($this->_user->tp_usuario == 'V' || $this->_user->tp_usuario == 'M')){
			$select->join(array('cd' => 'atendimento.chamados_destinatario'), 'cd.id_chamado = c.id', false);
			$select->where("cd.id_empresa = (?)", $this->_user->id_empresa);
		}

		if ($this->_user->tp_usuario == 'C') {
			$select->join(array('pc' => 'seguro.propostas_corretores'), 'c.id_proposta = pc.id_proposta', false);
			$select->join(array('cd' => 'atendimento.chamados_destinatario'), 'c.id = cd.id_chamado', false);
			$select->where("cd.ds_tipo_destinatario = ?", 'C');
			$select->where("pc.id_usuario = ?", $this->_user->id);
		} elseif ($this->_user->tp_usuario == 'P') {
			$select->where("cd.ds_tipo_destinatario = ?", 'C');
			$select->where("pr.id_usuario_criacao = ?", $this->_user->id);
		}

		$Rs = $this->fetchAll($select)->toArray();
		return $Rs;
	}

	public function countChamadosSinistro(
        $id_safra,
        $id_status,
        $fl_pendencia_agro = null,
        int $idResponsavel = null,
        array $campos = [],
        bool $retornarFetch = true
    ) {
        $camposRetorno = empty($campos) ? 'count(c.id) as quantidade' : $campos;

        $select = $this->select()->setIntegrityCheck(false);
        $select->from(array('c' => 'atendimento.chamados'), $camposRetorno);
        $select->join(array('u' => 'sistema.usuarios'), 'c.id_usuario_criacao = u.id', false);
        $select->join(array('pr' => 'seguro.propostas'), 'pr.id = c.id_proposta', false);
        $select->join(array('prd' => 'produto.produtos'), 'prd.id = pr.id_produto', false);
        $select->where("c.id_status in ($id_status)");

        if ($fl_pendencia_agro == 'false') {
            $select->where("c.fl_pendencia_agrobrasil = false"); //pendencia de Corretor/Preposto/Vistoriador
        }
        if ($fl_pendencia_agro == 'true') {
            $select->where("c.fl_pendencia_agrobrasil = true"); //pendencia de Corretor/Preposto/Vistoriador
        }

        $select->where("prd.id_safra >= $id_safra");
        $select->where("id_parent is null");
        $select->where("c.id_departamento = (?)", 23);

        if ($this->_user->id_empresa != 20 && ($this->_user->tp_usuario == 'V' || $this->_user->tp_usuario == 'M')) {
            $select->join(array('cd' => 'atendimento.chamados_destinatario'), 'cd.id_chamado = c.id', false);
            $select->where("cd.id_empresa = (?)", $this->_user->id_empresa);
        }

        if ($this->_user->tp_usuario == 'C') {
            $select->join(array('pc' => 'seguro.propostas_corretores'), 'c.id_proposta = pc.id_proposta', false);
            $select->join(array('cd' => 'atendimento.chamados_destinatario'), 'c.id = cd.id_chamado', false);
            $select->where("cd.ds_tipo_destinatario = ?", 'C');
            $select->where("pc.id_usuario = ?", $this->_user->id);
        } elseif ($this->_user->tp_usuario == 'P') {
            $select->join(array('pc' => 'seguro.propostas_corretores'), 'c.id_proposta = pc.id_proposta', false);
            $select->join(array('cd' => 'atendimento.chamados_destinatario'), 'c.id = cd.id_chamado', false);
            $select->where("cd.ds_tipo_destinatario = ?", 'C');
            $select->where("pr.id_usuario_criacao = ?", $this->_user->id);
        }

        if (!empty($idResponsavel)) {
            $select->where("c.id_responsavel = ?", $idResponsavel);
        }

        if (!$retornarFetch) {
            return $select;
        }

        return $this->getDefaultAdapter()->fetchOne($select);
    }

	public function countChamadosTecnica(
        $id_safra,
        $id_status,
        $fl_pendencia_agro = null,
        int $idResponsavel = null,
        array $campos = [],
        bool $retornarFetch = true
    ) {
        $camposRetorno = empty($campos) ? 'count(c.id) as quantidade' : $campos;

        $select = $this->select()->setIntegrityCheck(false);
        $select->from(array('c' => 'atendimento.chamados'), $camposRetorno);
        $select->join(array('tc' => 'atendimento.tipo_chamado'), 'c.id_tipo_chamado = tc.id', false);
        $select->join(array('u' => 'sistema.usuarios'), 'c.id_usuario_criacao = u.id', false);
        $select->join(array('pr' => 'seguro.propostas'), 'pr.id = c.id_proposta', false);
        $select->join(array('prd' => 'produto.produtos'), 'prd.id = pr.id_produto', false);
        $select->where("id_parent is null");
        $select->where("c.id_departamento IN (20,26)");
        $select->where("tc.id != (?)", 68);
        $select->where("prd.id_safra >= $id_safra");
        $select->where("c.id_status in ($id_status)");

        if ($fl_pendencia_agro == 'false') {
            $select->where("c.fl_pendencia_agrobrasil = false"); //pendencia de Corretor/Preposto/Vistoriador
        }
        if ($fl_pendencia_agro == 'true') {
            $select->where("c.fl_pendencia_agrobrasil = true"); //pendencia de Corretor/Preposto/Vistoriador
        }

        if ($this->_user->id_empresa != 20 && ($this->_user->tp_usuario == 'V' || $this->_user->tp_usuario == 'M')) {
            $select->join(array('cd' => 'atendimento.chamados_destinatario'), 'cd.id_chamado = c.id', false);
            $select->where("cd.id_empresa = (?)", $this->_user->id_empresa);
        }

        if ($this->_user->tp_usuario == 'C') {
            $select->join(array('pc' => 'seguro.propostas_corretores'), 'c.id_proposta = pc.id_proposta', false);
            $select->join(array('cd' => 'atendimento.chamados_destinatario'), 'c.id = cd.id_chamado', false);
            $select->where("cd.ds_tipo_destinatario = ?", 'C');
            $select->where("pc.id_usuario = ?", $this->_user->id);
        } elseif ($this->_user->tp_usuario == 'P') {
            $select->where("pr.id_usuario_criacao = ?", $this->_user->id);
        }

        if (!empty($idResponsavel)) {
            $select->where("c.id_responsavel = ?", $idResponsavel);
        }

        if (!$retornarFetch) {
            return $select;
        }

        return $this->getDefaultAdapter()->fetchOne($select);
    }

	public function countChamadosPreviaPorTiposChamado(
		int $idSafra,
		array $tiposChamado,
		array $idsStatus
	): int {
		$strTiposChamado = implode(',', $tiposChamado);
		$strIdsStatus = implode(',', $idsStatus);

		$select = $this
			->select()
			->setIntegrityCheck(false)
			->from(['c' => 'atendimento.chamados'], 'count(c.id) as quantidade')
			->join(['tc' => 'atendimento.tipo_chamado'], 'c.id_tipo_chamado = tc.id', false)
			->join(['u' => 'sistema.usuarios'], 'c.id_usuario_criacao = u.id', false)
			->join(array('pr' => 'seguro.propostas'), 'pr.id = c.id_proposta', false)
			->join(array('prd' => 'produto.produtos'), 'prd.id = pr.id_produto', false)
			->where('c.id_departamento IN ('. Sistema_Model_Departamentos::AGRO_TECNICA .')')
			->where('id_parent is null')
			->where('prd.id_safra >= ?', $idSafra)
			->where("tc.id IN ({$strTiposChamado})")
			->where("c.id_status in ($strIdsStatus)");

		if($this->_user->id_empresa != 20 && ($this->_user->tp_usuario == 'V')){
			$select
				->join(array('cd' => 'atendimento.chamados_destinatario'), 'cd.id_chamado = c.id', false)
				->where("cd.id_empresa = ?", $this->_user->id_empresa)
				->where("cd.ds_tipo_destinatario = ?", 'V');
		} elseif ($this->_user->tp_usuario == 'C') {
			$select
				->join(array('pc' => 'seguro.propostas_corretores'), 'c.id_proposta = pc.id_proposta', false)
				->join(array('cd' => 'atendimento.chamados_destinatario'), 'c.id = cd.id_chamado', false)
				->where("cd.ds_tipo_destinatario = ?", 'C')
				->where("pc.id_usuario = ?", $this->_user->id);
		}
		
		return $this->getDefaultAdapter()->fetchOne($select);
	}

	public function countChamadosPrevia(
        $id_safra,
        $id_status,
        $fl_pendencia_agro = null,
        int $idResponsavel = null,
        array $campos = [],
        bool $retornarFetch = true
    ) {
        $camposRetorno = empty($campos) ? 'count(c.id) as quantidade' : $campos;

        $select = $this->select()->setIntegrityCheck(false);
        $select->from(array('c' => 'atendimento.chamados'), $camposRetorno);
        $select->join(array('tc' => 'atendimento.tipo_chamado'), 'c.id_tipo_chamado = tc.id', false);
        $select->join(array('u' => 'sistema.usuarios'), 'c.id_usuario_criacao = u.id', false);
        $select->join(array('pr' => 'seguro.propostas'), 'pr.id = c.id_proposta', false);
        $select->join(array('prd' => 'produto.produtos'), 'prd.id = pr.id_produto', false);
        $select->where("id_parent is null");
        $select->where("c.id_departamento IN (26)");
        $select->where("tc.id = (?)", 68);
        $select->where("prd.id_safra >= $id_safra");
        $select->where("c.id_status in ($id_status)");

        if ($fl_pendencia_agro == 'false') {
            $select->where("c.fl_pendencia_agrobrasil = false"); //pendencia de Corretor/Preposto/Vistoriador
        }
        if ($fl_pendencia_agro == 'true') {
            $select->where("c.fl_pendencia_agrobrasil = true"); //pendencia de Corretor/Preposto/Vistoriador
        }

        if ($this->_user->tp_usuario == 'C') {
            $select->join(array('pc' => 'seguro.propostas_corretores'), 'c.id_proposta = pc.id_proposta', false);
            $select->join(array('cd' => 'atendimento.chamados_destinatario'), 'c.id = cd.id_chamado', false);
            $select->where("cd.ds_tipo_destinatario = ?", 'C');
            $select->where("pc.id_usuario = ?", $this->_user->id);
        } elseif ($this->_user->tp_usuario == 'P') {
            $select->join(array('cd' => 'atendimento.chamados_destinatario'), 'c.id = cd.id_chamado', false);
            $select->where("pr.id_usuario_criacao = ?", $this->_user->id);
            $select->where("cd.ds_tipo_destinatario = ?", 'C');
        }

        if ($this->_user->id_empresa != 20 && ($this->_user->tp_usuario == 'V' || $this->_user->tp_usuario == 'M')) {
            $select->join(array('cd' => 'atendimento.chamados_destinatario'), 'cd.id_chamado = c.id', false);
            $select->where("cd.id_empresa = (?)", $this->_user->id_empresa);
            $select->where("cd.ds_tipo_destinatario = ?", 'V');
        }

        if (!empty($idResponsavel)) {
            $select->where("c.id_responsavel = ?", $idResponsavel);
        }

        if (!$retornarFetch) {
            return $select;
        }

        return $this->getDefaultAdapter()->fetchOne($select);
    }

	public function getChamadosPrevia($id_safra){

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('c' => 'atendimento.chamados'), 'count(c.id) as quantidade');
		$select->join(array('tc' => 'atendimento.tipo_chamado'), 'c.id_tipo_chamado = tc.id', false);
		$select->join(array('s' => 'sistema.status'), 'c.id_status = s.id', array('s.ds_status', 'id'));
		$select->join(array('t' => 'sistema.tipo_status'), "s.id_tipo_status = t.id and t.ds_chave = 'CH'", false);
		$select->join(array('u' => 'sistema.usuarios'), 'c.id_usuario_criacao = u.id', false);
		$select->join(array('pr' => 'seguro.propostas'), 'pr.id = c.id_proposta', false);
		$select->join(array('prd' => 'produto.produtos'), 'prd.id = pr.id_produto', false);
		$select->where("prd.id_safra = $id_safra");
		$select->where("id_parent is null");
		$select->where("c.id_departamento = (?)", 26);
		$select->where("tc.id = (?)", 68);
		$select->group(array('s.ds_status', 's.id'));
		$select->order('s.ds_status');

		if($this->_user->id_empresa != 20 && ($this->_user->tp_usuario == 'V' || $this->_user->tp_usuario == 'M')){
			$select->join(array('cd' => 'atendimento.chamados_destinatario'), 'cd.id_chamado = c.id', false);
			$select->where("cd.id_empresa = (?)", $this->_user->id_empresa);
			$select->where("cd.ds_tipo_destinatario = ?", 'V');
		}

		if ($this->_user->tp_usuario == 'C') {
			$select->join(array('pc' => 'seguro.propostas_corretores'), 'c.id_proposta = pc.id_proposta', false);
			$select->join(array('cd' => 'atendimento.chamados_destinatario'), 'c.id = cd.id_chamado', false);
			$select->where("cd.ds_tipo_destinatario = ?", 'C');
			$select->where("pc.id_usuario = ?", $this->_user->id);
		} elseif ($this->_user->tp_usuario == 'P') {
			$select->where("pr.id_usuario_criacao = ?", $this->_user->id);
			$select->where("cd.ds_tipo_destinatario = ?", 'C');
		}

		$Rs = $this->fetchAll($select)->toArray();

		return $Rs;
	}

	public function getChamadosGerais($id_safra){

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('c' => 'atendimento.chamados'), 'count(c.id) as quantidade');
		$select->join(array('tc' => 'atendimento.tipo_chamado'), 'c.id_tipo_chamado = tc.id', false);
		$select->join(array('s' => 'sistema.status'), 'c.id_status = s.id', array('s.ds_status', 'id'));
		$select->join(array('t' => 'sistema.tipo_status'), "s.id_tipo_status = t.id and t.ds_chave = 'CH'", false);
		$select->join(array('u' => 'sistema.usuarios'), 'c.id_usuario_criacao = u.id', false);
		$select->join(array('pr' => 'seguro.propostas'), 'pr.id = c.id_proposta', false);
		$select->join(array('prd' => 'produto.produtos'), 'prd.id = pr.id_produto', false);
		$select->where("prd.id_safra = $id_safra");
		$select->where("id_parent is null");
		$select->where("c.id_departamento IN (20,26)");
		$select->where("tc.id != (?)", 68);
		$select->group(array('s.ds_status', 's.id'));
		$select->order('s.ds_status');

		if($this->_user->id_empresa != 20 && ($this->_user->tp_usuario == 'V' || $this->_user->tp_usuario == 'M')){
			$select->join(array('cd' => 'atendimento.chamados_destinatario'), 'cd.id_chamado = c.id', false);
			$select->where("cd.id_empresa = (?)", $this->_user->id_empresa);
		}

		if ($this->_user->tp_usuario == 'C') {
			$select->join(array('pc' => 'seguro.propostas_corretores'), 'c.id_proposta = pc.id_proposta', false);
			$select->join(array('cd' => 'atendimento.chamados_destinatario'), 'c.id = cd.id_chamado', false);
			$select->where("cd.ds_tipo_destinatario = ?", 'C');
			$select->where("pc.id_usuario = ?", $this->_user->id);
		} elseif ($this->_user->tp_usuario == 'P') {
			$select->where("pr.id_usuario_criacao = ?", $this->_user->id);
		}

		$Rs = $this->fetchAll($select)->toArray();

		return $Rs;
	}


	public function getPropostas($id_safra) {
		$Safras = new Produto_Model_Safras();

		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('p' => 'seguro.propostas'), array('count(ds_status) as quantidade', 'id_status'));
		$Select->join(array('spe' => 'seguro.propostas_endosso'), 'spe.id_proposta = p.id and fl_proposta_vigente = true', false);
		$Select->join(array('c' => 'seguro.propostas_corretores'), 'c.id_proposta = p.id', false);
		$Select->join(array('pd' => 'produto.produtos'), 'pd.id = p.id_produto', false);
		$Select->join(array('s' => 'sistema.status'), 'p.id_status = s.id', array('ds_status', 'cd_status'));

		$Select->where('pd.id_safra = ?', $id_safra);
		$Select->where('s.ds_chave <> ?', 'PROPOSTA_INCOMPLETA');

		if ($this->_user->tp_usuario == 'C') {
			$Select->where('c.id_usuario = ?', $this->_user->id);
		} if ($this->_user->tp_usuario == 'P') {
			$Select->where('p.id_usuario_criacao = ?', $this->_user->id);
		}

		$Select->group(array('ds_status', 'id_status', 'cd_status'));
		$Select->order('cd_status');

		$Rs = $this->fetchAll($Select)->toArray();
		return $Rs;
	}
	
	public function getSolicitacaoEndosso($id_safra) {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('pes' => 'seguro.propostas_endosso_solicitacao'), 'count(pes.id_status) as quantidade');
		$Select->join(array('s' => 'sistema.status'), 's.id = pes.id_status', array('s.ds_status','s.id as id_status'));
		$Select->join(array('p' => 'seguro.propostas'), 'p.id = pes.id_proposta', false);
		$Select->join(array('pd' => 'produto.produtos'), 'pd.id = p.id_produto', 'pd.id_safra');
		
		if ($this->_user->tp_usuario == 'C') {
			$Select->join(array('pc' => 'seguro.propostas_corretores'), 'pc.id_proposta = p.id', false);
			$Select->where('pc.id_usuario = ?', $this->_user->id);
		}
		
		if ($this->_user->tp_usuario == 'P') {
			$Select->where('p.id_usuario_criacao = ?', $this->_user->id);
		}
		
		$Select->where('pd.id_safra = ?', $id_safra);
		$Select->group(array('s.id', 's.ds_status','s.cd_status','pd.id_safra'));
		$Select->order('s.ds_status');
		
		$Rs = $this->fetchAll($Select)->toArray();
		return $Rs;		
	}

	public function getAvisos($id_safra){
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('a'  => 'sinistro.avisos'), array('count(ds_status) as quantidade', 'id_status'));
		$Select->joinLeft(array('pr' => 'sinistro.processos'), 'pr.id_proposta = a.id_proposta', false);
		$Select->joinLeft(array('pe' => 'sinistro.processos_empresas'), 'pe.id_processo = pr.id and pe.fl_ativo=true', false);
		$Select->join(array('p'  => 'seguro.propostas'), 'p.id = a.id_proposta', false);
		$Select->join(array('c'  => 'seguro.propostas_corretores'), 'c.id_proposta = p.id', false);
		$Select->join(array('pen'=> 'seguro.propostas_endosso'), 'pen.id_proposta = p.id and fl_proposta_vigente = true', false);
		$Select->join(array('pd' => 'produto.produtos'), 'p.id_produto = pd.id', false);
		$Select->join(array('s'  => 'sistema.status'), 's.id = a.id_status', array('ds_status', 'cd_status'));

		if ($this->_user->tp_usuario == 'V' || $this->_user->tp_usuario == 'M') {
			$Select->where('pe.id_empresa = ?', $this->_user->id_empresa);
		}

		if ($this->_user->tp_usuario == 'C') {
			$Select->where('c.id_usuario = ?', $this->_user->id);
		} if ($this->_user->tp_usuario == 'P') {
			$Select->where('p.id_usuario_criacao = ?', $this->_user->id);
		}

		$Select->where('pd.id_safra = ?', $id_safra);

		$Select->group(array('a.id_status', 's.ds_status', 's.cd_status'));
		$Select->order('cd_status');

		$Rs = $this->fetchAll($Select)->toArray();
		return $Rs;
	}

	public function getPendencias($id_safra) {
		$Safras = new Produto_Model_Safras();

		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('pr' => 'seguro.propostas'), 'id_status');
		$Select->join(array('c' => 'seguro.propostas_corretores'), 'c.id_proposta = pr.id', false);
		$Select->join(array('pd' => 'produto.produtos'), 'pd.id = pr.id_produto', false);
		$Select->join(array('ps' => 'seguro.propostas_status'), 'ps.id_status = pr.id_status and ps.id_proposta = pr.id and ps.fl_ativo = true', false);
		$Select->join(array('s' => 'sistema.status'), "s.id = pr.id_status and s.ds_chave = 'CONF_PENDENCIAS'", false);
		$Select->join(array('pp' => 'seguro.propostas_pendencias'), "pp.id_proposta_status = ps.id", 'id_pendencia');
		$Select->join(array('ap' => 'atendimento.pendencias'), "ap.id = pp.id_pendencia", array('ds_nome_pendencia', 'count(ap.ds_nome_pendencia) as quantidade'));
		$Select->where('pd.id_safra >= ?', $id_safra);
		$Select->group(array('ap.ds_nome_pendencia', 'pr.id_status', 'id_pendencia'));
		$Select->order('ap.ds_nome_pendencia');

		if ($this->_user->tp_usuario == 'C') {
			$Select->where('c.id_usuario = ?', $this->_user->id);
		} elseif ($this->_user->tp_usuario == 'P') {
			$Select->where('pr.id_usuario_criacao = ?', $this->_user->id);
		}

		$Rs = $this->fetchAll($Select)->toArray();
		return $Rs;
	}

	public function getPrevias($idSafra = '', $umaSafra = false){
		$Safras = new Produto_Model_Safras();

		if ($this->_user->tp_usuario == "V" || $this->_user->tp_usuario == 'M'){
			$where = " and ve.id_empresa = {$this->_user->id_empresa}  ";

		}else if ($this->_user->tp_usuario == 'C') {
			$where = " and pc.id_usuario = {$this->_user->id}  ";

		} elseif ($this->_user->tp_usuario == 'P') {
			$where = " and p.id_usuario_criacao = {$this->_user->id} ";

		} else {
			$where = "";
		}

		//adicionado para previnir erros em outras partes do sistema que use esta função
		$matchSafra = ">=";
		if ($umaSafra) {
			$matchSafra = "=";
		}
		if(!$idSafra){
			$where .= ' and prod.id_safra '.$matchSafra.' '.($Safras->safraCurrent);

		}else{
			$where .= ' and prod.id_safra '.$matchSafra.' '.$idSafra;
		}

		$sql = "select
					s.id as id_status,
					s.ds_status,
					count(pvp.id_status) as quantidade
				from
					sistema.status s inner join
					seguro.propostas_vistorias_previas pvp on pvp.id_status = s.id inner join
					sistema.vistorias_empresas ve on ve.id_vistoria = pvp.id_vistoria inner join
					seguro.propostas p on p.id = pvp.id_proposta inner join
					produto.produtos prod on prod.id  = p.id_produto inner join
					seguro.propostas_corretores pc on pc.id_proposta = p.id
				where
					pvp.fl_ativo = true
					and ve.id_empresa <> 20
					".$where."

				group by
					s.id,
					s.ds_status
		";

		return Zend_Db_Table::getDefaultAdapter()->fetchAll($sql);
	}

	public function getVistoriaPendencias($idSafra = ''){
		$Safras = new Produto_Model_Safras();

		if ($this->_user->tp_usuario == "V" || $this->_user->tp_usuario == 'M'){
			$where = " and ve.id_empresa = {$this->_user->id_empresa}  ";

		}else if ($this->_user->tp_usuario == 'C') {
			$where = " and pc.id_usuario = {$this->_user->id}  ";

		} elseif ($this->_user->tp_usuario == 'P') {
			$where = " and p.id_usuario_criacao = {$this->_user->id} ";

		} else {
			$where = "";
		}

		if(!$idSafra){
			$where .= ' and prod.id_safra = '.($Safras->safraCurrent);

		}else{
			$where .= ' and prod.id_safra = '.$idSafra;
		}

		$retorno = array();
		if (($this->_user->tp_usuario == "V" || $this->_user->tp_usuario == 'M') || ($this->_user->tp_usuario == "F" && $this->_user->id_empresa == 20)) {
			$sqlEncaminhada = "
				select
						s.id as id_status,
						s.ds_status,
						s.ds_status as ds_nome_status,
						'id_status_empresa' as ds_campo,
						count(pvp.id_status) as quantidade
				from sistema.status s
				inner join seguro.propostas_vistorias_previas pvp on pvp.id_status = s.id
				inner join sistema.vistorias_empresas ve on ve.id_vistoria = pvp.id_vistoria
				inner join seguro.propostas p on p.id = pvp.id_proposta
				inner join produto.produtos prod on prod.id  = p.id_produto
				inner join seguro.propostas_corretores pc on pc.id_proposta = p.id
				where pvp.fl_ativo = true
				and pvp.dt_prazo_agendamento < now()::date
				and ve.id_empresa <> 20
				".$where."
				and s.id = 66
				group by s.id,
						s.ds_status;
			";

			$retorno['encaminhadas'] = current(Zend_Db_Table::getDefaultAdapter()->fetchAll($sqlEncaminhada));
			if (empty($retorno['encaminhadas'])) {
				$retorno['encaminhadas'] = array(
					'id_status' => 66,
					'ds_status' => 'Encaminhadas',
					'ds_nome_status' => 'Encaminhadas',
					'quantidade' => 0
				);
			}
		}

		if (($this->_user->tp_usuario == "V" || $this->_user->tp_usuario == 'M')|| ($this->_user->tp_usuario == "F" && $this->_user->id_empresa == 20)) {
			$sqlAguardandoVistoria = "
				select
						s.id as id_status,
						s.ds_status,
						s.ds_status as ds_nome_status,
						'id_status_empresa' as ds_campo,
						count(pvp.id_status) as quantidade
				from sistema.status s
				inner join seguro.propostas_vistorias_previas pvp on pvp.id_status = s.id
				inner join sistema.vistorias_empresas ve on ve.id_vistoria = pvp.id_vistoria
				inner join seguro.propostas p on p.id = pvp.id_proposta
				inner join produto.produtos prod on prod.id  = p.id_produto
				inner join seguro.propostas_corretores pc on pc.id_proposta = p.id
				inner join sistema.vistorias_agendamentos va on va.id_vistoria = pvp.id_vistoria
				inner join sistema.agendamentos a on a.id = va.id_agendamento
				where pvp.fl_ativo = true
				and p.id = p.id_proposta_mae
				and s.id = 70
				and a.dt_agendamento < now()::date
				and a.fl_ativo = true
				and va.fl_ativo = true
				and ve.id_empresa <> 20
				".$where."
				group by s.id,
						s.ds_status;";

			$retorno['aguardando_vistoria'] = current(Zend_Db_Table::getDefaultAdapter()->fetchAll($sqlAguardandoVistoria));
			if (empty($retorno['aguardando_vistoria'])) {
				$retorno['aguardando_vistoria'] = array(
					'id_status' => 70,
					'ds_status' => 'Aguardando Vistoria',
					'ds_nome_status' => 'Aguardando Vistoria',
					'quantidade' => 0
				);
			}
		}

		if (($this->_user->tp_usuario == "F" || $this->_user->tp_usuario == 'M') && $this->_user->id_empresa == 20) {
			$sqlAguardandoEndosso = "
				SELECT id_status, ds_status, ds_nome_status, ds_campo, count(id_proposta) as quantidade from (
					select
							s.id as id_status,
							s.ds_status,
							'Aguardando Endosso'::varchar as ds_nome_status,
							'id_status_empresa'::varchar as ds_campo,
							pvp.id_proposta
					from sistema.status s
					inner join seguro.propostas_vistorias_previas pvp on pvp.id_status = s.id
					inner join sistema.vistorias_empresas ve on ve.id_vistoria = pvp.id_vistoria
					inner join seguro.propostas p on p.id = pvp.id_proposta
					inner join produto.produtos prod on prod.id  = p.id_produto
					inner join seguro.propostas_corretores pc on pc.id_proposta = p.id
					inner join sistema.status sst on sst.id = p.id_status
					where pvp.fl_ativo = true
					and s.id = 71
					and pvp.fl_necessario_endosso = true
					and ve.id_empresa <> 20
					and sst.id = 8 -- adicionado, pois a listagem de endossos por default filtra por apólice emitida
					".$where."
					group by s.id,
							s.ds_status,
							pvp.id_proposta
				) as resultado
				group by id_status, ds_status, ds_nome_status, ds_campo
			";

			$retorno['aguardando_endosso'] = current(Zend_Db_Table::getDefaultAdapter()->fetchAll($sqlAguardandoEndosso));
			if (empty($retorno['aguardando_endosso'])) {
				$retorno['aguardando_endosso'] = array(
					'id_status' => 71,
					'ds_status' => 'Aguardando Endosso',
					'ds_nome_status' => 'Aguardando Endosso',
					'quantidade' => 0
				);
			}
		}

		if (($this->_user->tp_usuario == "V" || $this->_user->tp_usuario == 'M') || ($this->_user->tp_usuario == "F" && $this->_user->id_empresa == 20)) {
			$sqlRealizadaTablet = "
				select
						s.id as id_status,
						s.ds_status,
						s.ds_status as ds_nome_status,
						'id_status_tablet' as ds_campo,
						count(pvp.id_status) as quantidade
				from sistema.status s
				inner join seguro.propostas_vistorias_previas pvp on pvp.id_status_tablet = s.id
				inner join sistema.vistorias_empresas ve on ve.id_vistoria = pvp.id_vistoria
				inner join seguro.propostas p on p.id = pvp.id_proposta
				inner join produto.produtos prod on prod.id  = p.id_produto
				inner join seguro.propostas_corretores pc on pc.id_proposta = p.id
				where pvp.fl_ativo = true
				and ve.id_empresa <> 20
				and s.ds_chave = 'REALIZADA'
				".$where."
				group by s.id,
						s.ds_status;";

			$retorno['realizada'] = current(Zend_Db_Table::getDefaultAdapter()->fetchAll($sqlRealizadaTablet));
			if (empty($retorno['realizada'])) {
				$retorno['realizada'] = array(
					'id_status' => 221,
					'ds_status' => 'Realizada',
					'ds_nome_status' => 'Realizada',
					'quantidade' => 0
				);
			}
		}

		return $retorno;
	}

	public function getPreliminarPendente($idSafra = '', $umaSafra = false){
		$this->_user = Zend_Auth::getInstance()->getIdentity();
		$Safras = new Produto_Model_Safras();

		if ($this->_user->tp_usuario == "V" || $this->_user->tp_usuario == 'M'){
			$where = " and ve.id_empresa = {$this->_user->id_empresa} ";

		}else if ($this->_user->tp_usuario == 'C') {
			$where = " and pc.id_usuario = {$this->_user->id} ";

		} elseif ($this->_user->tp_usuario == 'P') {
			$where = " and p.id_usuario_criacao = {$this->_user->id} ";

		} else {
			$where = "";
		}

		//adicionado para previnir erros em outras partes do sistema que use esta função
		$matchSafra = ">=";
		if ($umaSafra) {
			$matchSafra = "=";
		}
		if(!$idSafra){
			$where .= ' and prod.id_safra '.$matchSafra.' '.($Safras->safraCurrent);

		}else{
			$where .= ' and prod.id_safra '.$matchSafra.' '.$idSafra;
		}


		$sql = "select
					count(a.id) as preliminares_pendentes
				from
					sinistro.avisos a inner join
					seguro.propostas p on p.id = a.id_proposta inner join
					seguro.propostas_corretores pc on pc.id_proposta = p.id inner join
					produto.produtos prod on prod.id = p.id_produto inner join
					sinistro.vistorias_avisos va on va.id_aviso = a.id inner JOIN
					sistema.vistorias v on v.id = va.id_vistoria inner JOIN
					sistema.vistorias_empresas ve on ve.id_vistoria = v.id inner join
					sistema.tipos_vistoria tv on tv.id = v.id_tipo
				where
					va.id_vistoria not in (select id_vistoria from sistema.vistorias_laudos_preliminares) and
					tv.ds_chave_tipos_vistoria = 'PRELIMINAR'
					".$where;

		return Zend_Db_Table::getDefaultAdapter()->fetchOne($sql);
	}

	public function getPreliminares($idSafra = '', $idStatus, $umaSafra = false){
		$Safras = new Produto_Model_Safras();

		if ($this->_user->tp_usuario == "V" || $this->_user->tp_usuario == 'M'){
			$where = " and ve.id_empresa = {$this->_user->id_empresa} ";
		} elseif ($this->_user->tp_usuario == 'C') {
			$where = " and pc.id_usuario = {$this->_user->id} ";
		} elseif ($this->_user->tp_usuario == 'P') {
			$where = " and p.id_usuario_criacao = {$this->_user->id} ";
		}

		//adicionado para previnir erros em outras partes do sistema que use esta função
		$matchSafra = ">=";
		if ($umaSafra) {
			$matchSafra = "=";
		}
		if(!$idSafra){
			$where .= ' and prod.id_safra '.$matchSafra.' '.($Safras->safraCurrent);
		}else{
			$where .= ' and prod.id_safra '.$matchSafra.' '.$idSafra;
		}

		$where .= ' and s.id = '.$idStatus;

		$sql = "select
					p.id
				from
					sistema.status s inner join
					sinistro.laudos_preliminares lp on lp.id_status = s.id inner join
					sistema.vistorias_laudos_preliminares vlp on vlp.id_laudo_preliminar = lp.id inner join
					sistema.vistorias_empresas ve on ve.id_vistoria = vlp.id_vistoria inner join
					sinistro.processos proc on proc.id = lp.id_processo inner join
					seguro.propostas p on p.id = proc.id_proposta inner join
					seguro.propostas_endosso pe on pe.id_proposta = p.id and pe.fl_proposta_vigente = true inner join
					produto.produtos prod on prod.id  = p.id_produto inner join
					seguro.propostas_corretores pc on pc.id_proposta = p.id
				where
					s.fl_ativo = true
					".$where."
				group by
					p.id
		";

		return count(Zend_Db_Table::getDefaultAdapter()->fetchAll($sql));
	}

	public function getFinalPendente($idSafra = '', $umaSafra = false){
		$Safras = new Produto_Model_Safras();

		if ($this->_user->tp_usuario == "V" || $this->_user->tp_usuario == 'M'){
			$where = " and ve.id_empresa = {$this->_user->id_empresa}";

		}else if ($this->_user->tp_usuario == 'C') {
			$where = " and pc.id_usuario = {$this->_user->id}";

		} elseif ($this->_user->tp_usuario == 'P') {
			$where = " and p.id_usuario_criacao = {$this->_user->id}";

		} else {
			$where = "";
		}

		//adicionado para previnir erros em outras partes do sistema que use esta função
		$matchSafra = ">=";
		if ($umaSafra) {
			$matchSafra = "=";
		}
		if(!$idSafra){
			$where .= ' and prod.id_safra '.$matchSafra.' '.($Safras->safraCurrent);

		}else{
			$where .= ' and prod.id_safra '.$matchSafra.' '.$idSafra;
		}

		$sql = "select
					count(a.id) as finais_pendentes
				from
					sinistro.avisos a inner join
					seguro.propostas p on p.id = a.id_proposta inner join
					seguro.propostas_corretores pc on pc.id_proposta = p.id inner join
					produto.produtos prod on prod.id = p.id_produto inner join
					sinistro.vistorias_avisos va on va.id_aviso = a.id inner JOIN
					sistema.vistorias v on v.id = va.id_vistoria inner JOIN
					sistema.vistorias_empresas ve on ve.id_vistoria = v.id inner join
					sistema.tipos_vistoria tv on tv.id = v.id_tipo
				where
                    not exists (select 1 from sistema.vistorias_laudos_finais vlf where vlf.id_vistoria = va.id_vistoria) and
					tv.ds_chave_tipos_vistoria = 'FINAL'
					".$where;

		return Zend_Db_Table::getDefaultAdapter()->fetchOne($sql);
	}

	public function getFinais($idSafra = '', $idStatus, $umaSafra = true){
		$Safras = new Produto_Model_Safras();

		if ($this->_user->tp_usuario == "V" || $this->_user->tp_usuario == 'M'){
			$where = " and ve.id_empresa = {$this->_user->id_empresa} ";

		}else if ($this->_user->tp_usuario == 'C') {
			$where = " and pc.id_usuario = {$this->_user->id} ";

		} elseif ($this->_user->tp_usuario == 'P') {
			$where = " and p.id_usuario_criacao = {$this->_user->id} ";

		} else {
			$where = "";
		}

		//adicionado para previnir erros em outras partes do sistema que use esta função
		$matchSafra = ">=";
		if ($umaSafra) {
			$matchSafra = "=";
		}
		if(!$idSafra){
			$where .= ' and prod.id_safra '.$matchSafra.' '.($Safras->safraCurrent);

		}else{
			$where .= ' and prod.id_safra '.$matchSafra.' '.$idSafra;
		}

		$where .= ' and s.id = '.$idStatus;

		$sql = "select
					p.id
				from
					sistema.status s inner join
					sinistro.laudos_finais lf on lf.id_status = s.id inner join
					sistema.vistorias_laudos_finais vlf on vlf.id_laudo_final = lf.id inner join
					sistema.vistorias_empresas ve on ve.id_vistoria = vlf.id_vistoria inner join
					sinistro.processos proc on proc.id = lf.id_processo inner join
					seguro.propostas p on p.id = proc.id_proposta inner join
					seguro.propostas_endosso pe on pe.id_proposta = p.id and pe.fl_proposta_vigente = true inner join
					produto.produtos prod on prod.id  = p.id_produto inner join
					seguro.propostas_corretores pc on pc.id_proposta = p.id
				where
					s.fl_ativo = true
					".$where."

				group by
					p.id
		";

		return count(Zend_Db_Table::getDefaultAdapter()->fetchAll($sql));
	}

	public function getTotaisProcessos($safra){

        $this->_db->query("
			create temp table tmp_processos as (	(
				SELECT DISTINCT p.id                                AS id_processo
				, p.id_proposta
				, p.fl_pasta_aberta
				, COALESCE(qtd_is_encerrados.contador, 0)      AS qtd_is_encerrados
				, COALESCE(qtd_is_liquidados.contador, 0)      AS qtd_is_liquidados
				, av.dt_criacao                                AS dt_envio_encerramento
				, av.dt_encerramento_colheita                  AS dt_encerramento_colheita
				, u.ds_nome_usuario                            AS ds_nome_usuario_responsavel_liquidacao
				, liqis.id                                     AS id_liqis
			 FROM sinistro.processos                              p
	   INNER JOIN sinistro.avisos_encerramento                    av
			   ON av.id_proposta = p.id_proposta
			  AND av.fl_ativo = TRUE
			  AND av.fl_del   = FALSE
	   INNER JOIN seguro.propostas                                pr
			   ON pr.id       = p.id_proposta
	   INNER JOIN produto.produtos                                pd
			   ON pd.id = pr.id_produto
	   INNER JOIN seguro.propostas_coberturas                     pdc
			   ON pr.id            = pdc.id_proposta
	   INNER JOIN produto.coberturas                              pc
			   ON pc.id = pdc.id_cobertura
			  AND pc.id NOT IN (5,16,30,31)
	   INNER JOIN sinistro.avisos_encerramento_itens_segurados    avis
			   ON avis.id_aviso_encerramento = av.id
		LEFT JOIN sinistro.liquidacoes_itens_segurados_coberturas liqis
			   ON liqis.id_cobertura     = pc.id
			  AND liqis.id_item_segurado = avis.id_item_segurado
			  AND liqis.fl_del           = FALSE
   --            AND liqis.id               IS NULL
		LEFT JOIN sistema.usuarios                                u
			   ON u.id = p.id_usuario_responsavel_liquidacao
		LEFT JOIN (
						SELECT COUNT(lisc.id) AS contador
							 , id_processo
						  FROM sinistro.liquidacoes_itens_segurados_coberturas lisc
					INNER JOIN sinistro.liquidacoes l
							ON l.id = lisc.id_liquidacao
						 WHERE lisc.id_cobertura NOT IN (5,16,30,31)
					  GROUP BY id_processo
				  )                                            AS qtd_is_liquidados
			   ON qtd_is_liquidados.id_processo = p.id
		LEFT JOIN (
						SELECT COUNT(avis.id) AS contador
							 , ave.id_proposta
						  FROM sinistro.avisos_encerramento_itens_segurados avis
					INNER JOIN seguro.itens_segurados its
							ON its.id = avis.id_item_segurado
						   AND its.vl_lmga > 0
					INNER JOIN sinistro.avisos_encerramento ave
							ON ave.id = avis.id_aviso_encerramento
						 WHERE ave.fl_del = FALSE
					  GROUP BY ave.id_proposta
				  )                                            AS qtd_is_encerrados
			   ON qtd_is_encerrados.id_proposta = pr.id
			WHERE p.id_status <> ".Agro_Util::status("CANCELADO", "SP")." and id_safra >= " . $safra . "
		 ORDER BY  p.id
				 , p.id_proposta
				 , p.fl_pasta_aberta
				 , av.dt_criacao
				 , av.dt_encerramento_colheita
				)
			)
		");
				
		$sql = "
				select
					s.ds_nome_safra as safra,
					s.id as id_safra,
					(
						select distinct
							count(p1.id)
						from
							sinistro.processos p1 inner JOIN
							seguro.propostas prop1 on prop1.id = p1.id_proposta inner JOIN
							seguro.propostas_endosso pe on pe.id_proposta = prop1.id and pe.fl_proposta_vigente = true inner join
							produto.produtos prod1 on prod1.id = prop1.id_produto
						WHERE
							prod1.id_safra = s.id and
							p1.id_status <> ".Agro_Util::status("CANCELADO", "SP")."
					) as total_processos,

					(
						select distinct
							count(p2.id)
						from
							sinistro.processos p2 inner JOIN
							seguro.propostas prop2 on prop2.id = p2.id_proposta inner JOIN
							seguro.propostas_endosso pe on pe.id_proposta = prop2.id and pe.fl_proposta_vigente = true inner join
							produto.produtos prod2 on prod2.id = prop2.id_produto
						WHERE
							prod2.id_safra = s.id AND
							p2.id in (select l1.id_processo from sinistro.liquidacoes l1) and
							p2.id_status <> ".Agro_Util::status("CANCELADO", "SP")."
					) as total_processos_liquidados,
					( select count(*) from (
						select distinct
							processos.id_processo,
							p.id_proposta_mae as id_proposta,
							processos.ds_nome_usuario_responsavel_liquidacao,
							p.nr_apolice,
							(qtd_is_encerrados - qtd_is_liquidados) as qtd_quadras_pendentes,
							p.id_produto,
							pd.ds_nome_produto,
							pd.id_safra,
							s.ds_chave,
							s.ds_nome_safra,
							case
								when processos.fl_pasta_aberta then 'Sim'
									else 'Não'
							end fl_pasta_aberta,
			
							CASE
								when c.id is not NULL then c.ds_nome_corretor
									else pre.ds_nome_preposto ||'(Preposto)'
							end ds_nome_corretor,
			
							cu.ds_nome_cultura,
			
							to_char(processos.dt_encerramento_colheita, 'DD/MM/YYYY') as dt_encerramento_colheita,
							to_char(processos.dt_envio_encerramento, 'DD/MM/YYYY') as dt_envio_encerramento,
			
							(
									SELECT
										array_to_string(
											ARRAY(
												SELECT
													pb.ds_nome_beneficiarios || ' (' || pb.nr_cpf_cnpj || ')'
												FROM
													seguro.propostas_beneficiarios pb
												WHERE
													pb.id_proposta = P.id
											),
									' / '
									)
			
								)AS ds_beneficiarios,
							proponente.ds_nome_proponente,
							m.ds_nome_municipio,
							e.ds_sigla
						from
							tmp_processos as processos inner join
							seguro.propostas p on p.id = processos.id_proposta
							inner join seguro.propostas_endosso pe on pe.id_proposta = p.id and pe.fl_proposta_vigente = true
							inner join seguro.propostas_status ps on ps.id_proposta = p.id inner join
							sistema.status st on st.id = ps.id_status and st.ds_chave not in ('PROPOSTA_INCOMPLETA' , 'NAO_ENVIADA' , 'DEVOLVIDA' , 'PROPOSTA_CANCELADA' , 'APOLICE_CANCELADA', 'ORCAMENTO_ENDOSSO', 'ENDOSSO_INCOMPLETO', 'SOLICITACAO_CANCELADA') inner join
							produto.produtos pd on pd.id = p.id_produto inner join
							produto.produtos_geral pg on pg.id = pd.id_produto_geral inner join
							produto.culturas cu on cu.id = pg.id_cultura inner join
							produto.safras ss on ss.id = pd.id_safra inner join
							seguro.propostas_corretores pc on pc.id_proposta = p.id left join
							sistema.corretores c on c.id_usuario = pc.id_usuario left join
							sistema.prepostos pre on pre.id_usuario = pc.id_usuario inner join
							seguro.propostas_proponentes proponente on proponente.id_proposta = p.id inner join
							seguro.propostas_propriedades po on po.id_proposta = p.id inner join
							sistema.municipios m on m.id = po.id_municipio inner join
							sistema.estados e on e.id = m.id_estado
						where id_safra = s.id
							AND processos.id_liqis IS NULL
							AND (qtd_is_encerrados - qtd_is_liquidados) > 0) as conta
					) as total_processos_aguardando_liquidacao
			FROM
				produto.safras s
			WHERE
				s.id >= $safra
			order by
				s.id desc
		";

		return Zend_Db_Table::getDefaultAdapter()->fetchAll($sql);
	}


	public function getTotaisAvisos($id_safra){
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('a' => 'sinistro.avisos'), array('a.id'));
		$Select->join(array('pr' => 'sinistro.processos'), 'pr.id_proposta = a.id_proposta', false);
		$Select->join(array('pe' => 'sinistro.processos_empresas'), 'pe.id_processo = pr.id and pe.fl_ativo=true', false);
		$Select->join(array('p' => 'seguro.propostas'), 'p.id = pr.id_proposta', false);
		$Select->join(array('pen' => 'seguro.propostas_endosso'), 'pen.id_proposta = p.id and fl_proposta_vigente = true', false);
		$Select->join(array('pd' => 'produto.produtos'), 'p.id_produto = pd.id', false);
		$Select->join(array('s' => 'sistema.status'), 's.id = a.id_status', false);

		if ($this->_user->tp_usuario == 'V' || $this->_user->tp_usuario == 'M') {
			$Select->where('pe.id_empresa = ?', $this->_user->id_empresa);
		}

		if(!$id_safra){
			$Safra = new Produto_Model_Safras();
			$id_safra = $Safra->safraCurrent;
		}

		$Select->where('pd.id_safra = ?', $id_safra);
		$Select->where('a.id_status = ?', 28);
		$Select->where('a.fl_novo = ?', 'false');
		$Select->group('a.id');

		$result = $this->_db->fetchAll($Select);


		$return['vistos'] = count($result);
		//die($Select);
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('a' => 'sinistro.avisos'), array('count(a.id)'));
		$Select->join(array('p' => 'seguro.propostas'), 'p.id = a.id_proposta', false);
		$Select->join(array('pen' => 'seguro.propostas_endosso'), 'pen.id_proposta = p.id and fl_proposta_vigente = true', false);
		$Select->join(array('pd' => 'produto.produtos'), 'p.id_produto = pd.id', false);
		$Select->join(array('s' => 'sistema.status'), 's.id = a.id_status', false);
		$Select->joinLeft(array('pr' => 'sinistro.processos'), 'pr.id_proposta = a.id_proposta', false);
		$Select->joinLeft(array('pe' => 'sinistro.processos_empresas'), 'pe.id_processo = pr.id and pe.fl_ativo=true', false);

		if ($this->_user->tp_usuario == 'V' || $this->_user->tp_usuario == 'M') {
			$Select->where('pe.id_empresa = ?', $this->_user->id_empresa);
			$Select->where('pr.id is not null');
		}

		if(!$id_safra){
			$Safra = new Produto_Model_Safras();
			$id_safra = $Safra->safraCurrent;
		}

		$Select->where('pd.id_safra >= ?', $id_safra);
		$Select->where('a.fl_novo = ?', 'true');
		$Select->where('a.id_status = ?', 28);

		$return['novos'] = $this->_db->fetchOne($Select);

		return $return;
	}

	public function getSolicitacoes(){
		$sql = "
			select
				s.ds_status,
				count(ta.id) as qtd
			FROM
				solicitacao.tarefa ta inner JOIN
				sistema.status s on s.id = ta.id_status
			where
				ta.id_executor = {$this->_user->id}
			GROUP BY
				s.ds_status
			order by
				s.ds_status
		";

		return Zend_Db_Table::getDefaultAdapter()->fetchAll($sql);
	}

	public function getAvisoInicioColheita($idSafra = '')
	{
		$Safras = new Produto_Model_Safras();

 		if ($this->_user->tp_usuario == "V" || $this->_user->tp_usuario == 'M'){
			$where = " AND id_empresa = {$this->_user->id_empresa} ";

		}else if ($this->_user->tp_usuario == 'C') {
			$join  = " JOIN sistema.funcionarios
					     ON id_empresa = funcionarios.id_empresa ";
			$where = " AND funcionarios.id = {$this->_user->id} ";

		} elseif ($this->_user->tp_usuario == 'P') {
			$where = " AND avisos_inicio.id_usuario_criacao = {$this->_user->id} ";

		} else {
			$where = "";
		}

		if (!$idSafra) {
			$where .= " AND id_safra >= ".($Safras->safraCurrent);
		} else {
			$where .= " AND id_safra >= ".$idSafra;
		}

		$sql = "
				SELECT * FROM (
				SELECT count(v_processo_sinistro.id) as nro_avisos_novo FROM sinistro.v_processo_sinistro
				 ".$join."
				WHERE (id_proposta in (select id_proposta from sinistro.avisos_inicio where fl_novo = true))
				  ".$where."
				) AS avisos_novos, (
				 SELECT count(v_processo_sinistro.id) as nro_avisos_aberto FROM sinistro.v_processo_sinistro
				  ".$join."
				WHERE (id_proposta in (select id_proposta from sinistro.avisos_inicio where fl_novo = false))
				  ".$where."
				 ) AS avisos_abertos";

		return Zend_Db_Table::getDefaultAdapter()->fetchAll($sql);
	}

	public function getSolicitacaoEndossoDisabled($idSafra = ''){

		if(!$id_safra){
			$Safra = new Produto_Model_Safras();
			$id_safra = $Safra->safraCurrent;
		}

		$status = array ('nao_analisado' => 'SOLICITACAO_ENDOSSO_NAO_ANALISADO',
						 'pendente' => 'SOLICITACAO_ENDOSSO_PENDENTE',
						 'aceito' => 'SOLICITACAO_ENDOSSO_ACEITO',
				   		 'negado' => 'SOLICITACAO_ENDOSSO_NEGADO'
						);

		foreach ($status as $chave => $valor) {
			$Select = $this->select()->setIntegrityCheck(false);
			$Select->from(array('pes' => 'seguro.propostas_endosso_solicitacao'), array('coalesce(count(pes.id),0) as qtd'));
			$Select->join(array('ss' => 'sistema.status'), 'pes.id_status = ss.id', false);
			$Select->join(array('sp' => 'seguro.propostas'), 'pes.id_proposta = sp.id', false);
			$Select->join(array('pp' => 'produto.produtos'), 'sp.id_produto = pp.id', false);
			$Select->where('ss.ds_chave = ?', $valor);
			$Select->where('ss.id_tipo_status = 17');

			if ($id_safra) {
				$Select->where('pp.id_safra = ?', $id_safra);
			}

			if ($this->_user->tp_usuario == 'C') {
				$Select->join(array('pc' => 'seguro.propostas_corretores'), 'pc.id_proposta = sp.id', false);
				$Select->join(array('sc' => 'sistema.corretores'), 'sc.id_usuario = pc.id_usuario', false);
				$Select->where('sc.id_usuario = ?', $this->_user->id);
			}

			$ModelStatus = new Sistema_Model_Status();
			$return[$this->getIdStatus($valor)] = $this->_db->fetchOne($Select);
		}

		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('pes' => 'seguro.propostas_endosso_solicitacao'), array('coalesce(count(pes.id),0) as qtd'));
		$Select->join(array('sp' => 'seguro.propostas'), 'pes.id_proposta = sp.id', false);
		$Select->join(array('pp' => 'produto.produtos'), 'sp.id_produto = pp.id', false);
		$Select->where("(pes.ds_arquivo = '' or pes.ds_arquivo is null)");

		if ($this->_user->tp_usuario == 'C') {
			$Select->join(array('pc' => 'seguro.propostas_corretores'), 'pc.id_proposta = sp.id', false);
			$Select->join(array('sc' => 'sistema.corretores'), 'sc.id_usuario = pc.id_usuario', false);
			$Select->where('sc.id_usuario = ?', $this->_user->id);
		}

		if(!$id_safra){
			$Safra = new Produto_Model_Safras();
			$id_safra = $Safra->safraCurrent;
		}

		$return['nao_assinado'] = $this->_db->fetchOne($Select);

		return $return;
	}

    public function getBeneficiariosByStatusArquivos(int $idStatusArquivos)
    {
        $usuarioLogado = Zend_Auth::getInstance()->getIdentity();

        $select = $this->select()->distinct()->setIntegrityCheck(false);
        $select->from(['p' => "seguro.beneficiarios"], ['id']);

        if ($usuarioLogado->tp_usuario == 'P' || $usuarioLogado->tp_usuario == 'C') {
            $select->join(['pb' => 'seguro.propostas_beneficiarios'], 'pb.nr_cpf_cnpj = p.cpf_cnpj', false);
            $select->join(['pc' => 'seguro.propostas_corretores'], 'pc.id_proposta = pb.id_proposta', false);

            if ($usuarioLogado->tp_usuario == 'C') {
                $select->where("pc.id_usuario = ?", $usuarioLogado->id);
            }

            if ($usuarioLogado->tp_usuario == 'P') {
                $select->where("pc.id_usuario_criacao = ?", $usuarioLogado->id);
            }
        }

        $select->where('p.id_status_arquivos = ?', $idStatusArquivos);

        return $this->fetchAll($select)->toArray();
    }

	/**
	 * Método que vai buscar a quantidade de chamados do tipo confirmar contato - vistoriador
	 */
	private function countChamadosSinistroConfirmarContatoDestinatario($id_safra, $id_status, $campos = []){
		$camposRetorno = empty($campos) ? 'count(c.id) as quantidade' : $campos;
        $select = $this->select()->setIntegrityCheck(false);
        $select->from(array('c' => 'atendimento.chamados'), $camposRetorno);
        $select->join(array('u' => 'sistema.usuarios'), 'c.id_usuario_criacao = u.id', false);
        $select->join(array('pr' => 'seguro.propostas'), 'pr.id = c.id_proposta', false);
        $select->join(array('prd' => 'produto.produtos'), 'prd.id = pr.id_produto', false);

		$select
    		->where('prd.id_safra >= ?', $id_safra)
    		->where('id_parent IS NULL')
    		->where('c.id_departamento = ?', 23)
    		->where('c.id_tipo_chamado = ?', 112)
			->where("c.id_status in ($id_status)");

        if ($this->_user->id_empresa != 20 && ($this->_user->tp_usuario == 'V')) {
            $select->join(array('cd' => 'atendimento.chamados_destinatario'), 'cd.id_chamado = c.id', 'ds_tipo_destinatario');
            $select->where("cd.id_empresa = (?)", $this->_user->id_empresa);
			
        }

        if ($this->_user->tp_usuario == 'C') {
            $select->join(array('pc' => 'seguro.propostas_corretores'), 'c.id_proposta = pc.id_proposta', false);
            $select->join(array('cd' => 'atendimento.chamados_destinatario'), 'c.id = cd.id_chamado', false);
            $select->where("cd.ds_tipo_destinatario = ?", 'C');
            $select->where("pc.id_usuario = ?", $this->_user->id);

        }

        if (!empty($idResponsavel)) {
            $select->where("c.id_responsavel = ?", $idResponsavel);
        }
        return $this->getDefaultAdapter()->fetchAll($select);
	}
	
	public function countRespostasChamadosSinistro($id_safra, $id_status)
	{
		$chamados = $this->countChamadosSinistroConfirmarContatoDestinatario($id_safra, $id_status, ['id', 'id_tipo_chamado', 'id_status']);
		$ids_chamados_sinistro = [];

		if(!empty($chamados)){
			foreach($chamados as $chamado){
				if(in_array($chamado['id_tipo_chamado'], [112]) && in_array($chamado['id_status'], [58,73]) && Zend_Auth::getInstance()->getIdentity()->tp_usuario == $chamado['ds_tipo_destinatario']){
					$ids_chamados_sinistro[] = $chamado['id'];
				}
			}

			$camposRetorno = empty($campos) ? 'count(c.id) as quantidade' : $campos;

			$select = $this->select()->setIntegrityCheck(false);
			$select->from(array('c' 	=> 'atendimento.chamados'), $camposRetorno);
        	$select->join(array('u' 	=> 'sistema.usuarios'), 'c.id_usuario_criacao = u.id', false);
        	$select->join(array('pr' 	=> 'seguro.propostas'), 'pr.id = c.id_proposta', false);
        	$select->join(array('prd' 	=> 'produto.produtos'), 'prd.id = pr.id_produto', false);
        	$select->where("c.id_status in ($id_status)");

        	$select->where("c.fl_pendencia_agrobrasil IS NOT true");
        	$select->where("prd.id_safra >= $id_safra");

        	$select->where("c.id_departamento = (?)", 23);
			$select->where("c.id_tipo_chamado = (?)", 112);

			if(!empty($ids_chamados_sinistro)){
				
				$ids = array_map('intval', (array) $ids_chamados_sinistro);
				$lista = implode(',', $ids);

				$select->where('c.id_parent IN (' . $lista . ')');
	        		if (!empty($idResponsavel)) {
        	    		$select->where("c.id_responsavel = ?", $idResponsavel);
        			}
        			return $this->getDefaultAdapter()->fetchOne($select);
			}else{
				return 0;
			}
		}

		return 0;
	}
}
